From 9283f241b1617c92e774a222d6898b727b5acf81 Mon Sep 17 00:00:00 2001 From: Andrea Cecchi Date: Fri, 19 Jul 2024 16:30:24 +0200 Subject: [PATCH] add metadata for taxonomies --- .../contenttypes/indexers/taxonomies.py | 10 +- .../a_chi_si_rivolge_tassonomia.xml | 164 ++++++++---------- .../profiles/default/metadata.xml | 1 + src/iosanita/contenttypes/setuphandlers.py | 28 +-- src/iosanita/contenttypes/testing.py | 1 + .../tests/test_taxonomies_custom_metadata.py | 47 ++++- 6 files changed, 125 insertions(+), 126 deletions(-) diff --git a/src/iosanita/contenttypes/indexers/taxonomies.py b/src/iosanita/contenttypes/indexers/taxonomies.py index 60ddf8a..bcbe074 100644 --- a/src/iosanita/contenttypes/indexers/taxonomies.py +++ b/src/iosanita/contenttypes/indexers/taxonomies.py @@ -1,23 +1,25 @@ # -*- coding: utf-8 -*- -from plone.dexterity.interfaces import IDexterityContent from plone.indexer.decorator import indexer from collective.taxonomy import PATH_SEPARATOR from collective.taxonomy.interfaces import ITaxonomy from zope.component import getUtility from zope.globalrequest import getRequest +from plone.dexterity.interfaces import IDexterityContent def extract_taxonomies(context, field): request = getRequest() taxonomy = getUtility(ITaxonomy, name=f"collective.taxonomy.{field}") taxonomy_voc = taxonomy.makeVocabulary(request.get("LANGUAGE")) - data = [] for key in getattr(context, field, []) or []: value = taxonomy_voc.inv_data.get(key, None) - if value and value.startswith(PATH_SEPARATOR): - data.append({"title": value.replace(PATH_SEPARATOR, "", 1), "token": key}) + if not value: + continue + if value.startswith(PATH_SEPARATOR): + value = value.replace(PATH_SEPARATOR, "", 1) + data.append({"title": value.replace(PATH_SEPARATOR, "", 1), "token": key}) return data diff --git a/src/iosanita/contenttypes/profiles/behaviors/taxonomies/a_chi_si_rivolge_tassonomia.xml b/src/iosanita/contenttypes/profiles/behaviors/taxonomies/a_chi_si_rivolge_tassonomia.xml index 9e4acea..2ddf79c 100644 --- a/src/iosanita/contenttypes/profiles/behaviors/taxonomies/a_chi_si_rivolge_tassonomia.xml +++ b/src/iosanita/contenttypes/profiles/behaviors/taxonomies/a_chi_si_rivolge_tassonomia.xml @@ -5,99 +5,87 @@ a_chi_si_rivolge_tassonomia - persone + bambini - Persone + Bambini - - bambini - - Bambini - - - - adolescenti - - Adolescenti - - - - anziani - - Anziani - - - - donne - - Donne - - - - persone-con-disabilita - - Persone con disabilità - - - - cittadini-stranieri - - Cittadini stranieri - - - - migranti - - Migranti - - - - lgbtq+ - - LGBTQ+ - - - - proprietari-animali-domestici - - Proprietari di animali domestici e di affezione - - - - prestatori-di cura - - Prestatori di cura (Caregiver) - - - entita + adolescenti - Entità + Adolescenti + + + + anziani + + Anziani + + + + donne + + Donne + + + + persone-con-disabilita + + Persone con disabilità + + + + cittadini-stranieri + + Cittadini stranieri + + + + migranti + + Migranti + + + + lgbtq+ + + LGBTQ+ + + + + proprietari-animali-domestici + + Proprietari di animali domestici e di affezione + + + + prestatori-di cura + + Prestatori di cura (Caregiver) + + + + imprese + + Imprese + + + + scuole + + Scuole + + + + farmacie + + Farmacie + + + + enti-pubblici + + Enti pubblici - - imprese - - Imprese - - - - scuole - - Scuole - - - - farmacie - - Farmacie - - - - enti-pubblici - - Enti pubblici - - diff --git a/src/iosanita/contenttypes/profiles/default/metadata.xml b/src/iosanita/contenttypes/profiles/default/metadata.xml index e00fcfc..171fac7 100644 --- a/src/iosanita/contenttypes/profiles/default/metadata.xml +++ b/src/iosanita/contenttypes/profiles/default/metadata.xml @@ -6,5 +6,6 @@ profile-collective.taxonomy:default profile-collective.venue:default profile-collective.z3cform.datagridfield:default + profile-iosanita.contenttypes:taxonomy diff --git a/src/iosanita/contenttypes/setuphandlers.py b/src/iosanita/contenttypes/setuphandlers.py index 72715b8..3a01f41 100644 --- a/src/iosanita/contenttypes/setuphandlers.py +++ b/src/iosanita/contenttypes/setuphandlers.py @@ -56,32 +56,8 @@ def post_install(context): "iosanita.contenttypes:taxonomy", "collective.taxonomy" ) - # for utility_name, utility in list(getUtilitiesFor(ITaxonomy)): - # utility.updateBehavior(**{"field_prefix": ""}) - # logger.info( - # f"{colors.DARKCYAN} Change taxonomy prefix for {utility_name} {colors.ENDC}" # noqa - # ) - - # logger.info( - # f"{colors.DARKCYAN} iosanita.contentypes taxonomies imported {colors.ENDC}" # noqa - # ) - # update_types(context) - # update_registry(context) - # update_catalog(context) - - # Do something at the end of the installation of this package. - def post_install_taxonomy(context): - for index in [ - "tipologia_notizia", - "a_chi_si_rivolge_tassonomia", - "tipologia_argomento", - "tipologia_evento", - "tipologia_punti_di_contatto", - ]: - api.portal.get_tool("portal_catalog").delIndex(index) - for utility_name, utility in list(getUtilitiesFor(ITaxonomy)): utility.updateBehavior(**{"field_prefix": ""}) logger.info( @@ -91,8 +67,8 @@ def post_install_taxonomy(context): logger.info( f"{colors.DARKCYAN} iosanita.contentypes taxonomies imported {colors.ENDC}" # noqa ) - update_types(context) - update_registry(context) + # update_types(context) + # update_registry(context) update_catalog(context) diff --git a/src/iosanita/contenttypes/testing.py b/src/iosanita/contenttypes/testing.py index 5faac61..c4ece84 100644 --- a/src/iosanita/contenttypes/testing.py +++ b/src/iosanita/contenttypes/testing.py @@ -14,6 +14,7 @@ import plone.app.caching import plone.formwidget.geolocation import plone.restapi +import collective.taxonomy class TestLayer(RedturtleVoltoLayer): diff --git a/src/iosanita/contenttypes/tests/test_taxonomies_custom_metadata.py b/src/iosanita/contenttypes/tests/test_taxonomies_custom_metadata.py index 4f7b115..9b87542 100644 --- a/src/iosanita/contenttypes/tests/test_taxonomies_custom_metadata.py +++ b/src/iosanita/contenttypes/tests/test_taxonomies_custom_metadata.py @@ -4,11 +4,6 @@ from plone import api from plone.app.testing import setRoles from plone.app.testing import TEST_USER_ID -from z3c.relationfield import RelationValue -from zope.component import getUtility -from zope.event import notify -from zope.intid.interfaces import IIntIds -from zope.lifecycleevent import ObjectModifiedEvent import unittest @@ -21,6 +16,10 @@ class TestTaxonomiesCustomMetadata(unittest.TestCase): def setUp(self): self.app = self.layer["app"] self.portal = self.layer["portal"] + self.request = self.layer["request"] + + self.request["LANGUAGE"] = "it" + self.portal_url = self.portal.absolute_url() setRoles(self.portal, TEST_USER_ID, ["Manager"]) @@ -30,12 +29,44 @@ def test_parliamo_di_metadata_has_array_of_objects(self): container=self.portal, type="Struttura", title="Test servizio", - parliamo_di=["vaccinazioni-anti-covid-19", "igiene-pubblica"], + parliamo_di=["ticket-ed-esenzioni", "igiene-pubblica"], + ) + res = api.content.find(UID=struttura.UID()) + + self.assertEqual(len(res), 1) + self.assertEqual( + res[0].parliamo_di, sorted(["ticket-ed-esenzioni", "igiene-pubblica"]) + ) + self.assertEqual( + res[0].parliamo_di_metadata, + [ + {"title": "Ticket ed esenzioni", "token": "ticket-ed-esenzioni"}, + {"title": "Igiene Pubblica", "token": "igiene-pubblica"}, + ], + ) + + def test_a_chi_si_rivolge_tassonomia_metadata_has_array_of_objects(self): + """ """ + struttura = api.content.create( + container=self.portal, + type="Struttura", + title="Test servizio", + a_chi_si_rivolge_tassonomia=[ + "farmacie", + "imprese", + ], ) res = api.content.find(UID=struttura.UID()) self.assertEqual(len(res), 1) self.assertEqual( - res[0].parliamo_di, ["vaccinazioni-anti-covid-19", "igiene-pubblica"] + res[0].a_chi_si_rivolge_tassonomia, + sorted(["farmacie", "imprese"]), + ) + self.assertEqual( + res[0].a_chi_si_rivolge_tassonomia_metadata, + [ + {"title": "Farmacie", "token": "farmacie"}, + {"title": "Imprese", "token": "imprese"}, + ], ) - self.assertEqual(res[0].parliamo_di_metadata, [])