From 2342540821699cdd317d3eeb68933dfefbcb3741 Mon Sep 17 00:00:00 2001 From: Mauro Amico Date: Fri, 19 Jul 2024 12:41:19 +0200 Subject: [PATCH] refactoring behaviors --- .../ufficiostampa/behaviors/configure.zcml | 10 ++++- .../ufficiostampa/behaviors/legislature.py | 42 +++++++++++++++++ src/rer/ufficiostampa/behaviors/metadata.py | 16 +++++++ src/rer/ufficiostampa/interfaces/content.py | 45 ++++++------------- .../default/types/ComunicatoStampa.xml | 20 ++++++++- .../tests/test_comunicato_number.py | 2 +- src/rer/ufficiostampa/utils.py | 17 ------- 7 files changed, 101 insertions(+), 51 deletions(-) create mode 100644 src/rer/ufficiostampa/behaviors/legislature.py diff --git a/src/rer/ufficiostampa/behaviors/configure.zcml b/src/rer/ufficiostampa/behaviors/configure.zcml index b7cef10..676e6e1 100644 --- a/src/rer/ufficiostampa/behaviors/configure.zcml +++ b/src/rer/ufficiostampa/behaviors/configure.zcml @@ -12,11 +12,19 @@ + + diff --git a/src/rer/ufficiostampa/behaviors/legislature.py b/src/rer/ufficiostampa/behaviors/legislature.py new file mode 100644 index 0000000..8e5080e --- /dev/null +++ b/src/rer/ufficiostampa/behaviors/legislature.py @@ -0,0 +1,42 @@ +from plone.app.dexterity import _ +from plone.autoform import directives as form +from plone.autoform.interfaces import IFormFieldProvider +from zope import schema +from zope.interface import provider +from plone.supermodel import model +from plone import api +from plone.api.exc import InvalidParameterError +from rer.ufficiostampa import _ +from rer.ufficiostampa.interfaces.settings import IRerUfficiostampaSettings +import json +import logging + +logger = logging.getLogger(__name__) + + +def defaultLegislature(): + try: + legislatures = json.loads( + api.portal.get_registry_record( + "legislatures", interface=IRerUfficiostampaSettings + ) + ) + except (KeyError, InvalidParameterError, TypeError) as e: + logger.exception(e) + return "" + + if not legislatures: + return "" + current = legislatures[-1] + return current.get("legislature", "") + + +@provider(IFormFieldProvider) +class ILegislatureComunicati(model.Schema): + legislature = schema.TextLine( + title=_("label_legislature", default="Legislature"), + description="", + required=True, + defaultFactory=defaultLegislature, + ) + form.mode(legislature="display") diff --git a/src/rer/ufficiostampa/behaviors/metadata.py b/src/rer/ufficiostampa/behaviors/metadata.py index 8650ee5..c40c262 100644 --- a/src/rer/ufficiostampa/behaviors/metadata.py +++ b/src/rer/ufficiostampa/behaviors/metadata.py @@ -6,6 +6,7 @@ from plone.autoform.interfaces import IFormFieldProvider from zope import schema from zope.interface import provider +from plone.app.z3cform.widget import AjaxSelectFieldWidget @provider(IFormFieldProvider) @@ -13,6 +14,21 @@ class IBasicComunicati(IBasic): title = schema.Text(title=_("label_title", default="Title"), required=True) form.widget("title", rows=2) + arguments = schema.Tuple( + title=_("arguments_label", default="Arguments"), + description=_("arguments_help", default="Select one or more values."), + value_type=schema.TextLine(), + required=True, + missing_value=(), + ) + + form.widget( + "arguments", + AjaxSelectFieldWidget, + vocabulary="rer.ufficiostampa.vocabularies.arguments", + pattern_options={"allowNewItems": "false"}, + ) + searchable("title") diff --git a/src/rer/ufficiostampa/interfaces/content.py b/src/rer/ufficiostampa/interfaces/content.py index f60576e..86866af 100644 --- a/src/rer/ufficiostampa/interfaces/content.py +++ b/src/rer/ufficiostampa/interfaces/content.py @@ -1,37 +1,12 @@ -from plone.app.contenttypes.behaviors.richtext import IRichText -from plone.app.dexterity.textindexer import searchable -from plone.app.z3cform.widget import AjaxSelectFieldWidget -from plone.autoform import directives +# from plone.app.contenttypes.behaviors.richtext import IRichText +# from plone.app.dexterity.textindexer import searchable +from plone.autoform import directives as form from plone.supermodel import model from rer.ufficiostampa import _ -from rer.ufficiostampa.utils import defaultLegislature from zope import schema class IComunicatoStampa(model.Schema): - arguments = schema.Tuple( - title=_("arguments_label", default="Arguments"), - description=_("arguments_help", default="Select one or more values."), - value_type=schema.TextLine(), - required=True, - missing_value=(), - ) - - directives.widget( - "arguments", - AjaxSelectFieldWidget, - vocabulary="rer.ufficiostampa.vocabularies.arguments", - pattern_options={"allowNewItems": "false"}, - ) - - legislature = schema.TextLine( - title=_("label_legislature", default="Legislature"), - description="", - required=True, - defaultFactory=defaultLegislature, - ) - directives.mode(legislature="display") - message_sent = schema.Bool( title=_("label_sent", default="Sent"), description="", @@ -40,11 +15,19 @@ class IComunicatoStampa(model.Schema): ) comunicato_number = schema.TextLine(title="", description="", required=False) - directives.omitted("message_sent") - directives.omitted("comunicato_number") + tipologia_news = schema.TextLine( + title=_("label_tipologia_news", default="Tipologia News"), + description="", + required=True, + default="Comunicato Stampa", + readonly=True, + ) + form.mode(tipologia_news="hidden") + form.omitted("message_sent") + form.omitted("comunicato_number") # set text field as searchable in SearchableText - searchable(IRichText, "text") + # searchable(IRichText, "text") class IInvitoStampa(IComunicatoStampa): diff --git a/src/rer/ufficiostampa/profiles/default/types/ComunicatoStampa.xml b/src/rer/ufficiostampa/profiles/default/types/ComunicatoStampa.xml index d42c8fc..38a928c 100644 --- a/src/rer/ufficiostampa/profiles/default/types/ComunicatoStampa.xml +++ b/src/rer/ufficiostampa/profiles/default/types/ComunicatoStampa.xml @@ -43,8 +43,26 @@ - + + + + + rer.ufficiostampa.interfaces.IComunicatoStampa diff --git a/src/rer/ufficiostampa/tests/test_comunicato_number.py b/src/rer/ufficiostampa/tests/test_comunicato_number.py index 6b3df05..930575b 100644 --- a/src/rer/ufficiostampa/tests/test_comunicato_number.py +++ b/src/rer/ufficiostampa/tests/test_comunicato_number.py @@ -5,7 +5,7 @@ from plone.app.testing import TEST_USER_ID from rer.ufficiostampa.interfaces import IRerUfficiostampaSettings from rer.ufficiostampa.testing import RER_UFFICIOSTAMPA_INTEGRATION_TESTING -from rer.ufficiostampa.utils import defaultLegislature +from rer.ufficiostampa.behaviors.legislature import defaultLegislature from transaction import commit import json diff --git a/src/rer/ufficiostampa/utils.py b/src/rer/ufficiostampa/utils.py index 3e53c51..e585ae2 100644 --- a/src/rer/ufficiostampa/utils.py +++ b/src/rer/ufficiostampa/utils.py @@ -24,23 +24,6 @@ logger = logging.getLogger(__name__) -def defaultLegislature(): - try: - legislatures = json.loads( - api.portal.get_registry_record( - "legislatures", interface=IRerUfficiostampaSettings - ) - ) - except (KeyError, InvalidParameterError, TypeError) as e: - logger.exception(e) - return "" - - if not legislatures: - return "" - current = legislatures[-1] - return current.get("legislature", "") - - def get_site_title(): registry = getUtility(IRegistry) site_settings = registry.forInterface(ISiteSchema, prefix="plone", check=False)