diff -r f05955086ad8 -r 952fcf8af9f9 src/pyams_content/shared/common/types.py --- a/src/pyams_content/shared/common/types.py Tue Jan 12 13:37:48 2021 +0100 +++ b/src/pyams_content/shared/common/types.py Wed Jan 13 14:08:53 2021 +0100 @@ -27,13 +27,12 @@ from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget from pyams_content.component.theme.interfaces import IThemesInfo, IThemesTarget from pyams_content.interfaces import MANAGE_TOOL_PERMISSION -from pyams_content.shared.common import IWfSharedContentFactory, WfSharedContent -from pyams_content.shared.common.interfaces import ISharedContentFactory +from pyams_content.shared.common import IWfSharedContentFactory +from pyams_content.shared.common.interfaces import ISharedContentFactory, ISharedTool from pyams_content.shared.common.interfaces.types import ALL_DATA_TYPES_VOCABULARY, \ DATA_MANAGER_ANNOTATION_KEY, DATA_SUBTYPES_VOCABULARY, DATA_TYPES_VOCABULARY, \ DATA_TYPE_FIELDS_VOCABULARY, IBaseDataType, IDataType, ISubType, ITypedDataManager, \ ITypedSharedTool, IWfTypedSharedContent -from pyams_content.shared.common.manager import SharedTool from pyams_form.interfaces.form import IFormContextPermissionChecker from pyams_i18n.interfaces import II18n from pyams_sequence.reference import get_reference_target @@ -47,6 +46,8 @@ __docformat__ = 'restructuredtext' +from pyams_content import _ + class BaseDataType(Persistent, Contained): """Base data type""" @@ -66,7 +67,8 @@ """Data sub-type persistent class""" -@implementer(IDataType, IParagraphContainerTarget, IExtFileContainerTarget, ILinkContainerTarget, IThemesTarget) +@implementer(IDataType, IParagraphContainerTarget, IExtFileContainerTarget, + ILinkContainerTarget, IThemesTarget) class DataType(BaseDataType, OrderedContainer): """Data type persistent class""" @@ -164,33 +166,44 @@ terms = [] request = check_request() registry = get_local_registry() - for tool in registry.getAllUtilitiesRegisteredFor(ITypedSharedTool): - manager = ITypedDataManager(tool) - terms.extend([SimpleTerm(datatype.__name__, - title=II18n(datatype).query_attribute('label', - request=request)) - for datatype in manager.values()]) + for tool in registry.getAllUtilitiesRegisteredFor(ISharedTool): + manager = ITypedDataManager(tool, None) + if manager is not None: + terms.extend([SimpleTerm(datatype.__name__, + title=II18n(datatype).query_attribute('label', + request=request)) + for datatype in manager.values()]) terms.sort(key=lambda x: x.title) - super(AllTypedSharedToolDataTypesVocabulary, self).__init__(terms) + super().__init__(terms) + + def getTermByToken(self, token): + try: + return super().getTermByToken(token) + except LookupError: + request = check_request() + translate = request.localizer.translate + return SimpleTerm(token, + title=translate(_("-- missing value ({}) --")).format(token)) def get_all_data_types(request): """Get list of all registered data types as JSON object""" results = [] registry = get_local_registry() - for tool in sorted(registry.getAllUtilitiesRegisteredFor(ITypedSharedTool), + for tool in sorted(registry.getAllUtilitiesRegisteredFor(ISharedTool), key=lambda x: II18n(x).query_attribute('title', request=request)): - manager = ITypedDataManager(tool) - terms = [{ - 'id': datatype.__name__, - 'text': II18n(datatype).query_attribute('label', request=request) - } for datatype in manager.values()] - content_factory = IWfSharedContentFactory(ISharedContentFactory(tool)) - results.append({ - 'text': request.localizer.translate(content_factory.content_name), - 'disabled': True, - 'children': terms - }) + manager = ITypedDataManager(tool, None) + if manager is not None: + terms = [{ + 'id': datatype.__name__, + 'text': II18n(datatype).query_attribute('label', request=request) + } for datatype in manager.values()] + content_factory = IWfSharedContentFactory(ISharedContentFactory(tool)) + results.append({ + 'text': request.localizer.translate(content_factory.content_name), + 'disabled': True, + 'children': terms + }) return results