Skip to content

Commit

Permalink
Merge pull request #11 from eea/develop
Browse files Browse the repository at this point in the history
Release 2.0
  • Loading branch information
avoinea authored Apr 10, 2023
2 parents 9d1c035 + fee4d20 commit e28ebeb
Show file tree
Hide file tree
Showing 31 changed files with 150 additions and 587 deletions.
7 changes: 7 additions & 0 deletions docs/HISTORY.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
Changelog
=========

2.0 - (2023-04-10)
---------------------------
* Bug fix: RestAPI fix DateTime timezone for publication fields serializer/deserializer
[avoinea refs #250368]
* Cleanup: Drop Python2/Plone4 support
[avoinea refs #250368]

1.7 - (2021-11-23)
---------------------------
* Change: Removed types already present in plone.volto
Expand Down
3 changes: 1 addition & 2 deletions eea/volto/policy/configure.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,10 @@
<i18n:registerTranslations directory="locales" />

<include package="plone.volto" />

<include file="patches.zcml" />
<include file="profiles.zcml" />

<include package=".behaviors" />
<include package=".restapi" />
<include package=".vocabularies" />
<include package=".upgrades" />

Expand Down
14 changes: 0 additions & 14 deletions eea/volto/policy/interfaces.py
Original file line number Diff line number Diff line change
@@ -1,21 +1,7 @@
# -*- coding: utf-8 -*-
"""Module where all interfaces, events and exceptions live."""
from eea.volto.policy import EEAMessageFactory as _
from zope import schema
from zope.interface import Interface
from zope.publisher.interfaces.browser import IDefaultBrowserLayer


class IEeaVoltoPolicyLayer(IDefaultBrowserLayer):
"""Marker interface that defines a browser layer."""


class IVoltoSettings(Interface):
"""Volto settings necessary to store in the backend"""

frontend_domain = schema.URI(
title=u"Frontend domain",
description=_(u"Used for rewriting URL's sent in thepassword reset "
u"e-mail by Plone."),
default="http://localhost:3000",
)
31 changes: 0 additions & 31 deletions eea/volto/policy/patches.py

This file was deleted.

18 changes: 0 additions & 18 deletions eea/volto/policy/patches.zcml

This file was deleted.

11 changes: 0 additions & 11 deletions eea/volto/policy/profiles.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
<five:registerPackage package="." initialize=".initialize" />

<genericsetup:registerProfile
zcml:condition="have plone-5"
name="default"
title="eea.volto.policy"
directory="profiles/default"
Expand All @@ -17,16 +16,6 @@
post_handler=".setuphandlers.post_install"
/>

<genericsetup:registerProfile
zcml:condition="not-have plone-5"
name="default"
title="eea.volto.policy"
directory="profiles/plone4"
description="Installs the eea.volto.policy add-on."
provides="Products.GenericSetup.interfaces.EXTENSION"
post_handler=".setuphandlers.post_install"
/>

<genericsetup:registerProfile
name="uninstall"
title="eea.volto.policy (uninstall)"
Expand Down
4 changes: 0 additions & 4 deletions eea/volto/policy/profiles/default/catalog.xml

This file was deleted.

11 changes: 0 additions & 11 deletions eea/volto/policy/profiles/default/controlpanel.xml

This file was deleted.

2 changes: 1 addition & 1 deletion eea/volto/policy/profiles/default/metadata.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<version>1.0</version>
<version>2.0</version>
<dependencies>
<dependency>profile-plone.volto:default</dependency>
</dependencies>
Expand Down
14 changes: 0 additions & 14 deletions eea/volto/policy/profiles/default/registry.xml

This file was deleted.

7 changes: 0 additions & 7 deletions eea/volto/policy/profiles/plone4/browserlayer.xml

This file was deleted.

4 changes: 0 additions & 4 deletions eea/volto/policy/profiles/plone4/catalog.xml

This file was deleted.

19 changes: 0 additions & 19 deletions eea/volto/policy/profiles/plone4/controlpanel.xml

This file was deleted.

8 changes: 0 additions & 8 deletions eea/volto/policy/profiles/plone4/metadata.xml

This file was deleted.

14 changes: 0 additions & 14 deletions eea/volto/policy/profiles/plone4/registry.xml

This file was deleted.

6 changes: 0 additions & 6 deletions eea/volto/policy/profiles/plone4/types.xml

This file was deleted.

20 changes: 0 additions & 20 deletions eea/volto/policy/profiles/plone4/types/Document.xml

This file was deleted.

44 changes: 0 additions & 44 deletions eea/volto/policy/profiles/plone4/types/Plone_Site.xml

This file was deleted.

2 changes: 2 additions & 0 deletions eea/volto/policy/restapi/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
""" RestAPI
"""
5 changes: 5 additions & 0 deletions eea/volto/policy/restapi/configure.zcml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<configure xmlns="http://namespaces.zope.org/zope">
<include package="plone.restapi" />
<include package=".deserializer" />
<include package=".serializer" />
</configure>
2 changes: 2 additions & 0 deletions eea/volto/policy/restapi/deserializer/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
""" RestAPI deserializer
"""
8 changes: 8 additions & 0 deletions eea/volto/policy/restapi/deserializer/configure.zcml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<configure
xmlns="http://namespaces.zope.org/zope"
i18n_domain="plone.restapi"
>

<adapter factory=".dxfields.DatetimeFieldDeserializer" />

</configure>
66 changes: 66 additions & 0 deletions eea/volto/policy/restapi/deserializer/dxfields.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
""" 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 z3c.form.interfaces import IDataManager
from zope.component import adapter, queryMultiAdapter
from zope.interface import implementer
from zope.schema.interfaces import IDatetime


@implementer(IFieldDeserializer)
@adapter(IDatetime, IDexterityContent, IEeaVoltoPolicyLayer)
class DatetimeFieldDeserializer(DefaultDatetimeFieldDeserializer):
""" DatetimeFieldDeserializer
"""
def __call__(self, value):
# PATCH
is_publication_field = self.field.interface == IPublication
if is_publication_field:
# because IPublication datamanager strips timezones
tzinfo = timezone(default_timezone())
else:
dm = queryMultiAdapter((self.context, self.field), IDataManager)
current = dm.get()
if current is not None:
tzinfo = current.tzinfo
else:
tzinfo = None
# END OF PATCH

# This happens when a 'null' is posted for a non-required field.
if value is None:
self.field.validate(value)
return value

# Parse ISO 8601 string with dateutil
dt = dateutil.parser.parse(value)

# Convert to TZ aware in UTC
if dt.tzinfo is not None:
dt = dt.astimezone(utc)
else:
dt = utc.localize(dt)

# Convert to local TZ aware or naive UTC
if tzinfo is not None:
tz = timezone(tzinfo.zone)
value = tz.normalize(dt.astimezone(tz))
else:
value = utc.normalize(dt.astimezone(utc)).replace(tzinfo=None)

# if it's an IPublication field, remove timezone
# info to not break field validation
# PATCH
if is_publication_field:
value = value.replace(tzinfo=None)
# END OF PATCH
self.field.validate(value)
return value
2 changes: 2 additions & 0 deletions eea/volto/policy/restapi/serializer/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
""" RestAPI serializer
"""
8 changes: 8 additions & 0 deletions eea/volto/policy/restapi/serializer/configure.zcml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<configure
xmlns="http://namespaces.zope.org/zope"
i18n_domain="plone.restapi"
>

<adapter factory=".dxfields.DateTimeFieldSerializer" />

</configure>
Loading

0 comments on commit e28ebeb

Please sign in to comment.