[object Object]

← back to Hollywood Price 2026

chore: lint (13 E401 import-splits autofixed), refactor (drop dead has_sellable, fix stale docstrings), v1.0.0 (session close)

d2fbca917d9c284ade521b1f4d04dbbfa0223d60 · 2026-07-12 10:52:30 -0700 · Steve Abrams

Files touched

Diff

commit d2fbca917d9c284ade521b1f4d04dbbfa0223d60
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Sun Jul 12 10:52:30 2026 -0700

    chore: lint (13 E401 import-splits autofixed), refactor (drop dead has_sellable, fix stale docstrings), v1.0.0 (session close)
---
 VERSION                                        |   1 +
 __pycache__/archive_267.cpython-314.pyc        | Bin 0 -> 6482 bytes
 __pycache__/build_524_split.cpython-314.pyc    | Bin 0 -> 7720 bytes
 __pycache__/build_plan.cpython-314.pyc         | Bin 0 -> 5759 bytes
 __pycache__/build_plan_correct.cpython-314.pyc | Bin 0 -> 4917 bytes
 __pycache__/price.cpython-314.pyc              | Bin 10401 -> 9884 bytes
 __pycache__/price_524.cpython-314.pyc          | Bin 0 -> 9888 bytes
 __pycache__/quote_only.cpython-314.pyc         | Bin 0 -> 6645 bytes
 __pycache__/split_analysis.cpython-314.pyc     | Bin 0 -> 10409 bytes
 archive_267.py                                 |  11 +++++++++--
 build_524_split.py                             |   7 ++++++-
 build_plan.py                                  |   7 +++++--
 build_plan_correct.py                          |   6 +++++-
 lib/__pycache__/shopify.cpython-314.pyc        | Bin 6036 -> 6000 bytes
 lib/shopify.py                                 |   2 +-
 price.py                                       |  16 ++++++----------
 price_524.py                                   |  20 ++++++++------------
 quote_only.py                                  |   6 +++++-
 split_analysis.py                              |   7 ++++++-
 19 files changed, 52 insertions(+), 31 deletions(-)

diff --git a/VERSION b/VERSION
new file mode 100644
index 0000000..3eefcb9
--- /dev/null
+++ b/VERSION
@@ -0,0 +1 @@
+1.0.0
diff --git a/__pycache__/archive_267.cpython-314.pyc b/__pycache__/archive_267.cpython-314.pyc
new file mode 100644
index 0000000..8682996
Binary files /dev/null and b/__pycache__/archive_267.cpython-314.pyc differ
diff --git a/__pycache__/build_524_split.cpython-314.pyc b/__pycache__/build_524_split.cpython-314.pyc
new file mode 100644
index 0000000..7cb8a91
Binary files /dev/null and b/__pycache__/build_524_split.cpython-314.pyc differ
diff --git a/__pycache__/build_plan.cpython-314.pyc b/__pycache__/build_plan.cpython-314.pyc
new file mode 100644
index 0000000..8241ffe
Binary files /dev/null and b/__pycache__/build_plan.cpython-314.pyc differ
diff --git a/__pycache__/build_plan_correct.cpython-314.pyc b/__pycache__/build_plan_correct.cpython-314.pyc
new file mode 100644
index 0000000..41ef677
Binary files /dev/null and b/__pycache__/build_plan_correct.cpython-314.pyc differ
diff --git a/__pycache__/price.cpython-314.pyc b/__pycache__/price.cpython-314.pyc
index eb27edd..6af482f 100644
Binary files a/__pycache__/price.cpython-314.pyc and b/__pycache__/price.cpython-314.pyc differ
diff --git a/__pycache__/price_524.cpython-314.pyc b/__pycache__/price_524.cpython-314.pyc
new file mode 100644
index 0000000..366f4e2
Binary files /dev/null and b/__pycache__/price_524.cpython-314.pyc differ
diff --git a/__pycache__/quote_only.cpython-314.pyc b/__pycache__/quote_only.cpython-314.pyc
new file mode 100644
index 0000000..5e236ab
Binary files /dev/null and b/__pycache__/quote_only.cpython-314.pyc differ
diff --git a/__pycache__/split_analysis.cpython-314.pyc b/__pycache__/split_analysis.cpython-314.pyc
new file mode 100644
index 0000000..e55d1c6
Binary files /dev/null and b/__pycache__/split_analysis.cpython-314.pyc differ
diff --git a/archive_267.py b/archive_267.py
index 8436ec3..bf1abc8 100644
--- a/archive_267.py
+++ b/archive_267.py
@@ -4,7 +4,15 @@
 Reads archive_final.csv. Shopify: status->ARCHIVED. dw_unified.shopify_products:
 status->ARCHIVED (shopify_id = gid). Idempotent (ledger + skip already-archived).
 Reversible (un-archive). $0."""
-import sys, os, csv, json, subprocess, datetime, time
+import sys
+import os
+import csv
+import json
+import glob
+import re
+import subprocess
+import datetime
+import time
 sys.path.insert(0, "lib")
 from shopify import gql
 
@@ -16,7 +24,6 @@ Q = "query($id:ID!){ product(id:$id){ status } }"
 
 
 def conn():
-    import glob, re
     for f in glob.glob(os.path.expanduser("~/Projects/hollywood-import/**/.env"), recursive=True) + \
              glob.glob(os.path.expanduser("~/Projects/hollywood-import/*.env")):
         for line in open(f):
diff --git a/build_524_split.py b/build_524_split.py
index 8647678..0a8cf39 100644
--- a/build_524_split.py
+++ b/build_524_split.py
@@ -4,7 +4,12 @@
     Momentum pattern WITH a price) -> plan_169.csv (price = pattern price x 1.448).
   - ARCHIVE the rest (no live Momentum pattern match) -> archive_355.csv.
 Pattern-level pricing is valid (Momentum prices are per-pattern, verified). $0."""
