src/pyams_content/shared/view/merge.py
changeset 786 fb45f422d0ce
parent 783 e34cc04e9786
child 787 93f9a8b859fc
equal deleted inserted replaced
785:99772127f89b 786:fb45f422d0ce
     7 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
     7 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
     8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
     9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
    10 # FOR A PARTICULAR PURPOSE.
    10 # FOR A PARTICULAR PURPOSE.
    11 #
    11 #
       
    12 from zope.dublincore.interfaces import IZopeDublinCore
       
    13 
       
    14 from pyams_workflow.interfaces import IWorkflowPublicationInfo
    12 
    15 
    13 __docformat__ = 'restructuredtext'
    16 __docformat__ = 'restructuredtext'
    14 
    17 
    15 
    18 
    16 # import standard library
    19 # import standard library
    91 
    94 
    92 class SortedMergeMode(object):
    95 class SortedMergeMode(object):
    93     """Sorted merge mode base class"""
    96     """Sorted merge mode base class"""
    94 
    97 
    95     sort_index = None
    98     sort_index = None
       
    99     sort_key = None
    96 
   100 
    97     @classmethod
   101     @classmethod
    98     def get_results(cls, views, context):
   102     def get_results(cls, views, context):
    99         results = (view.get_results(context,
   103         results = (view.get_results(context,
   100                                     sort_index=cls.sort_index,
   104                                     sort_index=cls.sort_index,
   101                                     reverse=True)
   105                                     reverse=True)
   102                    for view in views)
   106                    for view in views)
   103         yield from merge(*results)
   107         yield from merge(*results, key=cls.sort_key)
   104 
   108 
   105 
   109 
   106 @utility_config(name='{0}.sort'.format(CREATION_DATE_ORDER), provides=IViewsMerger)
   110 @utility_config(name='{0}.sort'.format(CREATION_DATE_ORDER), provides=IViewsMerger)
   107 class CreationDateSortedMergeMode(SortedMergeMode):
   111 class CreationDateSortedMergeMode(SortedMergeMode):
   108     """Merge pre-sorted views by creation date"""
   112     """Merge pre-sorted views by creation date"""
   109 
   113 
   110     label = _("Sort all results by creation date")
   114     label = _("Sort all results by creation date")
   111     sort_index = CREATION_DATE_ORDER
   115     sort_index = CREATION_DATE_ORDER
       
   116     sort_key = lambda x: IZopeDublinCore(x).created
   112 
   117 
   113 
   118 
   114 @utility_config(name='{0}.sort'.format(UPDATE_DATE_ORDER), provides=IViewsMerger)
   119 @utility_config(name='{0}.sort'.format(UPDATE_DATE_ORDER), provides=IViewsMerger)
   115 class UpdateDateSortedMergeMode(SortedMergeMode):
   120 class UpdateDateSortedMergeMode(SortedMergeMode):
   116     """Merge pre-sorted views by last update date"""
   121     """Merge pre-sorted views by last update date"""
   117 
   122 
   118     label = _("Sort all results by last update date")
   123     label = _("Sort all results by last update date")
   119     sort_index = UPDATE_DATE_ORDER
   124     sort_index = UPDATE_DATE_ORDER
       
   125     sort_key = lambda x: IZopeDublinCore(x).modified
   120 
   126 
   121 
   127 
   122 @utility_config(name='{0}.sort'.format(PUBLICATION_DATE_ORDER), provides=IViewsMerger)
   128 @utility_config(name='{0}.sort'.format(PUBLICATION_DATE_ORDER), provides=IViewsMerger)
   123 class PublicationDateSortedMergeMode(SortedMergeMode):
   129 class PublicationDateSortedMergeMode(SortedMergeMode):
   124     """Merge pre-sorted views by publication date"""
   130     """Merge pre-sorted views by publication date"""
   125 
   131 
   126     label = _("Sort all results by current publication date")
   132     label = _("Sort all results by current publication date")
   127     sort_index = PUBLICATION_DATE_ORDER
   133     sort_index = PUBLICATION_DATE_ORDER
       
   134     sort_key = lambda x: IWorkflowPublicationInfo(x).publication_date
   128 
   135 
   129 
   136 
   130 @utility_config(name='{0}.sort'.format(FIRSTPUBLICATION_DATE_ORDER), provides=IViewsMerger)
   137 @utility_config(name='{0}.sort'.format(FIRSTPUBLICATION_DATE_ORDER), provides=IViewsMerger)
   131 class FirstPublicationDateSortedMergeMode(SortedMergeMode):
   138 class FirstPublicationDateSortedMergeMode(SortedMergeMode):
   132     """Merge pre-sorted views by first publication date"""
   139     """Merge pre-sorted views by first publication date"""
   133 
   140 
   134     label = _("Sort all results by first publication date")
   141     label = _("Sort all results by first publication date")
   135     sort_index = FIRSTPUBLICATION_DATE_ORDER
   142     sort_index = FIRSTPUBLICATION_DATE_ORDER
       
   143     sort_key = lambda x: IWorkflowPublicationInfo(x).first_publication_date