From 7f79615c8961649dda30f209c850fe033e76f4e9 Mon Sep 17 00:00:00 2001 From: Ramon Bartl Date: Fri, 13 Dec 2019 09:54:30 +0100 Subject: [PATCH 1/4] Imports --- bika/lims/api/__init__.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bika/lims/api/__init__.py b/bika/lims/api/__init__.py index 5e248920c1..5e8a3aec23 100644 --- a/bika/lims/api/__init__.py +++ b/bika/lims/api/__init__.py @@ -29,11 +29,13 @@ from bika.lims.interfaces import IClient from bika.lims.interfaces import IContact from bika.lims.interfaces import ILabContact +from collection import OrderedDict from DateTime import DateTime from DateTime.interfaces import DateTimeError from plone import api as ploneapi from plone.api.exc import InvalidParameterError from plone.app.layout.viewlets.content import ContentHistoryView +from plone.behavior.interfaces import IBehaviorAssignable from plone.dexterity.interfaces import IDexterityContent from plone.i18n.normalizer.interfaces import IFileNameNormalizer from plone.i18n.normalizer.interfaces import IIDNormalizer @@ -57,6 +59,7 @@ from zope.event import notify from zope.lifecycleevent import ObjectCreatedEvent from zope.lifecycleevent import modified +from zope.schema import getFieldsInOrder from zope.security.interfaces import Unauthorized """SENAITE LIMS Framework API From 20f6b3432f9ac01c9798da2f47bf0a51b2178e88 Mon Sep 17 00:00:00 2001 From: Ramon Bartl Date: Fri, 13 Dec 2019 09:54:44 +0100 Subject: [PATCH 2/4] Support dexterity behavior fields --- bika/lims/api/__init__.py | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/bika/lims/api/__init__.py b/bika/lims/api/__init__.py index 5e8a3aec23..0e597566da 100644 --- a/bika/lims/api/__init__.py +++ b/bika/lims/api/__init__.py @@ -336,20 +336,26 @@ def get_schema(brain_or_object): def get_fields(brain_or_object): - """Get the list of fields from the object + """Get a name to field mapping of the object :param brain_or_object: A single catalog brain or content object :type brain_or_object: ATContentType/DexterityContentType/CatalogBrain - :returns: List of fields - :rtype: list + :returns: Mapping of name -> field + :rtype: OrderedDict """ obj = get_object(brain_or_object) schema = get_schema(obj) if is_dexterity_content(obj): - names = schema.names() - fields = map(lambda name: schema.get(name), names) - return dict(zip(names, fields)) - return dict(zip(schema.keys(), schema.fields())) + # get the fields directly provided by the interface + fields = getFieldsInOrder(schema) + # append the fields coming from behaviors + behavior_assignable = IBehaviorAssignable(obj) + if behavior_assignable: + behaviors = behavior_assignable.enumerateBehaviors() + for behavior in behaviors: + fields.extend(getFieldsInOrder(behavior.interface)) + return OrderedDict(fields) + return OrderedDict(schema) def get_id(brain_or_object): From e7d3d016bcfabb2061d3e1823fcad8d45be4349c Mon Sep 17 00:00:00 2001 From: Ramon Bartl Date: Fri, 13 Dec 2019 10:16:20 +0100 Subject: [PATCH 3/4] fixed import --- bika/lims/api/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bika/lims/api/__init__.py b/bika/lims/api/__init__.py index 0e597566da..1f06c045d7 100644 --- a/bika/lims/api/__init__.py +++ b/bika/lims/api/__init__.py @@ -19,6 +19,7 @@ # Some rights reserved, see README and LICENSE. import re +from collections import OrderedDict from datetime import datetime from datetime import timedelta @@ -29,7 +30,6 @@ from bika.lims.interfaces import IClient from bika.lims.interfaces import IContact from bika.lims.interfaces import ILabContact -from collection import OrderedDict from DateTime import DateTime from DateTime.interfaces import DateTimeError from plone import api as ploneapi From 02429ed76f6ce92a1793c2762dbd4ed345293863 Mon Sep 17 00:00:00 2001 From: Ramon Bartl Date: Fri, 13 Dec 2019 10:27:05 +0100 Subject: [PATCH 4/4] Changelog updated --- CHANGES.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.rst b/CHANGES.rst index eb32a383bf..2c1436f297 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -14,6 +14,7 @@ Changelog **Changed** +- #1490 Support Dexterity Behavior Fields in API - #1486 Clean-up of indexes and metadata from `setup_catalog` **Removed**