Por "Atributo de metadado" me refiro a todos os getters e setters que armazenam e recuperam seus valores da chave metadata
, no manifest da instância.
O fragmento de código abaixo demonstra o comportamento indesejado, onde a mudança no valor retornado altera o estado interno da instância:
>>> from documentstore.domain import Journal
>>>
>>> bjmbr = Journal(id="bjmbr")
>>> bjmbr.other_titles = ["Foo"]
>>>
>>> bjmbr.manifest
{'id': 'bjmbr', 'created': '2019-02-07T20:38:09.815314Z', 'updated': '2019-02-07T20:38:45.787322Z', 'items': [], 'metadata': {'other_titles': [('2019-02-07T20:38:45.787322Z', ['Foo'])]}}
>>>
>>> other_titles = bjmbr.other_titles
>>> other_titles
['Foo']
>>> other_titles.append('Bar')
>>>
>>> bjmbr.other_titles
['Foo', 'Bar']
>>>
>>> bjmbr.manifest
{'id': 'bjmbr', 'created': '2019-02-07T20:38:09.815314Z', 'updated': '2019-02-07T20:38:45.787322Z', 'items': [], 'metadata': {'other_titles': [('2019-02-07T20:38:45.787322Z', ['Foo', 'Bar'])]}}
>>>
Do ponto de vista prático se trata de realizar a seguinte mudança nas properties tipo getter dos atributos de metadado :
@property
def publication_year(self):
return BundleManifest.get_metadata(self._manifest, "publication_year")
@property
def publication_year(self):
return BundleManifest.get_metadata(self.manifest, "publication_year")