def test__two_folders(self): from Products.ATContentTypes.interfaces.folder import IATFolder base = IAdapter(self.portal) folder1 = self.portal[self.portal.invokeFactory('Folder', 'folder1')] folder1.reindexObject() folder2 = folder1[folder1.invokeFactory('Folder', 'folder2')] folder2.reindexObject() query = {} self.assertEqual(len(base.get_brains(**query)), 2) self.assertEqual(len(base.get_objects(**query)), 2) self.assertEqual(len(base.get_content_listing(**query)), 2) self.assertEqual(len(base.get_brains(interfaces=IATFolder, **query)), 2) self.assertEqual(len(base.get_objects(interfaces=IATFolder, **query)), 2) self.assertEqual(len(base.get_content_listing(interfaces=IATFolder, **query)), 2) query['sort_limit'] = 1 self.assertEqual(len(base.get_brains(**query)), 1) self.assertEqual(len(base.get_objects(**query)), 1) self.assertEqual(len(base.get_content_listing(**query)), 1) self.assertEqual(len(base.get_brains(interfaces=IATFolder, **query)), 1) self.assertEqual(len(base.get_objects(interfaces=IATFolder, **query)), 1) self.assertEqual(len(base.get_content_listing(interfaces=IATFolder, **query)), 1)
def _items(self, **query): adapter = IAdapter(self.context) sort_limit = adapter.get_feed_number(self.interface) if sort_limit: query['sort_limit'] = sort_limit if isinstance(self, BaseNewsEventFeedViewlet): query['sort_limit'] += adapter.get_feed_number(ITopPageMainFeed) base = IBaseAdapter(self.context) res = [] for item in base.get_content_listing(**query): obj = item.getObject() if not isinstance(self, BaseNewsEventFeedViewlet) or ( ISiteRoot.providedBy(self.context) and not ITopPageFeed.providedBy(obj)) or ( not ISiteRoot.providedBy(self.context) and INavigationRoot.providedBy(self.context) and not IMicroSiteFeed.providedBy(obj)): parent = aq_parent(aq_inner(obj)) res.append({ 'title': item.Title(), 'url': item.getURL(), 'parent_title': parent.Title(), 'parent_url': parent.absolute_url(), 'date': self._date(item), 'image': self._image(item), 'description': self._description(item), }) if sort_limit: return res[:sort_limit] return res
def events(self): """Return list of dictionary :rtype: list """ res = [] base = IAdapter(self.context) before_date = '{}/01/01'.format(self.year() + 1) for item in base.get_content_listing(IATEvent, sort_on='start', start={ 'query': [ DateTime(before_date), ], 'range': 'max' }, end={ 'query': [ DateTime(), ], 'range': 'min' }): res.append({ 'datetime': base.event_datetime(item), 'description': item.Description(), 'title': item.Title(), 'url': item.getURL(), }) return res
def _items(self, **query): adapter = IAdapter(self.context) sort_limit = adapter.get_feed_number(self.interface) if sort_limit: query['sort_limit'] = sort_limit if isinstance(self, BaseNewsEventFeedViewlet): query['sort_limit'] += adapter.get_feed_number( ITopPageMainFeed) base = IBaseAdapter(self.context) res = [] for item in base.get_content_listing(**query): obj = item.getObject() if not isinstance(self, BaseNewsEventFeedViewlet) or ( ISiteRoot.providedBy(self.context) and not ITopPageFeed.providedBy(obj)) or ( not ISiteRoot.providedBy(self.context) and INavigationRoot.providedBy(self.context) and not IMicroSiteFeed.providedBy(obj)): parent = aq_parent(aq_inner(obj)) res.append({ 'title': item.Title(), 'url': item.getURL(), 'parent_title': parent.Title(), 'parent_url': parent.absolute_url(), 'date': self._date(item), 'image': self._image(item), 'description': self._description(item), }) if sort_limit: return res[:sort_limit] return res
def __call__(self, paths=None, limit=0, b_start=0, b_size=10, b_orphan=1): """Returns limited number of brains. :param limit: Integer number. :type limit: int :param b_start: batching start. :type b_start: int :param b_size: batch size. :type b_size: int :param b_orphan: batch orphan. :type b_orphan: int :rtype: plone.app.contentlisting.contentlisting.ContentListing """ form = self.request.form start = form.get('start') if start: start = DateTime(start) end = form.get('end') if end: end = DateTime(end) + 1 if not (start or end): start = DateTime() adapter = IAdapter(self.context) query = dict( SearchableText=form.get('words', ''), sort_on='start', start={ 'query': [end, ], 'range': 'max', }, end={ 'query': [start, ], 'range': 'min', }, path=adapter.portal_path(), ) Subject = form.get('tags', None) if Subject: query.update({'Subject': Subject}) paths = form.get('paths', paths) if paths: query.update({'path': paths}) if limit: query.update({'sort_limit': limit}) # Add b_start and b_size to the query. if b_size: query['b_start'] = b_start query['b_size'] = b_size return adapter.get_content_listing(IATEvent, **query)
def test__get_brains__empty(self): from Products.ATContentTypes.interfaces.folder import IATFolder base = IAdapter(self.portal) query = {} self.assertEqual(len(base.get_brains(**query)), 0) self.assertEqual(len(base.get_objects(**query)), 0) self.assertEqual(len(base.get_content_listing(**query)), 0) self.assertIsNone(base.get_brain(**query)) self.assertIsNone(base.get_object(**query)) self.assertEqual(len(base.get_brains(interfaces=IATFolder, **query)), 0) self.assertEqual(len(base.get_objects(interfaces=IATFolder, **query)), 0) self.assertEqual(len(base.get_content_listing(interfaces=IATFolder, **query)), 0) self.assertIsNone(base.get_brain(interfaces=IATFolder, **query)) self.assertIsNone(base.get_object(interfaces=IATFolder, **query))
def test__folder_and_document(self): from Products.ATContentTypes.interfaces.document import IATDocument from Products.ATContentTypes.interfaces.folder import IATFolder base = IAdapter(self.portal) folder1 = self.portal[self.portal.invokeFactory('Folder', 'folder1')] folder1.reindexObject() doc1 = self.portal[self.portal.invokeFactory('Document', 'doc1')] doc1.reindexObject() self.assertEqual(len(base.get_brains(IATDocument)), 1) self.assertEqual(len(base.get_objects(IATDocument)), 1) self.assertEqual(len(base.get_content_listing(IATDocument)), 1) self.assertEqual(base.get_brain(IATDocument).id, 'doc1') self.assertEqual(base.get_object(IATDocument).id, 'doc1') self.assertEqual(len(base.get_brains([IATDocument, IATFolder])), 2) self.assertEqual(len(base.get_objects([IATDocument, IATFolder])), 2) self.assertEqual(len(base.get_content_listing([IATDocument, IATFolder])), 2) self.assertEqual(len(base.get_brains([IATDocument], object_provides=IATFolder.__identifier__)), 2) self.assertEqual(len(base.get_objects([IATDocument], object_provides=IATFolder.__identifier__)), 2) self.assertEqual(len(base.get_content_listing([IATDocument], object_provides=IATFolder.__identifier__)), 2)
def events(self): """Return list of dictionary :rtype: list """ res = [] base = IAdapter(self.context) before_date = '{}/01/01'.format(self.year() + 1) for item in base.get_content_listing(IATEvent, sort_on='start', start={'query': [DateTime(before_date), ], 'range': 'max'}, end={'query': [DateTime(), ], 'range': 'min'}): res.append({ 'datetime': base.event_datetime(item), 'description': item.Description(), 'title': item.Title(), 'url': item.getURL(), }) return res
def items(self): """Returns list of dictionary of footer infos :rtype: list """ res = [] adapter = IAdapter(self.context) path = '{}/footer-info'.format(adapter.portal_path()) for item in adapter.get_content_listing(IATDocument, path=path, depth=1, sort_on='getObjPositionInParent'): res.append({ 'id': item.id, 'title': item.Title(), 'url': item.getURL(), 'description': item.Description(), 'text': item.getObject().CookedBody(), }) return res
def test_event_datetime(self): base = IAdapter(self.portal) from DateTime import DateTime self.create_event(id='event1', startDate=DateTime('2013/02/25'), endDate=DateTime('2013/02/25')) self.create_event(id='event2', startDate=DateTime('2013/02/26 20:00'), endDate=DateTime('2013/02/26 22:00')) self.create_event(id='event3', startDate=DateTime('2013/02/27'), endDate=DateTime('2013/02/28')) from Products.ATContentTypes.interfaces.event import IATEvent res = [] for item in base.get_content_listing(IATEvent, sort_on='start'): res.append(base.event_datetime(item)) try: self.assertEqual(res, [ u'Feb 25, 2013 12:00 AM', u'Feb 26, 2013 08:00 PM - 10:00 PM', u'Feb 27, 2013 12:00 AM - Feb 28, 2013 12:00 AM']) except AssertionError: self.assertEqual(res, [ u'2013-02-25 00:00', u'2013-02-26 20:00 - 22:00', u'2013-02-27 00:00 - 2013-02-28 00:00'])
def test__one_folder(self): """Add folder under portal.""" from Products.ATContentTypes.interfaces.folder import IATFolder base = IAdapter(self.portal) folder1 = self.portal[self.portal.invokeFactory('Folder', 'folder1')] folder1.reindexObject() query = {} self.assertEqual(len(base.get_brains(**query)), 1) self.assertEqual(len(base.get_objects(**query)), 1) self.assertEqual(len(base.get_content_listing(**query)), 1) self.assertEqual(base.get_brain(**query).id, 'folder1') self.assertEqual(base.get_object(**query).id, 'folder1') self.assertEqual(len(base.get_brains(interfaces=IATFolder, **query)), 1) self.assertEqual(len(base.get_objects(interfaces=IATFolder, **query)), 1) self.assertEqual(len(base.get_content_listing(interfaces=IATFolder, **query)), 1) self.assertEqual(base.get_brain(interfaces=IATFolder, **query).id, 'folder1') self.assertEqual(base.get_object(interfaces=IATFolder, **query).id, 'folder1') query = {'path': '/'.join(folder1.getPhysicalPath())} self.assertEqual(len(base.get_brains(**query)), 1) self.assertEqual(len(base.get_objects(**query)), 1) self.assertEqual(len(base.get_content_listing(**query)), 1) self.assertEqual(base.get_brain(**query).id, 'folder1') self.assertEqual(base.get_object(**query).id, 'folder1') self.assertEqual(len(base.get_brains(interfaces=IATFolder, **query)), 1) self.assertEqual(len(base.get_objects(interfaces=IATFolder, **query)), 1) self.assertEqual(len(base.get_content_listing(interfaces=IATFolder, **query)), 1) self.assertEqual(base.get_brain(interfaces=IATFolder, **query).id, 'folder1') self.assertEqual(base.get_object(interfaces=IATFolder, **query).id, 'folder1') query['depth'] = 0 self.assertEqual(len(base.get_brains(**query)), 1) self.assertEqual(len(base.get_objects(**query)), 1) self.assertEqual(len(base.get_content_listing(**query)), 1) self.assertEqual(base.get_brain(**query).id, 'folder1') self.assertEqual(base.get_object(**query).id, 'folder1') self.assertEqual(len(base.get_brains(interfaces=IATFolder, **query)), 1) self.assertEqual(len(base.get_objects(interfaces=IATFolder, **query)), 1) self.assertEqual(len(base.get_content_listing(interfaces=IATFolder, **query)), 1) self.assertEqual(base.get_brain(interfaces=IATFolder, **query).id, 'folder1') self.assertEqual(base.get_object(interfaces=IATFolder, **query).id, 'folder1') query['depth'] = 1 self.assertEqual(len(base.get_brains(**query)), 0) self.assertEqual(len(base.get_objects(**query)), 0) self.assertEqual(len(base.get_content_listing(**query)), 0) self.assertIsNone(base.get_brain(**query)) self.assertIsNone(base.get_object(**query)) self.assertEqual(len(base.get_brains(interfaces=IATFolder, **query)), 0) self.assertEqual(len(base.get_objects(interfaces=IATFolder, **query)), 0) self.assertEqual(len(base.get_content_listing(interfaces=IATFolder, **query)), 0) self.assertIsNone(base.get_brain(interfaces=IATFolder, **query)) self.assertIsNone(base.get_object(interfaces=IATFolder, **query)) query['depth'] = 0 self.assertEqual(len(base.get_brains(**query)), 1) self.assertEqual(len(base.get_objects(**query)), 1) self.assertEqual(len(base.get_content_listing(**query)), 1) self.assertEqual(base.get_brain(**query).id, 'folder1') self.assertEqual(base.get_object(**query).id, 'folder1') setRoles(self.portal, TEST_USER_ID, ['Member']) from plone.app.testing.helpers import logout logout() base = IAdapter(self.portal) self.assertEqual(len(base.get_brains(**query)), 0) query['unrestricted'] = True self.assertEqual(len(base.get_brains(**query)), 1)