Shopify / Shopify/shopify_python_api

Returned error in result missing error subject (discovered in metafield create/update)

Offen
#204 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

feature request
Vorherrschende Sprache
Python
Sterne
1.4k
Forks
388
Ø Merge
5 Std. 39 Min.
Gemergte PRs (30 T.)
1

Beschreibung

The shopify API returns the subject of an error as a key in the json error string, and pyactiveresource sometimes adds the value but not the key when it unpacks the string.

This probably shows up for some errors generated when adding or modifying variants or metafields, as they show up as lists of hashes in the object attributes. I hit a problem when adding or updating a metafield on a variant, and decided to dig.

The issue is in class Errors in activeresource.py:

    def from_hash(self, messages):
        attribute_keys = self.base.attributes.keys()
        for key, errors in six.iteritems(messages):
            for message in errors:
                if key in attribute_keys:
                    self.add(key, message)
                else:
                    self.add_to_base(message)

An error return like this:

{
    "errors": {
        "metafields.namespace": ["can't be blank", "is too short (minimum is 3 characters)"]
    }
}

(caused by trying to create or update a metafield with the key "name-space" instead of "namespace" :) will lose the important tidbit, the field causing the issue: "metafields" is a key in the variant attributes, but "metafields.namespace" is not.

Perhaps this might be a more robust approach?

    def from_hash(self, messages):
        attribute_keys = self.base.attributes.keys()
        for key, errors in six.iteritems(messages):
            for message in errors:
                if key.split('.')[0] in attribute_keys:
                    self.add(key, message)
                else:
                    self.add_to_base(' '.join([key, message]))

Thanks!

Rick

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne in activeresource.py bei der Klasse Errors und ihrer from_hash-Methode, und untersuche dann, wie verschachtelte Fehlerschlüssel entpackt werden. Reproduziere den Fall metafield-on-variant mit der gezeigten metafields.namespace-Antwort. Fertig ist es, wenn der zurückgegebene Fehler den subject-Schlüssel beibehält, anstatt das Feld zu verlieren, das den Fehler verursacht.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
api
Issue-Typ
Bug
Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Aktivitätsstatus
Veraltet
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.