← back to Kravet Sheet Sync 2026 04 20
fix_pilot_variants.py
53 lines
#!/usr/bin/env python3
"""Add missing main-sell variant to 10 pilot products."""
import json, urllib.request, subprocess, io, csv
TOKEN=os.environ.get('SHOPIFY_ADMIN_TOKEN','')
URL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json'
def gql(q,v=None):
body=json.dumps({"query":q,"variables":v or {}}).encode()
return json.loads(urllib.request.urlopen(urllib.request.Request(URL,data=body,method="POST",
headers={"Content-Type":"application/json","X-Shopify-Access-Token":TOKEN}),timeout=30).read())
def pg(q):
r=subprocess.run(["ssh","root@45.61.58.125",
f'PGPASSWORD=DW2024! psql -h 127.0.0.1 -U dw_admin -d dw_unified --csv -t -c "{q}"'],
capture_output=True,text=True,check=True)
return [row for row in csv.reader(io.StringIO(r.stdout)) if row]
# Pull dw_sku → shopify_id + MAP + cost + width from kravet_catalog (where I inserted)
rows = pg("""
SELECT c.dw_sku, c.shopify_product_id, c.price_retail::text, c.cost_price::text,
n.width
FROM kravet_catalog c
JOIN kravet_diff_new_2026_04_20 n ON n.new_dw_sku = c.dw_sku
WHERE c.dw_sku IN ('DWKK-140010','DWKK-140056','DWKK-140544','DWKK-140783','DWKK-141930',
'DWKK-142436','DWKK-142909','DWKK-143582','DWKK-143879','DWKK-144813')
""")
ADD = """mutation($pid:ID!,$vs:[ProductVariantsBulkInput!]!,$st:ProductVariantsBulkCreateStrategy){
productVariantsBulkCreate(productId:$pid,variants:$vs,strategy:$st){
productVariants{id sku title price}
userErrors{field message}
}
}"""
for dw_sku, pid, price, cost, width in rows:
w = str(width).strip() if width else ""
option_val = f"Sold Per Single Roll - {w}In Wide" if w else "Single Roll"
v = {
"price": f"{float(price):.2f}",
"inventoryItem": {"sku": dw_sku, "tracked": True},
"optionValues": [{"optionName": "Title", "name": option_val}],
}
if cost and cost != "":
v["inventoryItem"]["cost"] = f"{float(cost):.2f}"
r = gql(ADD, {"pid": pid, "vs": [v], "st": "DEFAULT"})
errs = r["data"]["productVariantsBulkCreate"]["userErrors"]
if errs:
print(f" {dw_sku} FAIL: {errs}")
else:
nv = r["data"]["productVariantsBulkCreate"]["productVariants"][0]
print(f" {dw_sku}: added {nv['sku']} @ ${nv['price']} '{nv['title']}'")