src/pyams_sequence/widget/__init__.py
changeset 90 afd059b0f037
parent 54 3f9dda94c354
equal deleted inserted replaced
89:9ea651001f31 90:afd059b0f037
    10 # FOR A PARTICULAR PURPOSE.
    10 # FOR A PARTICULAR PURPOSE.
    11 #
    11 #
    12 
    12 
    13 __docformat__ = 'restructuredtext'
    13 __docformat__ = 'restructuredtext'
    14 
    14 
    15 
       
    16 # import standard library
       
    17 import json
    15 import json
    18 
    16 
    19 # import interfaces
    17 from hypatia.catalog import CatalogQuery
    20 from hypatia.interfaces import ICatalog
    18 from hypatia.interfaces import ICatalog
       
    19 from hypatia.query import Any, Eq
       
    20 from z3c.form.browser.widget import HTMLInputWidget
       
    21 from z3c.form.converter import BaseDataConverter
       
    22 from z3c.form.interfaces import IDataConverter, IFieldWidget
       
    23 from z3c.form.widget import FieldWidget, Widget
       
    24 from zope.interface import implementer_only
       
    25 
       
    26 from pyams_catalog.query import CatalogResultSet
    21 from pyams_form.interfaces.form import IFormLayer
    27 from pyams_form.interfaces.form import IFormLayer
       
    28 from pyams_form.widget import widgettemplate_config
    22 from pyams_i18n.interfaces import II18n
    29 from pyams_i18n.interfaces import II18n
    23 from pyams_sequence.interfaces import ISequentialIntIds, ISequentialIdInfo
    30 from pyams_sequence.interfaces import ISequentialIdInfo, ISequentialIntIds
       
    31 from pyams_sequence.reference import get_last_version
    24 from pyams_sequence.schema import IInternalReferenceField, IInternalReferencesListField
    32 from pyams_sequence.schema import IInternalReferenceField, IInternalReferencesListField
    25 from pyams_sequence.widget.interfaces import IInternalReferenceWidget, IInternalReferencesListWidget
    33 from pyams_sequence.widget.interfaces import IInternalReferenceWidget, IInternalReferencesListWidget
       
    34 from pyams_utils.adapter import adapter_config
       
    35 from pyams_utils.registry import get_utility
       
    36 
    26 
    37 
    27 try:
    38 try:
    28     from pyams_workflow.interfaces import IWorkflowVersions, IWorkflowVersion, IWorkflowManagedContent
    39     from pyams_workflow.interfaces import IWorkflowVersions, IWorkflowVersion, IWorkflowManagedContent
    29 except ImportError:
    40 except ImportError:
    30     handle_workflow = False
    41     handle_workflow = False
    31 else:
    42 else:
    32     handle_workflow = True
    43     handle_workflow = True
    33 
       
    34 from z3c.form.interfaces import IFieldWidget, IDataConverter
       
    35 
       
    36 # import packages
       
    37 from hypatia.catalog import CatalogQuery
       
    38 from hypatia.query import Eq, Any
       
    39 from pyams_catalog.query import CatalogResultSet
       
    40 from pyams_form.widget import widgettemplate_config
       
    41 from pyams_sequence.reference import get_last_version
       
    42 from pyams_utils.adapter import adapter_config
       
    43 from pyams_utils.registry import get_utility
       
    44 from z3c.form.browser.widget import HTMLInputWidget
       
    45 from z3c.form.converter import BaseDataConverter
       
    46 from z3c.form.widget import Widget, FieldWidget
       
    47 from zope.interface import implementer_only
       
    48 
    44 
    49 from pyams_sequence import _
    45 from pyams_sequence import _
    50 
    46 
    51 
    47 
    52 #
    48 #
    66         return json.dumps({'content_type': self.content_type or self.field.content_type})
    62         return json.dumps({'content_type': self.content_type or self.field.content_type})
    67 
    63 
    68     @property
    64     @property
    69     def values_map(self):
    65     def values_map(self):
    70         catalog = get_utility(ICatalog)
    66         catalog = get_utility(ICatalog)
    71         params = Eq(catalog['oid'], self.value)
    67         if self.value:
    72         results = list(map(get_last_version, CatalogResultSet(CatalogQuery(catalog).query(params))))
    68             params = Eq(catalog['oid'], self.value)
    73         if results:
    69             results = list(map(get_last_version, CatalogResultSet(CatalogQuery(catalog).query(params))))
    74             sequence = get_utility(ISequentialIntIds)
    70             if results:
    75             return json.dumps({self.value: '{0} ({1})'.format(II18n(results[0]).query_attribute('title',
    71                 sequence = get_utility(ISequentialIntIds)
    76                                                                                                 request=self.request),
    72                 return json.dumps({self.value: '{0} ({1})'.format(II18n(results[0]).query_attribute('title',
    77                                                               sequence.get_short_oid(ISequentialIdInfo(results[0]).oid))})
    73                                                                                                     request=self.request),
       
    74                                                                   sequence.get_short_oid(
       
    75                                                                       ISequentialIdInfo(results[0]).oid))})
       
    76             else:
       
    77                 translate = self.request.localizer.translate
       
    78                 return json.dumps({self.value: translate(_("missing reference: {0}")).format(self.value)})
    78         else:
    79         else:
    79             translate = self.request.localizer.translate
    80             return json.dumps({})
    80             return json.dumps({self.value: translate(_("missing reference: {0}")).format(self.value)})
       
    81 
    81 
    82 
    82 
    83 @adapter_config(context=(IInternalReferenceField, IFormLayer), provides=IFieldWidget)
    83 @adapter_config(context=(IInternalReferenceField, IFormLayer), provides=IFieldWidget)
    84 def InternalReferenceFieldWidget(field, request):
    84 def InternalReferenceFieldWidget(field, request):
    85     """Internal reference field widget factory"""
    85     """Internal reference field widget factory"""