[object Object]

← back to Designerwallcoverings

fix(dwpw-grs-migrate): --grs comma-list, drop blank metafields, per-row skip-on-error

35ba74f57b04067628cf0d0dd7bfe9198ef6ac92 · 2026-09-08 13:59:41 -0700 · Steve Abrams

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C6KGNY395sd4PKXbEzXbgV

Files touched

Diff

commit 35ba74f57b04067628cf0d0dd7bfe9198ef6ac92
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Tue Sep 8 13:59:41 2026 -0700

    fix(dwpw-grs-migrate): --grs comma-list, drop blank metafields, per-row skip-on-error
    
    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01C6KGNY395sd4PKXbEzXbgV
---
 scripts/dwpw-grs-migrate.py | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/scripts/dwpw-grs-migrate.py b/scripts/dwpw-grs-migrate.py
index 33f3bd9..ca90424 100644
--- a/scripts/dwpw-grs-migrate.py
+++ b/scripts/dwpw-grs-migrate.py
@@ -387,7 +387,9 @@ def update_grs(row, existing, image_ok, res):
     return pid, handle
 
 def _set_metafields(pid, row):
-    mfs = metafields_for(row)
+    # Drop any metafield whose value is blank — Shopify rejects blank values
+    # (e.g. sheet rows with an empty Pattern -> blank pattern_name).
+    mfs = [m for m in metafields_for(row) if str(m.get("value", "")).strip() != ""]
     for m in mfs:
         m["ownerId"] = pid
     q = '''mutation($mf:[MetafieldsSetInput!]!){ metafieldsSet(metafields:$mf){
@@ -612,7 +614,15 @@ def main():
     tot = {"create": 0, "update": 0, "publish": 0, "twin": 0, "archive": 0, "redirect": 0,
            "skip": 0, "no_image_draft": 0}
     for row in rows:
-        r = process(row, args.apply)
+        try:
+            r = process(row, args.apply)
+        except Exception as e:
+            print("  {:<10} ROW_ERROR  {}".format(row.get("grs", "?"), str(e)[:90]))
+            results.append({"grs": row.get("grs", "?"), "ensure": "error",
+                            "result": "ROW_ERROR", "skip": "ROW_ERROR: " + str(e)[:120],
+                            "dwpw_twins": [], "dwpw_twin_found": False})
+            tot["skip"] += 1
+            continue
         results.append(r)
         if r["ensure"] == "create": tot["create"] += 1
         else: tot["update"] += 1

← d46e031 fix(dwpw-grs-migrate): image verify accepts ATTACHED media,  ·  back to Designerwallcoverings  ·  docs(dwpw-grs-migrate): track 9 image-pending SKUs (DWPW dup 68a9edf →