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")
|
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)
|
||||||
|
Reference in New Issue
Block a user