Ignore:
Timestamp:
Sep 14, 2012 9:59:30 AM (12 years ago)
Author:
vmaksymiv
Message:

PPP fixes

Location:
quintagroup.portlet.collection/trunk/quintagroup/portlet/collection
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • quintagroup.portlet.collection/trunk/quintagroup/portlet/collection/collection.py

    r2740 r3555  
    1 import random 
     1from zope.interface import implements 
    22 
    3 from zope.interface import implements 
    4 from zope.component import getMultiAdapter 
    5  
    6 from plone.portlets.interfaces import IPortletDataProvider 
    73from plone.portlet.collection import collection as base 
    84 
     
    106from zope.formlib import form 
    117 
    12 from plone.memoize.instance import memoize 
    13 from plone.memoize import ram 
    14 from plone.memoize.compress import xhtml_compress 
    15  
    168from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile 
    17 from plone.app.vocabularies.catalog import SearchableTextSourceBinder 
    189from zope.schema import ValidationError 
    1910from plone.app.form.widgets.uberselectionwidget import UberSelectionWidget 
    2011 
    21 from Products.ATContentTypes.interface import IATTopic 
    22 from Products.CMFPlone.PloneBatch import Batch 
    2312from plone.portlet.collection.collection import ICollectionPortlet 
    2413 
    2514from quintagroup.portlet.collection import MessageFactory as _ 
    2615 
    27 MIN_BATCH_SIZE , MAX_BATCHSIZE = 1, 30 
     16MIN_BATCH_SIZE, MAX_BATCHSIZE = 1, 30 
     17 
    2818 
    2919class NotValidBatchSizeValue(ValidationError): 
     
    3222    """ 
    3323 
     24 
    3425def validate_batch_size(value): 
    3526    if MIN_BATCH_SIZE <= value <= MAX_BATCHSIZE: 
    3627        return True 
    3728    raise NotValidBatchSizeValue(value) 
     29 
    3830 
    3931class IQCollectionPortlet(ICollectionPortlet): 
     
    4234    """ 
    4335 
    44     item_attributes = schema.List(title=_(u"Attributes to display"), 
    45                                   description=_(u"description_attributes", default=u"Select attributes to show for collection item."), 
    46                                   required=False, 
    47                                   default=[u"Title", u"Description"], 
    48                                   value_type=schema.Choice(vocabulary='quintagroup.portlet.collection.vocabularies.PortletAttributesVocabulary')) 
     36    item_attributes = schema.List( 
     37        title=_(u"Attributes to display"), 
     38        description=_(u"description_attributes", 
     39                      default=u"Select attributes to show for collection " 
     40                      "item."), 
     41        required=False, 
     42        default=[u"Title", u"Description"], 
     43        value_type=schema.Choice(vocabulary='quintagroup.portlet.collection.\ 
     44                vocabularies.PortletAttributesVocabulary')) 
    4945 
    50     styling = schema.Choice(title=_(u"Portlet style"), 
    51                             description=_(u"description_styling", default=u"Choose a css style for the porlet."), 
    52                             required=False, 
    53                             default=u"", 
    54                             vocabulary='quintagroup.portlet.collection.vocabularies.PortletCSSVocabulary') 
     46    styling = schema.Choice( 
     47        title=_(u"Portlet style"), 
     48        description=_(u"description_styling", 
     49                      default=u"Choose a css style for the porlet."), 
     50        required=False, 
     51        default=u"", 
     52        vocabulary='quintagroup.portlet.collection.\ 
     53                vocabularies.PortletCSSVocabulary') 
    5554 
     55    show_item_more = schema.Bool( 
     56        title=_(u"Show more... link for collection items"), 
     57        description=_(u"If enabled, a more... link will appear in the bottom " 
     58                      "of the each collection item, linking to the " 
     59                      "corresponding item."), 
     60        required=True, 
     61        default=True) 
    5662 
    57     show_item_more = schema.Bool(title=_(u"Show more... link for collection items"), 
    58                                  description=_(u"If enabled, a more... link will appear in the bottom of the each collection item, " 
    59                                                 "linking to the corresponding item."), 
    60                                  required=True, 
    61                                  default=True) 
     63    link_title = schema.Bool( 
     64        title=_(u"Link title"), 
     65        description=_(u"If enabled, title will be shown as link to " 
     66                      "corresponding object."), 
     67        required=True, 
     68        default=True) 
    6269 
    63     link_title = schema.Bool(title=_(u"Link title"), 
    64                                  description=_(u"If enabled, title will be shown as link to corresponding object. "), 
    65                                  required=True, 
    66                                  default=True) 
     70    allow_batching = schema.Bool( 
     71        title=_(u"Allow batching"), 
     72        description=_(u"If enabled, items will be split into pages."), 
     73        required=False, 
     74        default=False) 
    6775 
    68     allow_batching = schema.Bool(title=_(u"Allow batching"), 
    69                                  description=_(u"If enabled, items will be split into pages."), 
    70                                  required=False, 
    71                                  default=False) 
     76    batch_size = schema.Int( 
     77        title=_(u"Batch size"), 
     78        description=_("Amount of items per page (if not set 3 items will be " 
     79                      "displayed as default)."), 
     80        required=False, 
     81        default=3, 
     82        constraint=validate_batch_size) 
    7283 
    73     batch_size = schema.Int(title=_(u"Batch size"), 
    74                             description=_("Amount of items per page" 
    75                                           "(if not set 3 items will be displayed as default)."), 
    76                             required=False, 
    77                             default=3, 
    78                             constraint=validate_batch_size) 
    7984 
    8085class Assignment(base.Assignment): 
     
    97102                 link_title=True, allow_batching=False, batch_size=3): 
    98103 
    99         super(Assignment, self).__init__(header=header, 
    100             target_collection=target_collection, limit=limit, 
    101             random=random, show_more=show_more, show_dates=show_dates) 
     104        super(Assignment, self).__init__(header=header, random=random, 
     105                                         target_collection=target_collection, 
     106                                         limit=limit, show_more=show_more, 
     107                                         show_dates=show_dates) 
    102108 
    103109        if len(item_attributes) > 0: 
     
    115121        """ 
    116122        return self.header 
     123 
    117124 
    118125class Renderer(base.Renderer): 
     
    146153        return self.items_listing(portlet_items=self.results()) 
    147154 
     155 
    148156class AddForm(base.AddForm): 
    149157    """Portlet add form. 
     
    158166 
    159167    label = _(u"Add Collection Portlet") 
    160     description = _(u"This portlet display a listing of items from a Collection.") 
     168    description = _( 
     169        u"This portlet display a listing of items from a Collection.") 
    161170 
    162171    def create(self, data): 
    163172        return Assignment(**data) 
     173 
    164174 
    165175class EditForm(base.EditForm): 
     
    174184 
    175185    label = _(u"Edit Collection Portlet") 
    176     description = _(u"This portlet display a listing of items from a Collection.") 
     186    description = _( 
     187        u"This portlet display a listing of items from a Collection.") 
  • quintagroup.portlet.collection/trunk/quintagroup/portlet/collection/tests/test_portlet.py

    r3554 r3555  
    1616from Products.CMFCore.utils import getToolByName 
    1717 
     18 
    1819class TestQPortletCollection(TestCase): 
    1920    def afterSetUp(self): 
     
    2122 
    2223    def testPortletTypeRegistered(self): 
    23         portlet = getUtility(IPortletType, name='quintagroup.portlet.collection.Collection') 
    24         self.assertEquals(portlet.addview, 'quintagroup.portlet.collection.Collection') 
     24        portlet = getUtility( 
     25            IPortletType, name='quintagroup.portlet.collection.Collection') 
     26        self.assertEquals( 
     27            portlet.addview, 'quintagroup.portlet.collection.Collection') 
    2528 
    2629    def testInterfaces(self): 
     
    3033 
    3134    def testInvokeAddview(self): 
    32         portlet = getUtility(IPortletType, name='quintagroup.portlet.collection.Collection') 
    33         mapping = self.portal.restrictedTraverse('++contextportlets++plone.leftcolumn') 
     35        portlet = getUtility( 
     36            IPortletType, name='quintagroup.portlet.collection.Collection') 
     37        mapping = self.portal.restrictedTraverse( 
     38            '++contextportlets++plone.leftcolumn') 
    3439        for m in mapping.keys(): 
    3540            del mapping[m] 
    3641        addview = mapping.restrictedTraverse('+/' + portlet.addview) 
    3742 
    38         addview.createAndAdd(data={'header' : u"test title"}) 
     43        addview.createAndAdd(data={'header': u"test title"}) 
    3944 
    4045        self.assertEquals(len(mapping), 1) 
     
    5358        request = self.folder.REQUEST 
    5459        view = self.folder.restrictedTraverse('@@plone') 
    55         manager = getUtility(IPortletManager, name='plone.rightcolumn', context=self.portal) 
     60        manager = getUtility( 
     61            IPortletManager, name='plone.rightcolumn', context=self.portal) 
    5662        assignment = collection.Assignment(header=u"title") 
    5763 
    58         renderer = getMultiAdapter((context, request, view, manager, assignment), IPortletRenderer) 
     64        renderer = getMultiAdapter( 
     65            (context, request, view, manager, assignment), IPortletRenderer) 
    5966        self.failUnless(isinstance(renderer, collection.Renderer)) 
     67 
    6068 
    6169class TestQPortletCollectionRenderer(TestCase): 
     
    6472        self.setRoles(('Manager',)) 
    6573        self.pages = self._createType(self.folder, 'Topic', 'pages') 
    66         crit = self.folder.pages.addCriterion('portal_type', 'ATSimpleStringCriterion') 
     74        crit = self.folder.pages.addCriterion( 
     75            'portal_type', 'ATSimpleStringCriterion') 
    6776        crit.setValue('Document') 
    6877 
    69     def renderer(self, context=None, request=None, view=None, manager=None, assignment=None): 
     78    def renderer(self, context=None, request=None, view=None, manager=None, 
     79                 assignment=None): 
    7080        context = context or self.folder 
    7181        request = request or self.folder.REQUEST 
    7282        view = view or self.folder.restrictedTraverse('@@plone') 
    73         manager = manager or getUtility(IPortletManager, name='plone.rightcolumn', context=self.portal) 
     83        manager = manager or getUtility( 
     84            IPortletManager, name='plone.rightcolumn', context=self.portal) 
    7485        assignment = assignment or collection.Assignment(header=u"title") 
    7586 
    76         return getMultiAdapter((context, request, view, manager, assignment), IPortletRenderer) 
     87        return getMultiAdapter((context, request, view, manager, assignment), 
     88                               IPortletRenderer) 
    7789 
    7890    def _createType(self, context, portal_type, id, **kwargs): 
     
    92104        Cover problem in #9184 
    93105        """ 
    94         r = self.renderer(context=self.portal, 
    95                           assignment=collection.Assignment(header=u"title", 
    96                                                            target_collection=u"/events")) 
    97         r  = r.__of__(self.folder) 
     106        r = self.renderer( 
     107            context=self.portal, 
     108            assignment=collection.Assignment(header=u"title", 
     109                                             target_collection=u"/events")) 
     110        r = r.__of__(self.folder) 
    98111        self.assertEqual(r.collection().id, 'events') 
    99112 
    100113    def test_portletStyle(self): 
    101114        renderer = self.renderer(context=self.portal, 
    102                                  assignment=collection.Assignment(header=u"title", 
    103                                                                   styling="TestClass")) 
     115                                 assignment=collection.Assignment( 
     116                                     header=u"title", 
     117                                     styling="TestClass")) 
    104118        renderer = renderer.__of__(self.folder) 
    105119        renderer.update() 
     
    110124        page = self._createType(self.folder, 'Document', 'page') 
    111125        page.update(title="Test Page", description="Test description") 
     126        target_collection = '/Members/test_user_1_/pages' 
    112127        renderer = self.renderer(context=self.portal, 
    113                                  assignment=collection.Assignment(header=u"title", 
    114                                                                   item_attributes=[u'Title'], 
    115                                                                   target_collection='/Members/test_user_1_/pages')) 
     128                                 assignment=collection.Assignment( 
     129                                     header=u"title", 
     130                                     item_attributes=[u'Title'], 
     131                                     target_collection=target_collection)) 
    116132        renderer = renderer.__of__(self.folder) 
    117133        renderer.update() 
    118134        self.failUnless('Test Page' in renderer.render()) 
    119135        self.failUnless('Test description' not in renderer.render()) 
     136 
    120137 
    121138class TestQPortletCollectionQuery(TestCase): 
     
    138155        return obj 
    139156 
    140  
    141     def renderer(self, context=None, request=None, view=None, manager=None, assignment=None): 
     157    def renderer(self, context=None, request=None, view=None, manager=None, 
     158                assignment=None): 
    142159        context = context or self.folder 
    143160        request = request or self.folder.REQUEST 
    144161        view = view or self.folder.restrictedTraverse('@@plone') 
    145         manager = manager or getUtility(IPortletManager, name='plone.leftcolumn', context=self.portal) 
     162        manager = manager or getUtility( 
     163            IPortletManager, name='plone.leftcolumn', context=self.portal) 
    146164        assignment = assignment 
    147         return getMultiAdapter((context, request, view, manager, assignment), IPortletRenderer) 
     165        return getMultiAdapter((context, request, view, manager, assignment), 
     166                               IPortletRenderer) 
    148167 
    149168    def testSimpleQuery(self): 
    150169        # set up our collection to search for Folders 
    151         crit = self.folder.collection.addCriterion('portal_type', 'ATSimpleStringCriterion') 
     170        crit = self.folder.collection.addCriterion( 
     171            'portal_type', 'ATSimpleStringCriterion') 
    152172        crit.setValue('Folder') 
    153173 
    154174        # add a few folders 
    155175        for i in range(6): 
    156             self.folder.invokeFactory('Folder', 'folder_%s'%i) 
    157             getattr(self.folder, 'folder_%s'%i).reindexObject() 
     176            self.folder.invokeFactory('Folder', 'folder_%s' % i) 
     177            getattr(self.folder, 'folder_%s' % i).reindexObject() 
    158178 
    159179        # the folders are returned by the topic 
     
    163183 
    164184        mapping = PortletAssignmentMapping() 
    165         request = self.folder.REQUEST 
    166         mapping['foo'] = collection.Assignment(header=u"title", target_collection='/Members/test_user_1_/collection') 
    167         collectionrenderer = self.renderer(context=None, request=None, view=None, manager=None, assignment=mapping['foo']) 
     185        t_collection = '/Members/test_user_1_/collection' 
     186        mapping['foo'] = collection.Assignment(header=u"title", 
     187                                               target_collection=t_collection) 
     188        collectionrenderer = self.renderer(context=None, request=None, 
     189                                           view=None, manager=None, 
     190                                           assignment=mapping['foo']) 
    168191 
    169192        # we want the portlet to return us the same results as the collection 
    170         self.assertEquals(collection_num_items, len(collectionrenderer.results())) 
     193        self.assertEquals( 
     194            collection_num_items, len(collectionrenderer.results())) 
    171195 
    172196    def testRandomQuery(self): 
     
    185209        # set up our portlet renderer 
    186210        mapping = PortletAssignmentMapping() 
    187         request = self.folder.REQUEST 
     211        t_collection = '/Members/test_user_1_/collection' 
    188212        mapping['foo'] = collection.Assignment(header=u"title", 
    189213                                               random=True, 
    190                                                target_collection='/Members/test_user_1_/collection') 
    191         collectionrenderer = self.renderer(context=None, request=None, view=None, manager=None, assignment=mapping['foo']) 
     214                                               target_collection=t_collection) 
     215        collectionrenderer = self.renderer(context=None, request=None, 
     216                                           view=None, manager=None, 
     217                                           assignment=mapping['foo']) 
    192218 
    193219        # add some folders 
    194220        for i in range(6): 
    195             self.folder.invokeFactory('Folder', 'folder_%s'%i) 
    196             getattr(self.folder, 'folder_%s'%i).reindexObject() 
     221            self.folder.invokeFactory('Folder', 'folder_%s' % i) 
     222            getattr(self.folder, 'folder_%s' % i).reindexObject() 
    197223 
    198224        # collection with no criteria -- should return empty list, without error 
     
    204230        global collection_was_called 
    205231        collection_was_called = False 
     232 
    206233        def mark_collection_called(**kw): 
    207234            global collection_was_called 
     
    214241 
    215242        # collection with simple criterion -- should return 1 (random) folder 
    216         crit = self.folder.collection.addCriterion('portal_type', 'ATSimpleStringCriterion') 
     243        crit = self.folder.collection.addCriterion( 
     244            'portal_type', 'ATSimpleStringCriterion') 
    217245        crit.setValue('Folder') 
    218246        self.assertEqual(len(collectionrenderer.results()), 1) 
     
    220248 
    221249        # collection with multiple criteria -- should behave similarly 
    222         crit = self.folder.collection.addCriterion('Creator', 'ATSimpleStringCriterion') 
     250        crit = self.folder.collection.addCriterion( 
     251            'Creator', 'ATSimpleStringCriterion') 
    223252        crit.setValue('test_user_1_') 
    224253        collectionrenderer.results() 
  • quintagroup.portlet.collection/trunk/quintagroup/portlet/collection/utils.py

    r1572 r3555  
    11"""Somme utility functions for common use""" 
    22from Products.CMFCore.utils import getToolByName 
     3 
    34 
    45def getStylesVocabulary(context): 
     
    1314                value_list = [] 
    1415                for line in dropdown_list: 
    15                     values = filter(lambda x:x.strip(), line.split('|', 1)) 
     16                    values = filter(lambda x: x.strip(), line.split('|', 1)) 
    1617                    if len(values) == 0: 
    1718                        continue 
  • quintagroup.portlet.collection/trunk/quintagroup/portlet/collection/vocabularies.py

    r3539 r3555  
    11try: 
    2     from zope.schema.interfaces import IVocabularyFactory 
     2    from zope.schema import interfaces 
     3    IVocabularyFactory = interfaces.IVocabularyFactory 
    34except ImportError: 
    45    from zope.app.schema.vocabulary import IVocabularyFactory 
     
    1213 
    1314PORTLET_CSS_STYLES = ( 
    14      (u"class1", _(u"Class1")), 
    15      (u"class2", _(u"Class2")), 
     15    (u"class1", _(u"Class1")), 
     16    (u"class2", _(u"Class2")), 
    1617) 
    1718 
    1819PORTLET_ATTRIBUTES_TO_SHOW = ( 
    19      (u"Title", _(u"Title")), 
    20      (u"Description", _(u"Description")), 
     20    (u"Title", _(u"Title")), 
     21    (u"Description", _(u"Description")), 
    2122) 
     23 
    2224 
    2325class PortletCSSVocabulary(object): 
    2426    implements(IVocabularyFactory) 
    25  
    2627 
    2728    def __call__(self, context): 
     
    4950PortletCSSVocabulary = PortletCSSVocabulary() 
    5051 
     52 
    5153class PortletAttributesVocabulary(object): 
    52      implements(IVocabularyFactory) 
     54    implements(IVocabularyFactory) 
    5355 
    54      def __call__(self, context): 
    55          items = [SimpleTerm(value, value, title) for value, title in PORTLET_ATTRIBUTES_TO_SHOW] 
    56          return SimpleVocabulary(items) 
     56    def __call__(self, context): 
     57        items = [SimpleTerm(value, value, title) for value, 
     58                 title in PORTLET_ATTRIBUTES_TO_SHOW] 
     59        return SimpleVocabulary(items) 
    5760 
    5861PortletAttributesVocabulary = PortletAttributesVocabulary() 
    59  
Note: See TracChangeset for help on using the changeset viewer.