From 9159d5013edbfeb55e9eaf0582649c6ba4edb634 Mon Sep 17 00:00:00 2001 From: grabowski Date: Mon, 18 Aug 2025 16:55:45 +0700 Subject: [PATCH] v1.1 --- main.py | 127 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) diff --git a/main.py b/main.py index ce1268e..dc7dd65 100644 --- a/main.py +++ b/main.py @@ -560,6 +560,9 @@ async def create_inventory_item(create_request: CreateItemRequest): part_id = part.get("pk") 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 stock_data = { "part": part_id, @@ -680,6 +683,130 @@ def create_part_keywords(media_item: MediaItem) -> str: 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__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000)