def create_testobject(parent, ptype, **kwargs): createContent(ptype) obj = createContent(ptype, **kwargs) notify(ObjectCreatedEvent(obj)) obj = addContentToContainer(parent, obj, checkConstraints=False) notify(ObjectAddedEvent(obj)) return obj
def create_task(parent, **kwargs): createContent('opengever.task.task') task = createContent('opengever.task.task', **kwargs) notify(ObjectCreatedEvent(task)) task = addContentToContainer(parent, task, checkConstraints=False) notify(ObjectAddedEvent(task)) return task
def convertFromDict(self,data): ''' Our objects will be returned as dicts ''' data['fields'] = dict([(l.keys()[0],l.values()[0]) for l in data['fields']]) tmpReg = {} tmpAttendee = {} attendees = [] tmpAttendees = [] data['created'] = DateTime(data['fields']['creation_date']) data['modified'] = DateTime(data['fields']['modification_date']) tmpReg['id'] = data['fields']['id'] tmpReg['registration_type'] = TIPO[data['fields']['tipo']] tmpReg['city'] = data['fields']['cidade'] tmpReg['state'] = data['fields']['estado'] tmpReg['country'] = PAIS.get(data['fields']['pais'],'br') tmpReg['email'] = data['fields']['email'] tmpReg['post_code'] = data['fields']['cep'] tmpReg['address'] = data['fields']['endereco'] if data['fields']['paga']: tmpReg['paid'] = True tmpReg['service'] = 'pagseguro' tmpReg['amount'] = data['fields']['valor_pago'] or 0 tmpReg['amount'] = data['fields']['valor_pago'] or 0 if data['portal_type']== 'Inscricao': tmpAttendee['address'] = data['fields']['endereco'] tmpAttendee['city'] = data['fields']['cidade'] tmpAttendee['state'] = data['fields']['estado'] tmpAttendee['post_code'] = data['fields']['cep'] tmpAttendee['country'] = PAIS.get(data['fields']['pais'],'br') tmpAttendee['email'] = data['fields']['email'] tmpAttendee['fullname'] = data['fields']['nome'] tmpAttendee['t_shirt_size'] = CAMISETA.get(data['fields']['camiseta'],'L') tmpAttendee['gender'] = (data['fields']['sexo'] == 'Feminino') and 'f' or 'm' tmpAttendee['twitter'] = data['fields']['twitter'] tmpAttendee['site'] = data['fields']['site'] tmpAttendee['organization'] = data['fields']['instituicao'] tmpAttendee['conference'] = data['fields']['optin_evento'] tmpAttendee['partners'] = data['fields']['optin_parceiros'] tmpAttendees.append(tmpAttendee) else: for att in data['fields']['participantes']: tmpAttendee = {} tmpAttendee['city'] = data['fields']['cidade'] tmpAttendee['state'] = data['fields']['estado'] tmpAttendee['post_code'] = data['fields']['cep'] tmpAttendee['country'] = PAIS.get(data['fields']['pais'],'br') tmpAttendee['email'] = att['email'] tmpAttendee['fullname'] = att['nome'] tmpAttendee['t_shirt_size'] = CAMISETA.get(att['camiseta'],'L') tmpAttendee['gender'] = (att['sexo'] == 'Feminino') and 'f' or 'm' tmpAttendee['organization'] = data['fields']['razao_social'] tmpAttendee['conference'] = data['fields']['optin_evento'] tmpAttendee['partners'] = data['fields']['optin_parceiros'] tmpAttendees.append(tmpAttendee) reg = createContent('apyb.registration.registration', checkConstraints=True, **tmpReg) for att in tmpAttendees: attendees.append(createContent('apyb.registration.attendee', checkConstraints=True, **att)) return [reg,attendees]
def create(self, data): ''' Create objects ''' reg_fields = ['discount_code'] data['registration_type'] = self.registration_type reg_data = dict([(k, data[k]) for k in reg_fields]) reg_data['email'] = data['email'] reg_data['city'] = data['city'] reg_data['state'] = data['state'] reg_data['country'] = data['country'] reg_data['registration_type'] = data['registration_type'] registration = createContent('registration', checkConstraints=True, **reg_data) for k in reg_fields: del data[k] base_attendee = data.copy() del base_attendee['attendees'] del base_attendee['email'] attendees = [] if not data['attendees']: form = self.request.form base_fname = 'form.widgets.attendees.%s.widgets.%s' ftype = 'AA' fname = base_fname % (ftype, 'fullname') if not fname in form: ftype = 'TT' fname = base_fname % (ftype, 'fullname') if not fname in form: ftype = '00' fname = base_fname % (ftype, 'fullname') if not fname in form: # Will raise an error in add.. return None line = {'fullname': form[base_fname % (ftype, 'fullname')], 'gender': form[base_fname % (ftype, 'gender')][0], 't_shirt_size': form[base_fname % (ftype, 't_shirt_size')][0], 'email': form[base_fname % (ftype, 'email')], 'caipirinha': form[base_fname % (ftype, 'caipirinha')][0], 'wall': form[base_fname % (ftype, 'wall')][0], } data['attendees'].append(line) for line in data['attendees']: line.update(base_attendee) # Create attendee object attendee = createContent('attendee', checkConstraints=True, **line) attendees.append(attendee) return [registration, attendees]
def testRelations(self): rel_fti = DexterityFTI( 'RelationsType', schema=IRelationsType.__identifier__ ) self.portal.portal_types._setObject('RelationsType', rel_fti) # Setup IIntIds utility which is required for relations to work from five.intid import site from zope.app.intid.interfaces import IIntIds site.add_intids(self.portal) intids = getUtility(IIntIds) source = createContentInContainer(self.portal, 'RelationsType') target = createContentInContainer(self.portal, 'RelationsType') # Test modifier when no relations are set modifier = SkipRelations('modifier', 'Modifier') on_clone_modifiers = modifier.getOnCloneModifiers(source) pers_id, pers_load, empty1, empty2 = on_clone_modifiers self.assertTrue(pers_id(None) is None) self.assertTrue(pers_id(None) is None) self.assertTrue(pers_load(None) is None) self.assertTrue(pers_load(None) is None) self.assertTrue(empty1 == []) self.assertTrue(empty2 == []) repo_clone = createContent('RelationsType') modifier.afterRetrieveModifier(source, repo_clone) self.assertTrue(repo_clone.single is source.single) self.assertTrue(repo_clone.multiple is source.multiple) # Add some relations source.single = RelationValue(intids.getId(target)) source.multiple = [RelationValue(intids.getId(target))] # Update relations from zope.lifecycleevent import ObjectModifiedEvent from zope.event import notify notify(ObjectModifiedEvent(source)) modifier = SkipRelations('modifier', 'Modifier') on_clone_modifiers = modifier.getOnCloneModifiers(source) pers_id, pers_load, empty1, empty2 = on_clone_modifiers self.assertTrue(pers_id(source.single)) self.assertTrue(pers_id(source.multiple)) self.assertTrue(pers_load(source.single) is None) self.assertTrue(pers_load(source.multiple) is None) self.assertTrue(empty1 == []) self.assertTrue(empty2 == []) repo_clone = createContent('RelationsType') modifier.afterRetrieveModifier(source, repo_clone) self.assertTrue(repo_clone.single is source.single) self.assertTrue(repo_clone.multiple is source.multiple)
def testRelations(self): rel_fti = DexterityFTI( 'RelationsType', schema= 'plone.app.versioningbehavior.tests.test_modifiers.IRelationsType') self.portal.portal_types._setObject('RelationsType', rel_fti) # Setup IIntIds utility which is required for relations to work from five.intid import site from zope.app.intid.interfaces import IIntIds site.add_intids(self.portal) intids = getUtility(IIntIds) source = createContentInContainer(self.portal, 'RelationsType') target = createContentInContainer(self.portal, 'RelationsType') # Test modifier when no relations are set modifier = SkipRelations('modifier', 'Modifier') pers_id, pers_load, empty1, empty2 = modifier.getOnCloneModifiers( source) self.assertTrue(pers_id(None) is None) self.assertTrue(pers_id(None) is None) self.assertTrue(pers_load(None) is None) self.assertTrue(pers_load(None) is None) self.assertTrue(empty1 == []) self.assertTrue(empty2 == []) repo_clone = createContent('RelationsType') modifier.afterRetrieveModifier(source, repo_clone) self.assertTrue(repo_clone.single is source.single) self.assertTrue(repo_clone.multiple is source.multiple) # Add some relations source.single = RelationValue(intids.getId(target)) source.multiple = [RelationValue(intids.getId(target))] # Update relations from zope.lifecycleevent import ObjectModifiedEvent from zope.event import notify notify(ObjectModifiedEvent(source)) modifier = SkipRelations('modifier', 'Modifier') pers_id, pers_load, empty1, empty2 = modifier.getOnCloneModifiers( source) self.assertTrue(pers_id(source.single)) self.assertTrue(pers_id(source.multiple)) self.assertTrue(pers_load(source.single) is None) self.assertTrue(pers_load(source.multiple) is None) self.assertTrue(empty1 == []) self.assertTrue(empty2 == []) repo_clone = createContent('RelationsType') modifier.afterRetrieveModifier(source, repo_clone) self.assertTrue(repo_clone.single is source.single) self.assertTrue(repo_clone.multiple is source.multiple)
def setUp(self): """Custom shared utility setup for tests.""" self.portal = self.layer['portal'] pr = self.portal.portal_resources pr.manage_addFolder('ambidexterity') pr.ambidexterity.manage_addFolder('simple_test_type') pr.ambidexterity.simple_test_type.manage_addFolder('test_integer_field') pr.ambidexterity.simple_test_type.manage_addFolder('test_string_field') pr.ambidexterity.simple_test_type.manage_addFolder('test_choice_field') type_folder = pr.ambidexterity.simple_test_type type_folder.manage_addFile('view.pt') type_folder['view.pt'].update_data( 'view.pt for <span tal:replace="context/id" />' ) type_folder.manage_addFile('custom.js') type_folder['custom.js'].update_data( 'custom.js for <span tal:replace="context/id" />' ) field_folder = pr.ambidexterity.simple_test_type.test_string_field field_folder.manage_addFile('validate.py') field_folder['validate.py'].update_data( 'if u"bad" in value.lower():\n error_message = u"At %s, value is bad: %s" % (context.getId(), value)' ) field_folder = pr.ambidexterity.simple_test_type.test_string_field field_folder.manage_addFile('default.py') field_folder['default.py'].update_data('default = u"default script %s" % context.title') field_folder = pr.ambidexterity.simple_test_type.test_integer_field field_folder.manage_addFile('default.py') integer_default_script = field_folder['default.py'] integer_default_script.update_data('default = 42') field_folder = pr.ambidexterity.simple_test_type.test_choice_field field_folder.manage_addFile('vocabulary.py') choice_vocabulary_script = field_folder['vocabulary.py'] choice_vocabulary_script.update_data("vocabulary = [(1, u'a'), (2, u'b'), (3, u'c')]") applyProfile(self.portal, 'collective.ambidexterity:testing') self.test_schema = self.portal.portal_types.simple_test_type.lookupSchema() test_item = createContent('simple_test_type', title=u'The Meaning of Life') test_item.id = 'test_item' self.portal['test_item'] = test_item test_item = createContent('Folder', title=u'A Folder') test_item.id = 'afolder' self.portal.afolder = test_item
def testRelationsInBehaviors(self): self.register_RelationsType() intids = getUtility(IIntIds) source = createContentInContainer(self.portal, 'RelationsType') target = createContentInContainer(self.portal, 'RelationsType') # Test modifier when no relations are set modifier = SkipRelations('modifier', 'Modifier') on_clone_modifiers = modifier.getOnCloneModifiers(source) pers_id, pers_load, empty1, empty2 = on_clone_modifiers self.assertTrue(pers_id(None) is None) self.assertTrue(pers_id(None) is None) self.assertTrue(pers_load(None) is None) self.assertTrue(pers_load(None) is None) self.assertTrue(empty1 == []) self.assertTrue(empty2 == []) repo_clone = createContent('RelationsType') modifier.afterRetrieveModifier(source, repo_clone) self.assertTrue(repo_clone.single is None) self.assertTrue(repo_clone.multiple is None) # Add some relations IRelationsBehavior(source).single = RelationValue(intids.getId(target)) IRelationsBehavior(source).multiple = [ RelationValue(intids.getId(target)) ] # Update relations from zope.lifecycleevent import ObjectModifiedEvent from zope.event import notify notify(ObjectModifiedEvent(source)) modifier = SkipRelations('modifier', 'Modifier') on_clone_modifiers = modifier.getOnCloneModifiers(source) pers_id, pers_load, empty1, empty2 = on_clone_modifiers self.assertTrue(pers_id(IRelationsBehavior(source).single)) self.assertTrue(pers_id(IRelationsBehavior(source).multiple)) self.assertTrue(pers_load(IRelationsBehavior(source).single) is None) self.assertTrue(pers_load(IRelationsBehavior(source).multiple) is None) self.assertTrue(empty1 == []) self.assertTrue(empty2 == []) repo_clone = createContent('RelationsType') modifier.afterRetrieveModifier(source, repo_clone) self.assertTrue( IRelationsBehavior(repo_clone).single is IRelationsBehavior( source).single) self.assertTrue( IRelationsBehavior(repo_clone).multiple is IRelationsBehavior( source).multiple)
def testRelationsInBehaviors(self): self.register_RelationsType() intids = getUtility(IIntIds) source = createContentInContainer(self.portal, 'RelationsType') target = createContentInContainer(self.portal, 'RelationsType') # Test modifier when no relations are set modifier = SkipRelations('modifier', 'Modifier') on_clone_modifiers = modifier.getOnCloneModifiers(source) pers_id, pers_load, empty1, empty2 = on_clone_modifiers self.assertTrue(pers_id(None) is None) self.assertTrue(pers_id(None) is None) self.assertTrue(pers_load(None) is None) self.assertTrue(pers_load(None) is None) self.assertTrue(empty1 == []) self.assertTrue(empty2 == []) repo_clone = createContent('RelationsType') modifier.afterRetrieveModifier(source, repo_clone) self.assertTrue(repo_clone.single is None) self.assertTrue(repo_clone.multiple is None) # Add some relations IRelationsBehavior(source).single = RelationValue( intids.getId(target) ) IRelationsBehavior(source).multiple = [ RelationValue(intids.getId(target)) ] # Update relations from zope.lifecycleevent import ObjectModifiedEvent from zope.event import notify notify(ObjectModifiedEvent(source)) modifier = SkipRelations('modifier', 'Modifier') on_clone_modifiers = modifier.getOnCloneModifiers(source) pers_id, pers_load, empty1, empty2 = on_clone_modifiers self.assertTrue(pers_id(IRelationsBehavior(source).single)) self.assertTrue(pers_id(IRelationsBehavior(source).multiple)) self.assertTrue(pers_load(IRelationsBehavior(source).single) is None) self.assertTrue(pers_load(IRelationsBehavior(source).multiple) is None) self.assertTrue(empty1 == []) self.assertTrue(empty2 == []) repo_clone = createContent('RelationsType') modifier.afterRetrieveModifier(source, repo_clone) self.assertTrue(IRelationsBehavior(repo_clone).single is IRelationsBehavior(source).single) self.assertTrue(IRelationsBehavior(repo_clone).multiple is IRelationsBehavior(source).multiple)
def testRelations(self): rel_fti = DexterityFTI('RelationsType', schema=IRelationsType.__identifier__) self.portal.portal_types._setObject('RelationsType', rel_fti) intids = getUtility(IIntIds) source = createContentInContainer(self.portal, 'RelationsType') target = createContentInContainer(self.portal, 'RelationsType') # Test modifier when no relations are set modifier = SkipRelations('modifier', 'Modifier') on_clone_modifiers = modifier.getOnCloneModifiers(source) pers_id, pers_load, empty1, empty2 = on_clone_modifiers self.assertTrue(pers_id(None) is None) self.assertTrue(pers_id(None) is None) self.assertTrue(pers_load(None) is None) self.assertTrue(pers_load(None) is None) self.assertTrue(empty1 == []) self.assertTrue(empty2 == []) repo_clone = createContent('RelationsType') modifier.afterRetrieveModifier(source, repo_clone) self.assertTrue(repo_clone.single is source.single) self.assertTrue(repo_clone.multiple is source.multiple) # Add some relations source.single = RelationValue(intids.getId(target)) source.multiple = [RelationValue(intids.getId(target))] # Update relations from zope.lifecycleevent import ObjectModifiedEvent from zope.event import notify notify(ObjectModifiedEvent(source)) modifier = SkipRelations('modifier', 'Modifier') on_clone_modifiers = modifier.getOnCloneModifiers(source) pers_id, pers_load, empty1, empty2 = on_clone_modifiers self.assertTrue(pers_id(source.single)) self.assertTrue(pers_id(source.multiple)) self.assertTrue(pers_load(source.single) is None) self.assertTrue(pers_load(source.multiple) is None) self.assertTrue(empty1 == []) self.assertTrue(empty2 == []) repo_clone = createContent('RelationsType') modifier.afterRetrieveModifier(source, repo_clone) self.assertTrue(repo_clone.single is source.single) self.assertTrue(repo_clone.multiple is source.multiple)
def create_main_task(self, templatefolder, selected_templates): highest_deadline = max( [template.deadline for template in selected_templates]) data = dict( title=templatefolder.title, issuer=self.replace_interactive_user('current_user'), responsible=self.replace_interactive_user('current_user'), responsible_client=get_current_org_unit().id(), task_type='direct-execution', deadline=date.today() + timedelta(highest_deadline + MAIN_TASK_DEADLINE_DELTA), ) main_task = createContent('opengever.task.task', **data) notify(ObjectCreatedEvent(main_task)) main_task = addContentToContainer( self.context, main_task, checkConstraints=True) self.mark_as_generated_from_tasktemplate(main_task) # set the main_task in to the in progress state api.content.transition(obj=main_task, transition='task-transition-open-in-progress') return main_task
def configure_members_folder(portal, target_language): members_id = 'Members' if members_id not in portal.keys(): title = _translate(u'members-title', target_language, u'Users') description = _translate(u'members-description', target_language, u"Site Users") container = createContent('Folder', id=members_id, title=title, description=description) container = addContentToContainer(portal, container) container.setOrdering('unordered') container.reindexObject() _publish(container) # set member search as default layout to Members Area container.setLayout('@@member-search') # Block all right column portlets by default manager = queryUtility(IPortletManager, name='plone.rightcolumn') if manager is not None: assignable = getMultiAdapter( (container, manager), ILocalPortletAssignmentManager ) assignable.setBlacklistStatus('context', True) assignable.setBlacklistStatus('group', True) assignable.setBlacklistStatus('content_type', True)
def configure_members_folder(portal, target_language): members_id = 'Members' if members_id not in portal.keys(): title = _translate(u'members-title', target_language, u'Users') description = _translate(u'members-description', target_language, u'Site Users') container = createContent('Folder', id=members_id, title=title, description=description, language=target_language.replace( '_', '-').lower()) container = addContentToContainer(portal, container) container.setOrdering('unordered') container.reindexObject() # set member search as default layout to Members Area container.setLayout('@@member-search') # Block all right column portlets by default manager = queryUtility(IPortletManager, name='plone.rightcolumn') if manager is not None: assignable = getMultiAdapter((container, manager), ILocalPortletAssignmentManager) assignable.setBlacklistStatus('context', True) assignable.setBlacklistStatus('group', True) assignable.setBlacklistStatus('content_type', True)
def setUpPloneSite(self, portal): # XXX: do not install (yet) PFG in Plone 5 if HAS_PFG and PLONE_VERSION < '5.0': self.applyProfile(portal, 'Products.PloneFormGen:default') # Install into Plone site using portal_setup self.applyProfile(portal, 'collective.cover:default') self.applyProfile(portal, 'collective.cover:testfixture') portal['my-image'].setImage(generate_jpeg(50, 50)) portal['my-image1'].setImage(generate_jpeg(50, 50)) portal['my-image2'].setImage(generate_jpeg(50, 50)) portal['my-file'].setFile(loadFile('lorem_ipsum.txt')) portal['my-file'].reindexObject() portal['my-news-item'].setImage(generate_jpeg(50, 50)) # Setup one a dexterity item from plone.dexterity.utils import createContent, addContentToContainer from plone.namedfile.file import NamedBlobImage as NamedImageFile context = createContent('testcontent', id='my-dexterity-item', title=u'My dexterity item') context.image = NamedImageFile(generate_jpeg(128, 128)) addContentToContainer(portal, context, checkConstraints=False) portal_workflow = portal.portal_workflow portal_workflow.setChainForPortalTypes(['Collection'], ['plone_workflow'],) # Prevent kss validation errors in Plone 4.2 portal_kss = getattr(portal, 'portal_kss', None) if portal_kss: portal_kss.getResource('++resource++plone.app.z3cform').setEnabled(False)
def configure_members_folder(portal, target_language): members_id = 'Members' if members_id not in portal.keys(): title = _translate(u'members-title', target_language, u'Users') description = _translate(u'members-description', target_language, u"Site Users") container = createContent('Folder', id=members_id, title=title, description=description) container = addContentToContainer(portal, container) container.setOrdering('unordered') container.reindexObject() _publish(container) # add index_html to Members area if 'index_html' not in container: container._setObject('index_html', PythonScript('index_html')) index_html = getattr(container, 'index_html') index_html.write(member_indexhtml) index_html.ZPythonScript_setTitle('User Search') # Block all right column portlets by default manager = queryUtility(IPortletManager, name='plone.rightcolumn') if manager is not None: assignable = getMultiAdapter( (container, manager), ILocalPortletAssignmentManager ) assignable.setBlacklistStatus('context', True) assignable.setBlacklistStatus('group', True) assignable.setBlacklistStatus('content_type', True)
def create_subtask(task, data): subtask = createContent('opengever.task.task', id=data['title'], **data) notify(ObjectCreatedEvent(subtask)) subtask = addContentToContainer(task, subtask, checkConstraints=True) for schemata in iterSchemata(subtask): super_repr = schemata(task) repr = schemata(subtask) for name, field in schema.getFieldsInOrder(schemata): if name in data: value = data[name] else: value = getattr(super_repr, name, None) setattr(repr, name, value) activity = TaskAddedActivity(subtask, task.REQUEST, task) activity.record() notify(ObjectModifiedEvent(subtask)) return subtask
def __init__(self, form, request, context): fti = queryUtility(IDexterityFTI, name=form.portal_type) if IDraftable.__identifier__ in fti.behaviors: draft = getCurrentDraft(request, create=False) target = getattr(draft, '_draftAddFormTarget', createContent(form.portal_type)) if draft is None: IMutableUUID(target).set('++add++%s' % form.portal_type) beginDrafting(target.__of__(context), None) draft = getCurrentDraft(request, create=True) draft._draftAddFormTarget = target # Disable Plone 5 implicit CSRF when no form action if HAS_PLONE_PROTECT: if not ([key for key in request.form if key.startswith('form.buttons.')]): alsoProvides(request, IDisableCSRFProtection) else: current = ICurrentDraftManagement(request) current.mark() context = DraftProxy(draft, target.__of__(context)) alsoProvides(request, IAddFormDrafting) super(DefaultAddFormFieldWidgets, self).__init__(form, request, context) # noqa
def createNewDay(self, new_date, content): id = new_date.strftime('%a-%b.-%d-%Y') id = queryUtility(IURLNormalizer).normalize(id) #Need to copy in all of the conects of the original day nday = createContent( 'collective.dexterity.appointments.appointmentday', appointment_date=new_date) new_day = addContentToContainer(self.parent, nday) new_day.manage_pasteObjects(content) #Yes I know this is gross, but under time restrictions. for time_slot in new_day.contentItems(): time_slot[1].start = time_slot[1].start + ( new_day.appointment_date - time_slot[1].start.date()) time_slot[1].end = time_slot[1].end + (new_day.appointment_date - time_slot[1].end.date()) new_day.reindexObject() import pdb pdb.set_trace() return new_day
def test_object_access(self): # Make sure that our ability to get at a private object is dependent # on login. portal = self.portal from plone.dexterity.utils import createContent test_item = createContent('simple_test_type', title=u'The Meaning of Life') test_item.id = 'test_item' self.portal['test_item'] = test_item ap = AmbidexterityProgram("myid = context.getId()") ap.execute(dict(context=portal)) ap = AmbidexterityProgram("myitem = context.test_item") ap.execute(dict(context=portal)) ap = AmbidexterityProgram("myitem = context.test_item.getId()") ap.execute(dict(context=portal)) # rock our world pat.logout() # we should still be able to get at the portal object ap = AmbidexterityProgram("myid = context.getId()") ap.execute(dict(context=portal)) # But not our test item ap = AmbidexterityProgram("myitem = context.test_item") with self.assertRaises(Unauthorized): ap.execute(dict(context=portal)) ap = AmbidexterityProgram("myitem = context.test_item.getId()") with self.assertRaises(Unauthorized): ap.execute(dict(context=portal))
def create_frontpage(portal, target_language): frontpage_id = 'front-page' if frontpage_id not in portal.keys(): title = _translate(u'front-title', target_language, u"Welcome to Plone") description = _translate( u'front-description', target_language, u"Congratulations! You have successfully installed Plone.") content = createContent('Document', id=frontpage_id, title=title, description=description, language=target_language) content = addContentToContainer(portal, content) front_text = None if target_language != 'en': util = queryUtility(ITranslationDomain, 'plonefrontpage') if util is not None: translated_text = util.translate( u'front-text', target_language=target_language) if translated_text != u'front-text': front_text = translated_text request = getattr(portal, 'REQUEST', None) if front_text is None and request is not None: view = queryMultiAdapter((portal, request), name='plone-frontpage-setup') if view is not None: front_text = bodyfinder(view.index()).strip() content.text = RichTextValue(front_text, 'text/html', 'text/x-html-safe') portal.setDefaultPage('front-page') _publish(content) content.reindexObject()
def add_invitation_to_context(context, invitation): ''' adds an invitation to a invitation folder in the provided context if no invitation folder is found, it tries to creates one default ''' import pdb pdb.set_trace() portal = getSite() catalog = getToolByName(portal, "portal_catalog") query = {} query['object_provides'] = IInvitationFolder.__identifier__ query['path'] = dict(query='/'.join(context.getPhysicalPath())) invitationfolders = catalog(query) if not invitationfolders: invitationfolder = createContent( portal_type='hejasverige.invitationfolder', title='invitations', description='folder for invitations') try: folder = addContentToContainer(container=context, object=invitationfolder, checkConstraints=True) folder.reindexObject() except Exception, ex: err = 'Unable to create invitaiton folder in', str( folder), 'due to', str(ex) logger.exception(err) return None
def create_main_task(self, templatefolder, selected_templates): highest_deadline = max( [template.deadline for template in selected_templates]) deadline_timedelta = api.portal.get_registry_record( 'deadline_timedelta', interface=ITaskSettings) data = dict( title=templatefolder.title, issuer=self.replace_interactive_user('current_user'), responsible=self.replace_interactive_user('current_user'), responsible_client=get_current_org_unit().id(), task_type='direct-execution', deadline=date.today() + timedelta(highest_deadline + deadline_timedelta), ) main_task = createContent('opengever.task.task', **data) notify(ObjectCreatedEvent(main_task)) main_task = addContentToContainer(self.context, main_task, checkConstraints=True) self.mark_as_generated_from_tasktemplate(main_task) # set the main_task in to the in progress state api.content.transition(obj=main_task, transition='task-transition-open-in-progress') return main_task
def create(self, data): ''' Create objects ''' talkfields = ['speakers','title','text','talk_type','track','language','level','references','iul',] talkinfo = dict([(k,data.get(k,'')) for k in talkfields]) if self.inside_track: talkinfo['track'] = self.context.UID() talk = createContent('apyb.papers.talk',checkConstraints=True, **talkinfo) return talk
def create_sub_folder(container, id_, title): content = createContent('FlowSubFolder', title=title) IOwned(content).changeOwnership(IOwned(container).getOwner()) content.id = id_ content.schema = container.schema content.schema_digest = container.schema_digest addContentToContainer(container, content, checkConstraints=False) return container[id_]
def getTopicWithLabel(topicObj, label): for obj in topicObj.objectValues(): if obj.Title() == label: return obj newtopic = createContent('collective.topictree.topic', title=label) addContentToContainer(topicObj, newtopic) topicObj = topicObj[newtopic.id] return topicObj
def test_chooseName(self): namechooser = INameChooser(self.activities) obj = createContentInContainer(self.activities, 'upfront.assessmentitem.content.assessmentitem') self.assertEqual(namechooser.chooseName(None, obj), 'q001') obj = createContent( 'upfront.assessmentitem.content.assessmentitem') self.assertEqual(namechooser.chooseName(None, obj), 'q002') self.assertEqual(namechooser.chooseName('custom', obj), 'custom')
def __call__(self): if self.request.REQUEST_METHOD != 'POST': return filedata = self.request.form.get("file", None) if not filedata: return filename = safe_unicode(filedata.filename.decode("utf8")) content_type = guess_type(filename)[0] or "" language = splitext(filename)[0][-2:] obj_id = hashlib.md5(splitext(filename)[0][:-3]).hexdigest() # otherwise I get ZPublisher.Conflict ConflictErrors # when uploading multiple files upload_lock.acquire() try: transaction.begin() file_ = NamedBlobFile( data=filedata, filename=filename, contentType=content_type, ) if obj_id in self.context.objectIds(): obj = self.context[obj_id] setattr(obj, language + '_file', file_) else: obj = createContent( 'unep.file', **({language + '_file': file_}) ) obj.id = obj_id obj = addContentToContainer(self.context, obj) obj.reindexObject() transaction.commit() finally: upload_lock.release() if language == 'en': language = 'English' elif language == 'es': language = 'Spanish' elif language == 'fr': language = 'French' self.request.RESPONSE.setHeader('content-type', 'application/json') return json.dumps({ 'uid': obj.UID(), 'title': obj.title, 'language': language, 'url': obj.absolute_url(), })
def test_add_to_portal_root_save(self): browser = Browser(self.layer['app']) browser.handleErrors = False # Login browser.open(self.portal.absolute_url() + '/login') browser.getControl(name='__ac_name').value = TEST_USER_NAME browser.getControl(name='__ac_password').value = TEST_USER_PASSWORD browser.getControl('Log in').click() # Enter the add screen for a temporary portal_factory-managed object browser.open(self.portal.absolute_url() + '/++add++MyDocument') # We should now have cookies with the drafts information cookies = browser.cookies.forURL(browser.url) self.assertEqual('"/plone"', cookies['plone.app.drafts.path']) self.assertEqual( # noqa '"%2B%2Badd%2B%2BMyDocument"', cookies['plone.app.drafts.targetKey'], ) self.assertNotIn( 'plone.app.drafts.draftName', browser.cookies.forURL(browser.url), ) # Simulate save action for creating a draft storage = queryUtility(IDraftStorage) draft = storage.createDraft(TEST_USER_ID, '++add++MyDocument') target = createContent('MyDocument') draft._draftAddFormTarget = target transaction.commit() browser.cookies.create( DRAFT_NAME_KEY, u'draft', path='/plone', ) # We can now fill in the required fields and save. The cookies should # expire. browser.getControl( name='form.widgets.IDublinCore.title').value = u'New Document' browser.getControl(name='form.buttons.save').click() self.assertNotIn( 'plone.app.drafts.targetKey', browser.cookies.forURL(browser.url), ) self.assertNotIn( 'plone.app.drafts.path', browser.cookies.forURL(browser.url), ) self.assertNotIn( 'plone.app.drafts.draftName', browser.cookies.forURL(browser.url), )
def __call__(self): if self.request.REQUEST_METHOD != 'POST': return filedata = self.request.form.get("file", None) if not filedata: return filename = safe_unicode(filedata.filename.decode("utf8")) content_type = guess_type(filename)[0] or "" language = splitext(filename)[0][-2:] obj_id = hashlib.md5(splitext(filename)[0][:-3]).hexdigest() # otherwise I get ZPublisher.Conflict ConflictErrors # when uploading multiple files upload_lock.acquire() try: transaction.begin() file_ = NamedBlobFile( data=filedata, filename=filename, contentType=content_type, ) if obj_id in self.context.objectIds(): obj = self.context[obj_id] setattr(obj, language + '_file', file_) else: obj = createContent('unep.file', **({ language + '_file': file_ })) obj.id = obj_id obj = addContentToContainer(self.context, obj) obj.reindexObject() transaction.commit() finally: upload_lock.release() if language == 'en': language = 'English' elif language == 'es': language = 'Spanish' elif language == 'fr': language = 'French' self.request.RESPONSE.setHeader('content-type', 'application/json') return json.dumps({ 'uid': obj.UID(), 'title': obj.title, 'language': language, 'url': obj.absolute_url(), })
def create(self, container, data): title = data['title'] if not isinstance(title, unicode): title = title.decode('utf-8') obj = createContent(data['portal_type'], id=title, title=title) notify(ObjectCreatedEvent(obj)) obj = addContentToContainer(container, obj, checkConstraints=True) return obj
def test_checkName(self): namechooser = INameChooser(self.activities) normalizer = getUtility(IURLNormalizer) obj = createContent( 'upfront.assessmentitem.content.assessmentitem') test_name = normalizer.normalize('Q001') self.assertEqual(namechooser.checkName(test_name, obj), True) obj = createContentInContainer(self.activities, 'upfront.assessmentitem.content.assessmentitem') self.assertEqual(namechooser.checkName(test_name, obj), False)
def create(self, data): ''' Create objects ''' trainingfields = ['speakers', 'title', 'text', 'track', 'language', 'level', 'iul'] traininginfo = dict([(k, data.get(k, '')) for k in trainingfields]) if self.inside_track: traininginfo['track'] = IUUID(self.context) training = createContent('training', checkConstraints=True, **traininginfo) return training
def setUp(self): """Custom shared utility setup for tests.""" self.portal = self.layer['portal'] self.pr = self.portal.portal_resources applyProfile(self.portal, 'collective.ambidexterity:testing') test_item = createContent('simple_test_type', title=u'The Meaning of Life') test_item.id = 'test_item' self.portal['test_item'] = test_item
def create_in(self, container): obj = createContent(self.portal_type, title=self.title) notify(ObjectCreatedEvent(obj)) # insert data from collectors collectors = getAdapters((obj.__of__(container),), IDataCollector) for name, collector in collectors: collector.insert(self.data[name]) obj = addContentToContainer(container, obj, checkConstraints=True) return obj
def pasteAsAlias(context, cb_copy_data=None, request=None): """Paste the clipboard contents as an alias. Either pass the data, or a valid request with the __cp key. """ cp = None if cb_copy_data is not None: cp = cb_copy_data elif request and request.has_key('__cp'): cp = request['__cp'] else: cp = None if cp is None: raise ValueError("No clipboard data") try: cp = _cb_decode(cp) except: raise ValueError("Can't decode clipboard: %r" % cp) oblist = [] app = context.getPhysicalRoot() failed = [] success = [] for mdata in cp[1]: m = OFS.Moniker.loadMoniker(mdata) try: ob = m.bind(app) except: raise ValueError("Objects not found in %s" % app) oblist.append(ob) intids = getUtility(IIntIds) for ob in oblist: relation = RelationValue(intids.getId(ob)) alias = createContent('collective.alias', _aliasTarget=relation) notify(ObjectCreatedEvent(alias)) name = INameChooser(context).chooseName(ob.getId(), alias) alias.id = name new_name = context._setObject(name, alias) # XXX: When we move to CMF 2.2, an event handler will take care of this new_object = context._getOb(new_name) new_object.notifyWorkflowCreated() return ' '.join(success) + ' '.join(failed)
def create(self, data): ''' Create objects ''' reg_fields = ['discount_code'] data['registration_type'] = self.registration_type reg_data = dict([(k, data[k]) for k in reg_fields]) reg_data['email'] = data['email'] reg_data['city'] = data['city'] reg_data['state'] = data['state'] reg_data['country'] = data['country'] reg_data['registration_type'] = data['registration_type'] registration = createContent('registration', checkConstraints=True, **reg_data) for k in reg_fields: del data[k] # Create attendee object attendee = createContent('attendee', checkConstraints=True, **data) return [registration, attendee]
def create_in(self, container): obj = createContent(self.portal_type, title=self.title) notify(ObjectCreatedEvent(obj)) # insert data from collectors collectors = getAdapters((obj.__of__(container), ), IDataCollector) for name, collector in collectors: collector.insert(self.data[name]) obj = addContentToContainer(container, obj, checkConstraints=True) return obj
def pasteAsAlias(context, cb_copy_data=None, request=None): """Paste the clipboard contents as an alias. Either pass the data, or a valid request with the __cp key. """ cp = None if cb_copy_data is not None: cp = cb_copy_data elif request and request.has_key("__cp"): cp = request["__cp"] else: cp = None if cp is None: raise ValueError("No clipboard data") try: cp = _cb_decode(cp) except: raise ValueError("Can't decode clipboard: %r" % cp) oblist = [] app = context.getPhysicalRoot() failed = [] success = [] for mdata in cp[1]: m = OFS.Moniker.loadMoniker(mdata) try: ob = m.bind(app) except: raise ValueError("Objects not found in %s" % app) oblist.append(ob) intids = getUtility(IIntIds) for ob in oblist: relation = RelationValue(intids.getId(ob)) alias = createContent("collective.alias", _aliasTarget=relation) notify(ObjectCreatedEvent(alias)) name = INameChooser(context).chooseName(ob.getId(), alias) alias.id = name new_name = context._setObject(name, alias) # XXX: When we move to CMF 2.2, an event handler will take care of this new_object = context._getOb(new_name) new_object.notifyWorkflowCreated() return " ".join(success) + " ".join(failed)
def create_events_topic(portal, target_language): events_id = 'events' if events_id not in portal.keys(): title = _translate(u'events-title', target_language, u'Events') description = _translate(u'events-description', target_language, u'Site Events') container = createContent('Folder', id=events_id, title=title, description=description, language=target_language) container = addContentToContainer(portal, container) _createObjectByType('Collection', container, id='aggregator', title=title, description=description) aggregator = container['aggregator'] # Constain types allowed_types = [ 'Event', ] _setup_constrains(container, allowed_types) container.setOrdering('unordered') container.setDefaultPage('aggregator') _publish(container) # Set the Collection criteria. #: Sort on the Event start date aggregator.sort_on = u'start' aggregator.sort_reversed = True #: Query by Type, Review State and Event start date after today aggregator.query = [ { 'i': 'portal_type', 'o': 'plone.app.querystring.operation.selection.is', 'v': ['Event'] }, { 'i': 'start', 'o': 'plone.app.querystring.operation.date.afterToday', 'v': '' }, { 'i': 'review_state', 'o': 'plone.app.querystring.operation.selection.is', 'v': ['published'] }, ] _publish(aggregator)
def add_relation(self, id, member_type='supporter'): relobj = createContent(portal_type='hejasverige.relation', foreign_id=id, ) try: item = addContentToContainer(container=self.__parent__, object=relobj, checkConstraints=False) except Exception, ex: err = 'Unable to add relation with id', id, 'to', str(self.__parent__), 'due to', str(ex) print err #log(err) return None
def load(self, klass): registry = component.queryUtility(interfaces.IPeerRegistry) if klass in registry: raise KeyError("Duplicate %r"%klass) instance = createContent(klass) alsoProvides(instance, interfaces.IMirrored) transformer = self.transform(instance) peer_class = self.peer(instance, transformer) registry[klass] = peer_class
def create_mail_object(self, message): # lookup the type of the 'message' field and create an instance fti = getUtility(IDexterityFTI, name=self.portal_type) schema = fti.lookupSchema() field_type = getFields(schema)['message']._type message_value = field_type( data=message, contentType='message/rfc822', filename=u'message.eml') # create content object content = createContent(self.portal_type, message=message_value) return content
def add_person(self, container, person): personobject = createContent(portal_type='hejasverige.person', first_name=person.get('first_name', None), last_name=person.get('last_name', None), personal_id=person.get('personal_id', None) ) #import pdb; pdb.set_trace() try: item = addContentToContainer(container=container, object=personobject, checkConstraints=False) except Exception, ex: err = 'Unable to add person with id', id, 'to', str(container), 'due to', str(ex) logger.exception(err) return None
def create_news_topic(portal, target_language): news_id = 'news' if news_id not in portal.keys(): title = _translate(u'news-title', target_language, u'News') description = _translate(u'news-description', target_language, u'Site News') container = createContent('Folder', id=news_id, title=title, description=description, language=target_language.replace( '_', '-').lower()) container = addContentToContainer(portal, container) _createObjectByType('Collection', container, id='aggregator', title=title, description=description) aggregator = container['aggregator'] # Constrain types allowed_types = [ 'News Item', ] _setup_constrains(container, allowed_types) container.setOrdering('unordered') container.setDefaultPage('aggregator') _publish(container) # Set the Collection criteria. #: Sort on the Effective date aggregator.sort_on = u'effective' aggregator.sort_reversed = True #: Query by Type and Review State aggregator.query = [ { 'i': u'portal_type', 'o': u'plone.app.querystring.operation.selection.any', 'v': [u'News Item'], }, { 'i': u'review_state', 'o': u'plone.app.querystring.operation.selection.any', 'v': [u'published'], }, ] aggregator.setLayout('summary_view') _publish(aggregator)
def add_content(self, typename, name, parent, **kwargs): kwargs['title'] = kwargs.get('title', name) tool = getToolByName(self.portal, 'portal_types') fti = tool.getTypeInfo(typename) if IDexterityFTI.providedBy(fti): o = createContent(typename, **kwargs) o.id = name parent._setObject(name, o) else: parent.invokeFactory(typename, name) o = parent[name] o.setTitle(kwargs.get('title')) o.reindexObject() return o
def setUpPloneSite(self, portal): # install into the Plone site applyProfile(portal, 'plone.app.deco:default') # add a manager user portal['acl_users'].userFolderAddUser('admin', 'secret', ['Manager'], []) # add a plone.page type, where we can test with page = createContent("page") page.id = 'page' portal._setObject('page', page)
def create(self, data): data['timezone'] = default_timezone() self.prepare_coordinates(data) self.prepare_submission(data) content = createContent('seantis.dir.events.item', **data) if IAcquirer.providedBy(content): content = content.__of__(aq_inner(self.context)) # must be done before adding to the container self.apply_submission(content) return aq_base(content)
def createDXSubcontainer(container, type, id, title, title_msgid, target_language): existing_content = container.keys() if id not in existing_content: title = _translate(title_msgid, target_language, title) #description = _translate(u'about-description', target_language, # u"About us.") subcontainer = createContent(type, id=id, title=title, #description=description ) subcontainer = addContentToContainer(container, subcontainer) subcontainer.setOrdering('unordered') subcontainer.reindexObject() _publish(subcontainer)
def add_person(self, container, person): personobject = createContent(portal_type='hejasverige.person', first_name=person.get('first_name', None), last_name=person.get('last_name', None), personal_id=person.get( 'personal_id', None)) #import pdb; pdb.set_trace() try: item = addContentToContainer(container=container, object=personobject, checkConstraints=False) except Exception, ex: err = 'Unable to add person with id', id, 'to', str( container), 'due to', str(ex) logger.exception(err) return None
def after_creation_processor(self, event): self.manage_setLocalRoles(RV_MANAGERS_GID, ['Editor']) id_iter = 1 for i in range(19): spot_id = 'spot_%s' % id_iter if spot_id in self.objectIds(): api.portal.show_message(message="Spot Id: %s already exists." % spot_id, request=self.REQUEST, type='info') else: spot_obj = createContent('docent.hoa.rvspot', id=spot_id.encode('ascii', 'ignore'), title=u"Spot %s" % id_iter) self._setObject(spot_id.encode('ascii', 'ignore'), spot_obj) setattr(spot_obj, 'spot_id', id_iter) id_iter += 1
def add_invitation(self, container, invitation): invitationobject = createContent( portal_type='hejasverige.invitation', sender_id=invitation.get('sender_id', None), first_name=invitation.get('first_name', None), last_name=invitation.get('last_name', None), personal_id=invitation.get('personal_id', None), recipient_email=invitation.get('recipient_email', None), invitation_expires=invitation.get('invitation_expires', None)) try: item = addContentToContainer(container=container, object=invitationobject, checkConstraints=False) item.reindexObject() except Exception, ex: err = 'Unable to add invitation with id', id, 'to', str( container), 'due to', str(ex) logger.exception(err) return None
def do_POST(self): if not self.has_permission('Euphorie: Manage country'): raise Unauthorized() sector = createContent('euphorie.sector') # Assign a temporary id. Without this security caching logic breaks due to use of # getPhysicalPath() as cache id. This calls getId() to get the id, # which uses __name__ if no id is set, but __name__ is a computer attribute which # calls getId. BOOM! sector.id = str(id(sector)) try: self.update_object(self.attributes, ISector, sector.__of__(self.context)) except ValueError as e: return {'type': 'error', 'message': str(e)} del sector.id sector = addContentToContainer(self.context.country, sector, False) view = SectorView(sector, self.request) return view.do_GET()
def create_or_update_proxy(self): if self.group_status != "moderated": return if self.proxy is None: self.proxy = createContent( "collective.rcse.proxygroup", checkConstraints=False, title=self.title(), description=self.description() ) self.proxy.id = self.proxy_id self.container._setObject(self.proxy_id, self.proxy) else: #just update the proxy if self.proxy.Title() != self.title(): self.proxy.setTitle(self.title()) if self.proxy.Description() != self.description(): self.proxy.setDescription(self.description()) self.proxy.reindexObject()