status.py
1.7 kB · python · 50 lines
1from automator.core.api import shopify_request2from automator.core.errors import Retry, TaskAborted3from automator.core.models import Task4from automator.core.steps import Step56MAX_STATUS_ATTEMPTS = 1078QUERY = """9query checkFiles($ids: [ID!]!) {10 nodes(ids: $ids) {11 ... on MediaImage {12 alt13 fileStatus14 id15 }16 }17}18"""1920def get_status(task: Task) -> list[dict]:21 variables = {"ids": [m.shopify_id for m in task.mockups]}22 result = shopify_request(task, QUERY, variables)23 return [node for node in result["data"]["nodes"] if node]2425def retry_files(task: Task) -> None:26 if task.metadata.get("files_retried"):27 raise TaskAborted(f"shopify file FAILED twice for {task.key}")28 task.metadata["files_retried"] = True29 for mockup in task.mockups:30 mockup.shopify_id = None31 task.place(Step.FILES)32 raise Retry(f"Current: {Step.STATUS}. Next: {Step.FILES}")3334def check_status(task: Task, files: list[dict]) -> None:35 if any(file["fileStatus"] == "FAILED" for file in files):36 retry_files(task)37 if not all(file["fileStatus"] == "READY" for file in files):38 count = task.metadata.get("status_count", 0) + 139 task.metadata["status_count"] = count40 if count >= MAX_STATUS_ATTEMPTS:41 raise TaskAborted(f"status_count {count} for task {task.key}")42 raise Retry(f"Current: {Step.STATUS}. Next: {Step.STATUS} ({count}/{MAX_STATUS_ATTEMPTS})")4344def mrly_status(task: Task) -> Task:45 files = get_status(task)46 if len(files) != len(task.mockups):47 raise TaskAborted(f"shopify returned {len(files)} of {len(task.mockups)} files")48 check_status(task, files)49 task.place(Step.PRODUCT)50 return task