This commit is contained in:
2025-08-18 16:55:45 +07:00
parent f19f3b0db1
commit 9159d5013e

127
main.py
View File

@@ -560,6 +560,9 @@ async def create_inventory_item(create_request: CreateItemRequest):
part_id = part.get("pk") part_id = part.get("pk")
print(f"Part created successfully: {part_id}") print(f"Part created successfully: {part_id}")
# Add custom parameters for books (ISBN and Year)
await add_part_parameters(client, config, part_id, create_request.media_item)
# Create the stock item # Create the stock item
stock_data = { stock_data = {
"part": part_id, "part": part_id,
@@ -680,6 +683,130 @@ def create_part_keywords(media_item: MediaItem) -> str:
return ", ".join(keywords) return ", ".join(keywords)
async def add_part_parameters(client: httpx.AsyncClient, config: Dict[str, Any], part_id: int, media_item: MediaItem):
"""Add custom parameters to a part based on media item data"""
try:
parameters_to_add = []
# Add ISBN for books
if media_item.isbn and media_item.isbn.strip():
parameters_to_add.append({
"name": "ISBN",
"value": media_item.isbn.strip()
})
# Add Year for all media types
if media_item.year and str(media_item.year).strip() and str(media_item.year) != "Unknown":
parameters_to_add.append({
"name": "Year",
"value": str(media_item.year).strip()
})
# Add Format for music items
if media_item.format and media_item.format.strip():
parameters_to_add.append({
"name": "Format",
"value": media_item.format.strip()
})
# Add Label for music items
if media_item.label and media_item.label.strip():
parameters_to_add.append({
"name": "Label",
"value": media_item.label.strip()
})
# Add Artist for music items
if media_item.artist and media_item.artist.strip():
parameters_to_add.append({
"name": "Artist",
"value": media_item.artist.strip()
})
# Add Author for books
if media_item.author and media_item.author.strip():
parameters_to_add.append({
"name": "Author",
"value": media_item.author.strip()
})
# Create each parameter
for param in parameters_to_add:
param_data = {
"part": part_id,
"template": None, # We'll create custom parameters without templates
"data": param["value"]
}
# First, try to find or create a parameter template
template_id = await get_or_create_parameter_template(client, config, param["name"])
if template_id:
param_data["template"] = template_id
print(f"Adding parameter {param['name']}: {param['value']} to part {part_id}")
param_response = await client.post(
f"{config['api_url']}part/parameter/",
headers=config["headers"],
json=param_data
)
if param_response.status_code == 201:
print(f"Successfully added parameter {param['name']}")
else:
print(f"Failed to add parameter {param['name']}: HTTP {param_response.status_code} - {param_response.text}")
except Exception as e:
print(f"Error adding part parameters: {e}")
async def get_or_create_parameter_template(client: httpx.AsyncClient, config: Dict[str, Any], param_name: str) -> Optional[int]:
"""Get or create a parameter template for the given parameter name"""
try:
# Try to find existing parameter template
response = await client.get(
f"{config['api_url']}part/parameter/template/",
headers=config["headers"],
params={"name": param_name}
)
if response.status_code == 200:
data = response.json()
# Handle both paginated and direct list responses
if isinstance(data, dict) and "results" in data:
templates = data.get("results", [])
elif isinstance(data, list):
templates = data
else:
templates = []
if templates:
return templates[0].get("pk")
# Create parameter template if it doesn't exist
template_data = {
"name": param_name,
"units": ""
}
create_response = await client.post(
f"{config['api_url']}part/parameter/template/",
headers=config["headers"],
json=template_data
)
if create_response.status_code == 201:
template = create_response.json()
print(f"Created parameter template: {param_name}")
return template.get("pk")
else:
print(f"Failed to create parameter template {param_name}: HTTP {create_response.status_code}")
except Exception as e:
print(f"Error with parameter template {param_name}: {e}")
return None
if __name__ == "__main__": if __name__ == "__main__":
import uvicorn import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000) uvicorn.run(app, host="0.0.0.0", port=8000)