-import sys, json, os, urllib.request, re, csv
+import sys
+import json
+import os
+import urllib.request
+import re
+import csv
 sys.path.insert(0, "lib")
 from shopify import gql
 
diff --git a/build_plan.py b/build_plan.py
index 7ef2ce6..552e335 100644
--- a/build_plan.py
+++ b/build_plan.py
@@ -4,7 +4,11 @@ Scope (Steve 2026-07-12): price ACTIVE + Needs-Price Hollywood Wallcoverings pro
 whose custom.dw_sku matches the Momentum feed. EXCLUDE DWHW2- (garbage prefix).
 Price = feed `hw` (Hollywood retail = Momentum list x 1.448). Unit = feed `uom`.
 Output: plan.csv (gid, dw_sku, sample_sku_base, uom, hw, pattern, color, width, title). $0."""
-import sys, os, json, csv
+import sys
+import os
+import json
+import csv
+import collections
 sys.path.insert(0, "lib")
 from shopify import gql
 
@@ -62,7 +66,6 @@ def main():
     with open(OUT, "w", newline="") as f:
         w = csv.DictWriter(f, fieldnames=list(rows[0].keys()))
         w.writeheader(); w.writerows(rows)
-    import collections
     print(f"PLAN: {len(rows)} priceable products -> {OUT}")
     print("  skipped:", skipped)
     print("  uom:", dict(collections.Counter(r["uom"] for r in rows)))
diff --git a/build_plan_correct.py b/build_plan_correct.py
index 57e7019..d9ecb5e 100644
--- a/build_plan_correct.py
+++ b/build_plan_correct.py
@@ -4,7 +4,11 @@ Join: Shopify sku-base (variant sku minus -sample) == staged `mfr`  (verified ==
 manufacturer_sku == staged col3; staged hw matches live Momentum x1.448).
 Price = staged `hw`. Unit = staged `unit`. NEVER use the DWHW2 dw_sku (garbage).
 Sellable SKU = sku-base + unit-suffix. Output plan_correct.csv. $0."""
-import sys, os, json, csv, collections
+import sys
+import os
+import json
+import csv
+import collections
 sys.path.insert(0, "lib")
 from shopify import gql
 
diff --git a/lib/__pycache__/shopify.cpython-314.pyc b/lib/__pycache__/shopify.cpython-314.pyc
index 6c498ad..f736927 100644
Binary files a/lib/__pycache__/shopify.cpython-314.pyc and b/lib/__pycache__/shopify.cpython-314.pyc differ
diff --git a/lib/shopify.py b/lib/shopify.py
index c99a597..fa9e40d 100644
--- a/lib/shopify.py
+++ b/lib/shopify.py
@@ -1,5 +1,5 @@
 #!/usr/bin/env python3
-"""Shared Shopify Admin API (2024-10) client for the Elitis reprice job.
+"""Shared Shopify Admin API (2024-10) client for the Hollywood/Momentum reprice job.
 Reads token from the DW repo .env. All calls are $0 (Shopify Admin API is free).
 """
 import os, json, time, urllib.request, urllib.error, sys
diff --git a/price.py b/price.py
index ec3b46b..5de35d3 100644
--- a/price.py
+++ b/price.py
@@ -8,7 +8,12 @@ Needs-Price tag. Idempotent (ledger + live pre-check). $0 (Admin API free).
 Usage:  python3 price.py --canary N      # price first N, verbose, then STOP
         python3 price.py --batch          # price the rest (skips ledger-done)
 """
