Do not delete metafields not managed

issue11019
review364431002
This commit is contained in:
Cédric Krier
2021-12-21 23:20:50 +01:00
parent d87a3d889d
commit a2c047ea4c
3 changed files with 16 additions and 2 deletions
+1
View File
@@ -1,3 +1,4 @@
* Define the metafields managed by Tryton
* Add support for Python 3.10
* Remove support for Python 3.6
+6
View File
@@ -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')
+9 -2
View File
@@ -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)