From a2c047ea4ccdbbdd8e04d124aab44df568e6ca19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Tue, 21 Dec 2021 23:20:50 +0100 Subject: [PATCH] Do not delete metafields not managed issue11019 review364431002 --- CHANGELOG | 1 + tests/scenario_web_shop_shopify.rst | 6 ++++++ web.py | 11 +++++++++-- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 1193c79204..e99f496096 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,4 @@ +* Define the metafields managed by Tryton * Add support for Python 3.10 * Remove support for Python 3.6 diff --git a/tests/scenario_web_shop_shopify.rst b/tests/scenario_web_shop_shopify.rst index 6eccfb8fe3..655d9b91a4 100644 --- a/tests/scenario_web_shop_shopify.rst +++ b/tests/scenario_web_shop_shopify.rst @@ -70,6 +70,12 @@ Set metafields to product:: >>> 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 --git a/web.py b/web.py index 527e7a0f04..8e2b4361ea 100644 --- a/web.py +++ b/web.py @@ -115,13 +115,20 @@ class Shop(metaclass=PoolMeta): 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)