v1.1
This commit is contained in:
127
main.py
127
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)
|
||||
|
Reference in New Issue
Block a user