def items(self): """Return brains""" query = { 'sort_limit': 3, 'sort_on': 'end', 'sort_order': 'descending', } if self.view.subject(): query['Subject'] = self.view.subject() res = [] languages = getToolByName(self.context, 'portal_languages') code = languages.getPreferredLanguage() for item in IAdapter(self.context).get_content_listing(IATEvent, Language=code, **query): res.append({ 'client': item.contactName, 'client_url': item.eventUrl, 'description': item.Description(), 'location': item.location, 'subjects': self._subjects(item), 'title': item.Title(), 'url': item.getURL(), 'year': IEventAdapter(item).year(), }) return res
def services(self): """Return list of dictionary :rtype: list """ res = [] languages = getToolByName(self.context, 'portal_languages') code = languages.getPreferredLanguage() if 'Subject' not in self.request.form: for item in IAdapter(self.context).get_content_listing( IATDocument, depth=1, sort_order='getObjPositionInParent', Language=code): Subjects = item.Subject() if Subjects: Subject = Subjects[0] res.append({ 'title': item.Title(), 'description': item.Description(), 'id': item.id, 'url': '{}?Subject={}'.format(self.context.absolute_url(), Subject), }) 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 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 doc(self): """Return instance of ATDocument""" languages = getToolByName(self.context, 'portal_languages') code = languages.getPreferredLanguage() if self.subject(): return IAdapter(self.context).get_object(IATDocument, depth=1, Subject=self.subject(), sort_on="getObjPositionInParent", Language=code) return self.context.get(code)
def actions(self): """Returns content listing of actions :rtype: content listing """ portal_state = self.context.restrictedTraverse('@@plone_portal_state') path = '{}/site-actions'.format(portal_state.navigation_root_path()) return IAdapter(self.context).get_content_listing(IATFolder, path=path, depth=1, sort_on='getObjPositionInParent')
def _brain(self): """Return brain""" languages = getToolByName(self.context, 'portal_languages') code = languages.getPreferredLanguage() return IAdapter(self.context).get_brain(IATNewsItem, path=self._path(), sort_on='effective', sort_order='descending', Language=code)
def obj(self): """Return ATDocument object :rtype: obj """ adapter = IAdapter(self.context) if self.name: return adapter.get_object(IATDocument, depth=1, id=self.name) else: return adapter.get_object(IATDocument, depth=1)
def _brain(self): """Return dicrionary :rtype: dict """ languages = getToolByName(self.context, 'portal_languages') code = languages.getPreferredLanguage() return IAdapter(self.context).get_brain(IATEvent, path=self._path(), sort_on='end', sort_order='descending', Language=code)
def clear_interfaces(self): context = aq_inner(self.context) adapter = IAdapter(context) items = {} omits = [ IVersioned, IATImage, IImageContent, IATFile, IFileContent, IATBlobImage, IATBlobFile ] for obj in adapter.get_objects(): if obj.id == 'carousel': parent = aq_parent(aq_inner(obj)) parent.manage_delObjects(['carousel']) message = 'Remove carousel folder from {}.'.format('/'.join( parent.getPhysicalPath())) logger.info(message) IStatusMessage(self.request).addStatusMessage(message, type='info') else: ifaces = [ iface for iface in directlyProvidedBy(obj) if iface not in omits ] if ifaces: for iface in ifaces: annotations = IAnnotations(obj) if annotations.get('collective.pfg.payment'): del annotations['collective.pfg.payment'] message = 'Remove annotations collective.pfg.payment from {}.'.format( '/'.join(obj.getPhysicalPath())) logger.info(message) IStatusMessage(self.request).addStatusMessage( message, type='info') noLongerProvides(obj, iface) identifier = iface.__identifier__ if identifier not in items: items[identifier] = 1 else: items[identifier] += 1 obj.reindexObject(idxs=['object_provides']) for key in items: message = '{} objects providing {} are cleared.'.format( items[key], key) logger.info(message) IStatusMessage(self.request).addStatusMessage(message, type='info') if not items: message = 'No objects need to be cleared.' logger.info(message) IStatusMessage(self.request).addStatusMessage(message, type='info') url = self.context.absolute_url() return self.request.response.redirect(url)
def title(self): """Return title from folder title :rtype: str """ languages = getToolByName(self.context, 'portal_languages') code = languages.getPreferredLanguage() brain = IAdapter(self.context).get_brain(IATDocument, depth=1, id=code) if brain: title = brain.Title else: title = self.context.Title() return _(u'recent-something', default=u"Recent ${something}", mapping={'something': safe_unicode(title)})
def _tabs(self): context = aq_inner(self.context) portal_tabs_view = getMultiAdapter((context, self.request), name='portal_tabs_view') portal = self.context.restrictedTraverse( '@@plone_portal_state').portal() res = [] languages = getToolByName(self.context, 'portal_languages') code = languages.getPreferredLanguage() for tab in portal_tabs_view.topLevelTabs(): obj = portal.get(tab['id']) if obj and IAdapter(obj).get_brains(depth=1, Language=[code, '']): name = safe_unicode(tab['name']) tab['name'] = _(name) res.append(tab) return res
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 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 _subjects(self, brain): """Return list of dictionary :rtype: list """ res = [] parent_brain = IAdapter(self.context).get_brain(IATFolder, path=self._path(), depth=0) parent_url = parent_brain.getURL() subjects = brain.Subject if hasattr(subjects, '__call__'): subjects = subjects() for subject in subjects: res.append({ 'title': subject, 'url': '{}?Subject={}'.format(parent_url, subject), }) return res
def works(self): """Returns list of dictionary of past works""" res = [] languages = getToolByName(self.context, 'portal_languages') code = languages.getPreferredLanguage() for item in IAdapter(self.context).get_content_listing( IATEvent, depth=1, sort_on='end', sort_order='descending', Language=code): res.append({ 'client': item.contactName, 'client_url': item.eventUrl, 'description': item.Description(), 'title': item.Title(), 'url': item.getURL(), 'year': IEventAdapter(item).year(), 'end': item.endDate, }) 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__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 news(self): """Return list of dictionary :rtype: list """ query = { 'depth': 1, 'sort_order': 'effective', 'review_state': 'published' } if self.view.subject(): query['Subject'] = self.view.subject() res = [] toLocalizedTime = self.context.restrictedTraverse( '@@plone').toLocalizedTime languages = getToolByName(self.context, 'portal_languages') code = languages.getPreferredLanguage() for item in IAdapter(self.context).get_content_listing(IATNewsItem, Language=code, **query): res.append({ 'title': item.Title(), 'description': item.Description(), 'id': item.id, 'url': item.getURL(), 'date': toLocalizedTime(item.EffectiveDate()), 'datetime': item.effective.asdatetime().date().isoformat(), 'subjects': self._subjects(item), }) return res
def test_getSessionData(self, getToolByName): from collective.base.interfaces import IAdapter IAdapter(self.portal).getSessionData() getToolByName().getSessionData.assert_called_with(create=True)
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)
def handleAdd(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return # 1. Find or create folder where selected items will be archived. folder_id = "c" folder_title = "{} Converted".format(self.context.Title()) folder = self.context.get(folder_id) if folder is None: folder = self.context[self.context.invokeFactory( 'Folder', folder_id, title=folder_title)] # 2. Find original objects. adapter = IAdapter(self.context) paths = self.paths.split( '\r\n') if '\r\n' in self.paths else self.paths.split('\n') objs = self.context.getObjectsFromPathList(paths) form = self.request.form # Data from form title = form.get('form.widgets.IBasic.title') description = form.get('form.widgets.IBasic.description') fpaivays = None if form.get('form.widgets.paivays-year') and form.get( 'form.widgets.paivays-day'): fpaivays = datetime(int(form.get('form.widgets.paivays-year')), int(form.get('form.widgets.paivays-month')), int(form.get('form.widgets.paivays-day'))) text = form.get('form.widgets.text') omits = [ 'form.widgets.IBasic.title', 'form.widgets.IBasic.description', 'form.widgets.paivays-year', 'form.widgets.paivays-month', 'form.widgets.paivays-day', 'form.widgets.text', 'form.widgets.text.mimeType', 'form.buttons.convert', 'form.widgets.paivays-empty-marker', 'form.widgets.paivays-calendar', 'form.widgets.IVersionable.changeNote', 'form.widgets.paths' ] # file file_field = self.file_field() fname = 'form.widgets.{}'.format(file_field.getName()) cfile = form.get(fname) omits.append(fname) if cfile: cfile.seek(0) file_data = cfile.read() file_name = cfile.filename cfile.close() # image image_field = self.image_field() iname = 'form.widgets.{}'.format(image_field.getName()) cimage = form.get(iname) omits.append(iname) if cimage: cimage.seek(0) image_data = cimage.read() image_name = cimage.filename cimage.close() keys = [ key for key in form.keys() if key not in omits and key.startswith('form.widgets.') and not key.endswith('empty-marker') ] data = {} for key in keys: val = form.get(key) if val: if isinstance(val, list): val = [va.decode('unicode_escape') for va in val] data[key.split('.')[2]] = val object_ids = [] # 3. Select values and create archive. for obj in objs: data = data.copy() data['title'] = safe_unicode(obj.Title()) or title data['description'] = safe_unicode( obj.Description()) or description uuid = obj.UID() brain = adapter.get_brain(UID=uuid) paivays = fpaivays if brain.review_state == 'published': paivays = brain.effective if paivays is None: paivays = brain.created if not isinstance(paivays, datetime): paivays = paivays.asdatetime().replace(tzinfo=None) data['paivays'] = paivays if obj.getField('text') is not None: text = self._strip_dev( rewrite_links(safe_unicode(obj.getField('text').get(obj)), link_repl_func)) or text if text: data['text'] = text content = createContentInContainer(folder, 'archive', checkConstraints=False, **data) # file filedata = None contentType = '' ofile = obj.getField('file', obj) if ofile: file_obj = ofile.get(obj) if file_obj and file_obj.get_size(): filedata = file_obj.data filename = file_obj.filename or data['title'] contentType = file_obj.getContentType() if filedata is None and cfile: filedata = file_data filename = file_name if filedata is not None: setattr( content, file_field.getName(), NamedBlobFile(data=filedata, filename=safe_unicode(filename), contentType=contentType)) # image imagedata = None contentType = '' oimage = obj.getField('image', obj) if oimage: image_obj = oimage.get(obj) if image_obj and image_obj.get_size(): imagedata = image_obj.data if not isinstance( image_obj.data, Pdata) else image_obj.data.data imagename = safe_unicode( image_obj.filename) or data['title'] contentType = image_obj.getContentType() if imagedata is None and cimage: imagedata = image_data imagename = image_name if imagedata is not None: setattr( content, image_field.getName(), NamedBlobImage(data=imagedata, filename=safe_unicode(imagename), contentType=contentType)) alsoProvides(content, IArchive) modified(content) object_ids.append(obj.id) # Remove the original object self.context.manage_delObjects(object_ids) message = _( u"add_converted_archives_success", default= u"${number} converted archive(s) are added to folder: ${title}", mapping={ 'number': len(objs), 'title': safe_unicode(folder_title) }) IStatusMessage(self.request).addStatusMessage(message, type='info') url = '{}/folder_contents'.format(self.context.absolute_url()) return self.request.response.redirect(url)
def test_context_path(self): base = IAdapter(self.portal) self.assertEqual(base.context_path(), '/plone')
def test_catalog(self): base = IAdapter(self.portal) self.assertEqual(base.catalog(), getToolByName(self.portal, 'portal_catalog'))
def test_membership(self): from Products.PlonePAS.tools.membership import MembershipTool adapter = IAdapter(self.portal) self.assertIsInstance(adapter.membership(), MembershipTool)
def test_portal_path(self): self.assertEqual(IAdapter(self.portal).portal_path(), '/plone')
def test_portal(self): self.assertEqual(IAdapter(self.portal).portal(), self.portal)
def test_verifyObject(self): from zope.interface.verify import verifyObject self.assertTrue(verifyObject(IAdapter, IAdapter(self.portal)))
def test_instance(self): from collective.base.adapter import Adapter self.assertIsInstance(IAdapter(self.portal), Adapter)