changeset ea7d0b1b4c7a in modules/web_shop_shopify:default
details: 
https://hg.tryton.org/modules/web_shop_shopify?cmd=changeset&node=ea7d0b1b4c7a
description:
        Do not delete metafields not managed

        issue11019
        review364431002
diffstat:

 CHANGELOG                           |   1 +
 tests/scenario_web_shop_shopify.rst |   6 ++++++
 web.py                              |  11 +++++++++--
 3 files changed, 16 insertions(+), 2 deletions(-)

diffs (50 lines):

diff -r ec753b21f9b3 -r ea7d0b1b4c7a CHANGELOG
--- a/CHANGELOG Sat Dec 18 16:34:37 2021 +0100
+++ b/CHANGELOG Tue Dec 21 23:20:50 2021 +0100
@@ -1,3 +1,4 @@
+* Define the metafields managed by Tryton
 * Add support for Python 3.10
 * Remove support for Python 3.6
 
diff -r ec753b21f9b3 -r ea7d0b1b4c7a tests/scenario_web_shop_shopify.rst
--- a/tests/scenario_web_shop_shopify.rst       Sat Dec 18 16:34:37 2021 +0100
+++ b/tests/scenario_web_shop_shopify.rst       Tue Dec 21 23:20:50 2021 +0100
@@ -70,6 +70,12 @@
 
     >>> Template.get_shopify_metafields = get_shopify_metafields
 
+    >>> from trytond.modules.web_shop_shopify.web import Shop
+    >>> def managed_metafields(self):
+    ...     return {'global.test'}
+
+    >>> Shop.managed_metafields = managed_metafields
+
 Create country::
 
     >>> belgium = Country(name="Belgium", code='BE')
diff -r ec753b21f9b3 -r ea7d0b1b4c7a web.py
--- a/web.py    Sat Dec 18 16:34:37 2021 +0100
+++ b/web.py    Tue Dec 21 23:20:50 2021 +0100
@@ -115,13 +115,20 @@
                     and payment_journal.match(pattern)):
                 return payment_journal.journal
 
+    def managed_metafields(self):
+        return set()
+
     def __sync_metafields(self, resource, metafields):
+        metafields = metafields.copy()
+        managed_metafields = self.managed_metafields()
+        assert metafields.keys() <= managed_metafields
         for metafield in resource.metafields():
             key = '.'.join([metafield.namespace, metafield.key])
             value = metafield.to_dict()
             if key not in metafields:
-                metafield.destroy()
-                time.sleep(BACKOFF_TIME)
+                if key in managed_metafields:
+                    metafield.destroy()
+                    time.sleep(BACKOFF_TIME)
             elif metafields[key] != value:
                 for k, v in metafields.pop(key).items():
                     setattr(metafield, k, v)

Reply via email to