ping.py
1.2 kB · python · 31 lines
1from automator.core.api import extract_gid, printful_request2from automator.core.errors import Retry, TaskAborted3from automator.core.models import Task4from automator.core.steps import Step56PRINTFUL_PING_URL = "sync/products/@"7MAX_PING_ATTEMPTS = 1289def wait(task: Task) -> None:10 count = task.metadata.get("ping_count", 0) + 111 task.metadata["ping_count"] = count12 if count >= MAX_PING_ATTEMPTS:13 raise TaskAborted(f"ping_count {count} for task {task.key}")14 raise Retry(f"Current: {Step.PING}. Next: {Step.PING} ({count}/{MAX_PING_ATTEMPTS})")1516def mrly_ping(task: Task) -> Task:17 shopify_id = extract_gid(task.product.shopify_id)18 result = printful_request(task, "GET", f"{PRINTFUL_PING_URL}{shopify_id}", allow_404=True)19 if not result:20 wait(task)21 data = result["result"]22 task.product.printful_id = data["sync_product"]["id"]23 synced = {sv["sku"]: sv["id"] for sv in data["sync_variants"]}24 for variant in task.variants:25 if variant.name not in synced:26 wait(task)27 for variant in task.variants:28 variant.printful_id = synced[variant.name]29 task.product.synced = True30 task.place(Step.SYNC)31 return task