diff --git a/docs/HISTORY.txt b/docs/HISTORY.txt index 5338478..cc0b28d 100644 --- a/docs/HISTORY.txt +++ b/docs/HISTORY.txt @@ -1,6 +1,11 @@ Changelog ========= +2.1 - (2023-04-11) +--------------------------- +* Bug fix: RestAPI fix DateTime timezone for ICoreMetadata fields serializer/deserializer + [avoinea refs #250368] + 2.0 - (2023-04-10) --------------------------- * Bug fix: RestAPI fix DateTime timezone for publication fields serializer/deserializer diff --git a/eea/volto/policy/restapi/deserializer/dxfields.py b/eea/volto/policy/restapi/deserializer/dxfields.py index f2e50bd..1f72abc 100644 --- a/eea/volto/policy/restapi/deserializer/dxfields.py +++ b/eea/volto/policy/restapi/deserializer/dxfields.py @@ -1,19 +1,25 @@ """ DXFields """ import dateutil -from pytz import timezone, utc -from eea.volto.policy.interfaces import IEeaVoltoPolicyLayer from plone.app.dexterity.behaviors.metadata import IPublication from plone.app.event.base import default_timezone from plone.dexterity.interfaces import IDexterityContent from plone.restapi.deserializer.dxfields import \ DatetimeFieldDeserializer as DefaultDatetimeFieldDeserializer from plone.restapi.interfaces import IFieldDeserializer +from pytz import timezone, utc from z3c.form.interfaces import IDataManager from zope.component import adapter, queryMultiAdapter from zope.interface import implementer from zope.schema.interfaces import IDatetime +from eea.volto.policy.interfaces import IEeaVoltoPolicyLayer +try: + from eea.coremetadata.metadata import ICoreMetadata +except ImportError: + # Fallback + ICoreMetadata = IPublication + @implementer(IFieldDeserializer) @adapter(IDatetime, IDexterityContent, IEeaVoltoPolicyLayer) @@ -22,7 +28,9 @@ class DatetimeFieldDeserializer(DefaultDatetimeFieldDeserializer): """ def __call__(self, value): # PATCH - is_publication_field = self.field.interface == IPublication + is_publication_field = self.field.interface in ( + IPublication, ICoreMetadata,) + if is_publication_field: # because IPublication datamanager strips timezones tzinfo = timezone(default_timezone()) diff --git a/eea/volto/policy/restapi/serializer/dxfields.py b/eea/volto/policy/restapi/serializer/dxfields.py index e2af093..01f4808 100644 --- a/eea/volto/policy/restapi/serializer/dxfields.py +++ b/eea/volto/policy/restapi/serializer/dxfields.py @@ -1,6 +1,5 @@ """ DXFields """ -from eea.volto.policy.interfaces import IEeaVoltoPolicyLayer from plone.app.dexterity.behaviors.metadata import IPublication from plone.dexterity.interfaces import IDexterityContent from plone.restapi.interfaces import IFieldSerializer @@ -9,6 +8,13 @@ from zope.interface import implementer from zope.schema.interfaces import IDatetime +from eea.volto.policy.interfaces import IEeaVoltoPolicyLayer +try: + from eea.coremetadata.metadata import ICoreMetadata +except ImportError: + # Fallback + ICoreMetadata = IPublication + @adapter(IDatetime, IDexterityContent, IEeaVoltoPolicyLayer) @implementer(IFieldSerializer) @@ -21,7 +27,7 @@ def get_value(self, default=None): value = getattr( self.field.interface(self.context), self.field.__name__, default ) - if value and self.field.interface == IPublication: + if value and self.field.interface in (IPublication, ICoreMetadata,): # the patch: we want the dates with full tz infos # default value is taken from # plone.app.dexterity.behaviors.metadata.Publication that escape diff --git a/eea/volto/policy/version.txt b/eea/volto/policy/version.txt index cd5ac03..879b416 100644 --- a/eea/volto/policy/version.txt +++ b/eea/volto/policy/version.txt @@ -1 +1 @@ -2.0 +2.1