← back to Brand Mckenzie Reprice 2026 07
Brand McKenzie newer-wave reprice tooling: 117.65->235.29, 179.19->358.37, archive 2 dup old handles; catalog cost basis fixed (Sancar retail = our cost)
e10c562b628da688e19f7a5fc6262142081a6993 · 2026-07-13 09:34:16 -0700 · Steve Abrams
Files touched
A .gitignoreA reprice.pyA targets.txt
Diff
commit e10c562b628da688e19f7a5fc6262142081a6993
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Mon Jul 13 09:34:16 2026 -0700
Brand McKenzie newer-wave reprice tooling: 117.65->235.29, 179.19->358.37, archive 2 dup old handles; catalog cost basis fixed (Sancar retail = our cost)
---
.gitignore | 8 ++++++++
reprice.py | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
targets.txt | 39 +++++++++++++++++++++++++++++++++++++
3 files changed, 112 insertions(+)
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..1924158
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,8 @@
+node_modules/
+.env*
+tmp/
+*.log
+.DS_Store
+dist/
+build/
+.next/
diff --git a/reprice.py b/reprice.py
new file mode 100644
index 0000000..d7a8a29
--- /dev/null
+++ b/reprice.py
@@ -0,0 +1,65 @@
+#!/usr/bin/env python3
+"""Reprice Brand McKenzie newer-wave SKUs (Sancar cost basis, no phantom 50% discount).
+
+Tiers: old 117.65 (assumed cost $65) -> 235.29 (cost $130 / 0.65 / 0.85)
+ old 179.19 (assumed cost $99) -> 358.37 (cost $198 / 0.65 / 0.85)
+Old-handle duplicates dwbm-260113 / dwbm-260114 are archived (new-handle twins carry the SKU).
+"""
+import json, os, sys, time, urllib.request
+
+ENV = os.path.expanduser("~/Projects/secrets-manager/.env")
+env = {}
+for line in open(ENV):
+ line = line.strip()
+ if line and not line.startswith("#") and "=" in line:
+ k, v = line.split("=", 1)
+ env[k] = v.strip().strip("'\"")
+
+STORE = env["SHOPIFY_STORE_DOMAIN"] if "myshopify" in env.get("SHOPIFY_STORE_DOMAIN", "") else env["SHOPIFY_STORE"]
+if not STORE.endswith("myshopify.com"):
+ STORE = STORE + ".myshopify.com" if "." not in STORE else STORE
+TOKEN = env["SHOPIFY_ADMIN_TOKEN"]
+API = f"https://{STORE}/admin/api/2024-01"
+
+NEW_PRICE = {"117.65": "235.29", "179.19": "358.37"}
+ARCHIVE_HANDLES = {"dwbm-260113", "dwbm-260114"}
+DRY = "--apply" not in sys.argv
+
+def req(method, url, body=None):
+ r = urllib.request.Request(url, method=method,
+ headers={"X-Shopify-Access-Token": TOKEN, "Content-Type": "application/json"},
+ data=json.dumps(body).encode() if body else None)
+ with urllib.request.urlopen(r) as resp:
+ return json.load(resp)
+
+def storefront(handle):
+ with urllib.request.urlopen(f"https://designerwallcoverings.com/products/{handle}.json") as r:
+ return json.load(r)["product"]
+
+repriced = archived = skipped = 0
+for line in open(os.path.join(os.path.dirname(__file__), "targets.txt")):
+ handle, sku, tier = line.strip().split("|")
+ p = storefront(handle)
+ if handle in ARCHIVE_HANDLES:
+ print(f"ARCHIVE {handle} ({sku}) product {p['id']}")
+ if not DRY:
+ req("PUT", f"{API}/products/{p['id']}.json",
+ {"product": {"id": p["id"], "status": "archived"}})
+ archived += 1
+ time.sleep(0.6)
+ continue
+ bolt = [v for v in p["variants"] if "ample" not in v["title"]]
+ if len(bolt) != 1:
+ print(f"SKIP {handle}: {len(bolt)} non-sample variants"); skipped += 1; continue
+ v = bolt[0]
+ if v["price"] != tier:
+ print(f"SKIP {handle} ({sku}): live {v['price']} != expected {tier}"); skipped += 1; continue
+ new = NEW_PRICE[tier]
+ print(f"REPRICE {sku} {handle[:40]} {v['price']} -> {new}")
+ if not DRY:
+ req("PUT", f"{API}/variants/{v['id']}.json",
+ {"variant": {"id": v["id"], "price": new}})
+ repriced += 1
+ time.sleep(0.6)
+
+print(f"\n{'DRY RUN — ' if DRY else ''}repriced={repriced} archived={archived} skipped={skipped}")
diff --git a/targets.txt b/targets.txt
new file mode 100644
index 0000000..d0899dc
--- /dev/null
+++ b/targets.txt
@@ -0,0 +1,39 @@
+charming-lanes-denim-wallcovering-brand-mckenzie|DWBM-260113|117.65
+dwbm-260113|DWBM-260113|117.65
+charming-lanes-china-blue-wallcovering-brand-mckenzie|DWBM-260114|117.65
+dwbm-260114|DWBM-260114|117.65
+elephant-breaststroke-ocean-wallcovering-brand-mckenzie|DWBM-260115|179.19
+elephant-breaststroke-aqua-wallcovering-brand-mckenzie|DWBM-260116|179.19
+fine-china-blue-white-wallcovering-brand-mckenzie|DWBM-260117|117.65
+fine-china-blossom-wallcovering-brand-mckenzie|DWBM-260118|117.65
+instrumental-clay-wallcovering-brand-mckenzie|DWBM-260119|179.19
+instrumental-charcoal-wallcovering-brand-mckenzie|DWBM-260120|179.19
+jungle-life-cerise-turquoise-wallcovering-brand-mckenzie|DWBM-260121|179.19
+jungle-life-aquamarine-coral-wallcovering-brand-mckenzie|DWBM-260122|179.19
+lido-turquoise-wallcovering-brand-mckenzie|DWBM-260123|179.19
+lido-palm-green-wallcovering-brand-mckenzie|DWBM-260124|179.19
+mixology-ivory-wallcovering-brand-mckenzie|DWBM-260125|117.65
+mixology-ebony-wallcovering-brand-mckenzie|DWBM-260126|117.65
+the-mediterranean-cherry-aqua-wallcovering-brand-mckenzie|DWBM-260127|179.19
+the-mediterranean-blue-white-wallcovering-brand-mckenzie|DWBM-260128|179.19
+tiger-lily-charcoal-gold-wallcovering-brand-mckenzie|DWBM-260129|179.19
+tiger-lily-arctic-blue-pink-wallcovering-brand-mckenzie|DWBM-260130|179.19
+travel-map-earth-wallcovering-brand-mckenzie|DWBM-260131|179.19
+travel-map-clay-khaki-wallcovering-brand-mckenzie|DWBM-260132|179.19
+charming-lanes-fuchsia-wallcovering-brand-mckenzie|DWBM-260133|117.65
+charming-lanes-pumpkin-wallcovering-brand-mckenzie|DWBM-260134|117.65
+elephant-breaststroke-peppermint-pink-wallcovering-brand-mckenzie|DWBM-260135|179.19
+elephant-breaststroke-stone-wallcovering-brand-mckenzie|DWBM-260136|179.19
+fine-china-chalk-wallcovering-brand-mckenzie|DWBM-260137|117.65
+fine-china-charcoal-wallcovering-brand-mckenzie|DWBM-260138|117.65
+fine-china-royal-blue-wallcovering-brand-mckenzie|DWBM-260139|117.65
+instrumental-steel-wallcovering-brand-mckenzie|DWBM-260140|179.19
+jungle-life-grass-wallcovering-brand-mckenzie|DWBM-260141|179.19
+jungle-life-orange-blue-wallcovering-brand-mckenzie|DWBM-260142|179.19
+jungle-life-sunset-wallcovering-brand-mckenzie|DWBM-260143|179.19
+mixology-rainbow-wallcovering-brand-mckenzie|DWBM-260144|117.65
+the-mediterranean-lavender-rose-wallcovering-brand-mckenzie|DWBM-260145|179.19
+the-mediterranean-slate-blue-wallcovering-brand-mckenzie|DWBM-260146|179.19
+the-mediterranean-stone-wallcovering-brand-mckenzie|DWBM-260147|179.19
+tiger-lily-linen-green-wallcovering-brand-mckenzie|DWBM-260148|179.19
+tiger-lily-midnight-wallcovering-brand-mckenzie|DWBM-260149|179.19
(oldest)
·
back to Brand Mckenzie Reprice 2026 07
·
auto-save: 2026-07-13T11:54:48 (1 files) — all_orders.json 66b089b →