src/pyams_content/shared/common/types.py
changeset 1446 952fcf8af9f9
parent 1384 cdf63a1c7dc9
equal deleted inserted replaced
1445:f05955086ad8 1446:952fcf8af9f9
    25 from pyams_content.component.extfile.interfaces import IExtFileContainerTarget
    25 from pyams_content.component.extfile.interfaces import IExtFileContainerTarget
    26 from pyams_content.component.links.interfaces import ILinkContainerTarget
    26 from pyams_content.component.links.interfaces import ILinkContainerTarget
    27 from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget
    27 from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget
    28 from pyams_content.component.theme.interfaces import IThemesInfo, IThemesTarget
    28 from pyams_content.component.theme.interfaces import IThemesInfo, IThemesTarget
    29 from pyams_content.interfaces import MANAGE_TOOL_PERMISSION
    29 from pyams_content.interfaces import MANAGE_TOOL_PERMISSION
    30 from pyams_content.shared.common import IWfSharedContentFactory, WfSharedContent
    30 from pyams_content.shared.common import IWfSharedContentFactory
    31 from pyams_content.shared.common.interfaces import ISharedContentFactory
    31 from pyams_content.shared.common.interfaces import ISharedContentFactory, ISharedTool
    32 from pyams_content.shared.common.interfaces.types import ALL_DATA_TYPES_VOCABULARY, \
    32 from pyams_content.shared.common.interfaces.types import ALL_DATA_TYPES_VOCABULARY, \
    33     DATA_MANAGER_ANNOTATION_KEY, DATA_SUBTYPES_VOCABULARY, DATA_TYPES_VOCABULARY, \
    33     DATA_MANAGER_ANNOTATION_KEY, DATA_SUBTYPES_VOCABULARY, DATA_TYPES_VOCABULARY, \
    34     DATA_TYPE_FIELDS_VOCABULARY, IBaseDataType, IDataType, ISubType, ITypedDataManager, \
    34     DATA_TYPE_FIELDS_VOCABULARY, IBaseDataType, IDataType, ISubType, ITypedDataManager, \
    35     ITypedSharedTool, IWfTypedSharedContent
    35     ITypedSharedTool, IWfTypedSharedContent
    36 from pyams_content.shared.common.manager import SharedTool
       
    37 from pyams_form.interfaces.form import IFormContextPermissionChecker
    36 from pyams_form.interfaces.form import IFormContextPermissionChecker
    38 from pyams_i18n.interfaces import II18n
    37 from pyams_i18n.interfaces import II18n
    39 from pyams_sequence.reference import get_reference_target
    38 from pyams_sequence.reference import get_reference_target
    40 from pyams_utils.adapter import ContextAdapter, adapter_config, get_annotation_adapter
    39 from pyams_utils.adapter import ContextAdapter, adapter_config, get_annotation_adapter
    41 from pyams_utils.factory import factory_config
    40 from pyams_utils.factory import factory_config
    45 from pyams_utils.vocabulary import vocabulary_config
    44 from pyams_utils.vocabulary import vocabulary_config
    46 
    45 
    47 
    46 
    48 __docformat__ = 'restructuredtext'
    47 __docformat__ = 'restructuredtext'
    49 
    48 
       
    49 from pyams_content import _
       
    50 
    50 
    51 
    51 class BaseDataType(Persistent, Contained):
    52 class BaseDataType(Persistent, Contained):
    52     """Base data type"""
    53     """Base data type"""
    53 
    54 
    54     label = FieldProperty(IBaseDataType['label'])
    55     label = FieldProperty(IBaseDataType['label'])
    64 @implementer(ISubType, IParagraphContainerTarget, IExtFileContainerTarget, ILinkContainerTarget)
    65 @implementer(ISubType, IParagraphContainerTarget, IExtFileContainerTarget, ILinkContainerTarget)
    65 class SubType(BaseDataType):
    66 class SubType(BaseDataType):
    66     """Data sub-type persistent class"""
    67     """Data sub-type persistent class"""
    67 
    68 
    68 
    69 
    69 @implementer(IDataType, IParagraphContainerTarget, IExtFileContainerTarget, ILinkContainerTarget, IThemesTarget)
    70 @implementer(IDataType, IParagraphContainerTarget, IExtFileContainerTarget,
       
    71              ILinkContainerTarget, IThemesTarget)
    70 class DataType(BaseDataType, OrderedContainer):
    72 class DataType(BaseDataType, OrderedContainer):
    71     """Data type persistent class"""
    73     """Data type persistent class"""
    72 
    74 
    73     display_as_tag = FieldProperty(IDataType['display_as_tag'])
    75     display_as_tag = FieldProperty(IDataType['display_as_tag'])
    74     field_names = FieldProperty(IDataType['field_names'])
    76     field_names = FieldProperty(IDataType['field_names'])
   162 
   164 
   163     def __init__(self, context):
   165     def __init__(self, context):
   164         terms = []
   166         terms = []
   165         request = check_request()
   167         request = check_request()
   166         registry = get_local_registry()
   168         registry = get_local_registry()
   167         for tool in registry.getAllUtilitiesRegisteredFor(ITypedSharedTool):
   169         for tool in registry.getAllUtilitiesRegisteredFor(ISharedTool):
   168             manager = ITypedDataManager(tool)
   170             manager = ITypedDataManager(tool, None)
   169             terms.extend([SimpleTerm(datatype.__name__,
   171             if manager is not None:
   170                                      title=II18n(datatype).query_attribute('label',
   172                 terms.extend([SimpleTerm(datatype.__name__,
   171                                                                            request=request))
   173                                          title=II18n(datatype).query_attribute('label',
   172                           for datatype in manager.values()])
   174                                                                                request=request))
       
   175                               for datatype in manager.values()])
   173         terms.sort(key=lambda x: x.title)
   176         terms.sort(key=lambda x: x.title)
   174         super(AllTypedSharedToolDataTypesVocabulary, self).__init__(terms)
   177         super().__init__(terms)
       
   178 
       
   179     def getTermByToken(self, token):
       
   180         try:
       
   181             return super().getTermByToken(token)
       
   182         except LookupError:
       
   183             request = check_request()
       
   184             translate = request.localizer.translate
       
   185             return SimpleTerm(token,
       
   186                               title=translate(_("-- missing value ({}) --")).format(token))
   175 
   187 
   176 
   188 
   177 def get_all_data_types(request):
   189 def get_all_data_types(request):
   178     """Get list of all registered data types as JSON object"""
   190     """Get list of all registered data types as JSON object"""
   179     results = []
   191     results = []
   180     registry = get_local_registry()
   192     registry = get_local_registry()
   181     for tool in sorted(registry.getAllUtilitiesRegisteredFor(ITypedSharedTool),
   193     for tool in sorted(registry.getAllUtilitiesRegisteredFor(ISharedTool),
   182                        key=lambda x: II18n(x).query_attribute('title', request=request)):
   194                        key=lambda x: II18n(x).query_attribute('title', request=request)):
   183         manager = ITypedDataManager(tool)
   195         manager = ITypedDataManager(tool, None)
   184         terms = [{
   196         if manager is not None:
   185             'id': datatype.__name__,
   197             terms = [{
   186             'text': II18n(datatype).query_attribute('label', request=request)
   198                 'id': datatype.__name__,
   187         } for datatype in manager.values()]
   199                 'text': II18n(datatype).query_attribute('label', request=request)
   188         content_factory = IWfSharedContentFactory(ISharedContentFactory(tool))
   200             } for datatype in manager.values()]
   189         results.append({
   201             content_factory = IWfSharedContentFactory(ISharedContentFactory(tool))
   190             'text': request.localizer.translate(content_factory.content_name),
   202             results.append({
   191             'disabled': True,
   203                 'text': request.localizer.translate(content_factory.content_name),
   192             'children': terms
   204                 'disabled': True,
   193         })
   205                 'children': terms
       
   206             })
   194     return results
   207     return results
   195 
   208 
   196 
   209 
   197 @vocabulary_config(name=DATA_TYPES_VOCABULARY)
   210 @vocabulary_config(name=DATA_TYPES_VOCABULARY)
   198 class TypedSharedToolDataTypesVocabulary(SimpleVocabulary):
   211 class TypedSharedToolDataTypesVocabulary(SimpleVocabulary):