-import sys, os, csv, json, time, datetime
+import sys
+import os
+import csv
+import json
+import time
+import datetime
 sys.path.insert(0, "lib")
 from shopify import gql
 
@@ -35,15 +40,6 @@ M_MF_SET = """mutation($mf:[MetafieldsSetInput!]!){ metafieldsSet(metafields:$mf
 M_TAGSRM = """mutation($id:ID!,$tags:[String!]!){ tagsRemove(id:$id, tags:$tags){ userErrors{ message } } }"""
 
 
-def has_sellable(node):
-    for e in node["variants"]["edges"]:
-        n = e["node"]
-        sk = (n["sku"] or "")
-        if n["title"] != "Sample" and not sk.lower().endswith("-sample"):
-            return True
-    return False
-
-
 def log(row):
     new = not (os.path.exists(LEDGER) and os.path.getsize(LEDGER) > 0)
     with open(LEDGER, "a", newline="") as f:
diff --git a/price_524.py b/price_524.py
index e0c9784..9cad861 100644
--- a/price_524.py
+++ b/price_524.py
@@ -5,10 +5,15 @@ variant "Sold Per {Box|Yard|Panel|Square Yard}" priced at feed `hw` (Hollywood
 retail = list x 1.448), inventoryPolicy CONTINUE, tracked, qty min/step=1; strip
 Needs-Price tag. Idempotent (ledger + live pre-check). $0 (Admin API free).
 
-Usage:  python3 price.py --canary N      # price first N, verbose, then STOP
-        python3 price.py --batch          # price the rest (skips ledger-done)
+Usage:  python3 price_524.py --canary N  # price first N, verbose, then STOP
+        python3 price_524.py --batch      # price the rest (skips ledger-done)
 """
-import sys, os, csv, json, time, datetime
+import sys
+import os
+import csv
+import json
+import time
+import datetime
 sys.path.insert(0, "lib")
 from shopify import gql
 
@@ -35,15 +40,6 @@ M_MF_SET = """mutation($mf:[MetafieldsSetInput!]!){ metafieldsSet(metafields:$mf
 M_TAGSRM = """mutation($id:ID!,$tags:[String!]!){ tagsRemove(id:$id, tags:$tags){ userErrors{ message } } }"""
 
 
-def has_sellable(node):
-    for e in node["variants"]["edges"]:
-        n = e["node"]
-        sk = (n["sku"] or "")
-        if n["title"] != "Sample" and not sk.lower().endswith("-sample"):
-            return True
-    return False
-
-
 def log(row):
     new = not (os.path.exists(LEDGER) and os.path.getsize(LEDGER) > 0)
     with open(LEDGER, "a", newline="") as f:
diff --git a/quote_only.py b/quote_only.py
index 67841f2..ef276d6 100644
--- a/quote_only.py
+++ b/quote_only.py
@@ -4,7 +4,11 @@ After pricing (856) + archiving (267), the leftover ACTIVE + Needs-Price Hollywo
 set is the ~246 unmatched + ~12 no-sku — no resolvable Momentum/Versa price
 (Versa commercial publishes none). Mark them quote-only: ADD `quotes` tag, REMOVE
 `Needs-Price`. Keeps active + Sample-only, no fabricated price. Reversible. $0."""
-import sys, os, csv, datetime, time
+import sys
+import os
+import csv
+import datetime
+import time
 sys.path.insert(0, "lib")
 from shopify import gql
 
diff --git a/split_analysis.py b/split_analysis.py
index 071bb95..81be43b 100644
--- a/split_analysis.py
+++ b/split_analysis.py
@@ -3,7 +3,12 @@
 CORRECT join: Shopify sku-base -> col3 (Momentum number) -> LIVE Meilisearch price.
 Buckets: LIVE-PRICED (current Momentum price) / GONE (col3 known, no live price) /
 NO-COL3 (sku-base not in the momentum col3 map). Writes plan_correct.csv. $0."""
-import sys, os, json, csv, urllib.request, collections
+import sys
+import os
+import json
+import csv
+import urllib.request
+import collections
 sys.path.insert(0, "lib")
 from shopify import gql
 

← c5aa1ba re-vendor 11 HLW products Hollywood->Phillipe Romano (FileMa  ·  back to Hollywood Price 2026  ·  (newest)