Exemplo n.º 1
0
 def createHostObject(self, parent, hostDict):
     """helper methode to create host instance
     """
     dateNow = datetime.utcnow()
     newHost = createObject(u'org.ict_ok.components.host.host.Host')
     notify(ObjectCreatedEvent(newHost))
     parent.__setitem__(newHost.getObjectId(), newHost)
     dc = IZopeDublinCore(newHost, None)
     dc.creators = [u'ikportscan']
     newHost.ikComment += u"scanner: %s" % (dateNow)
     if hostDict.has_key('hostname'):
         newHost.__setattr__("ikName", hostDict['hostname'])
         newHost.__setattr__("hostname", hostDict['hostname'])
         dc.title = hostDict['hostname']
     else:
         newHost.__setattr__("ikName", hostDict['ipAddress'])
         dc.title = hostDict['ipAddress']
     for i_os in hostDict['oss']:
         os_string = u"%s %s (%s) (%s)" % (i_os['osfamily'], i_os['osgen'],
                                           i_os['type'], i_os['vendor'])
         newHost.osList.append(os_string)
     newHost.__setattr__("genNagios", True)
     dc.created = dateNow
     if hostDict.has_key("interfaces") and len(hostDict['interfaces']) > 0:
         for interfaceDict in hostDict['interfaces']:
             self.createInterfaceObject(newHost, interfaceDict)
     notify(ObjectCreatedEvent(newHost))
Exemplo n.º 2
0
    def test_attribute_uuid_create_handler(self):

        from zope.interface import implementer
        from zope.event import notify
        from zope.lifecycleevent import ObjectCreatedEvent
        from zope.lifecycleevent import ObjectCopiedEvent

        from plone.uuid.interfaces import IAttributeUUID
        from plone.uuid.interfaces import IUUID
        from plone.uuid.interfaces import ATTRIBUTE_NAME

        @implementer(IAttributeUUID)
        class Context(object):
            pass

        context = Context()
        notify(ObjectCreatedEvent(context))

        uuid = IUUID(context, None)
        self.assertNotEqual(uuid, None)
        self.assertTrue(isinstance(uuid, str))

        # calling handler again won't change if UUID already present:
        notify(ObjectCreatedEvent(context))
        self.assertEqual(uuid, IUUID(context, None))

        # ...except when the UUID attribute was the result of a copy
        copied = Context()
        setattr(copied, ATTRIBUTE_NAME, IUUID(context, None))
        self.assertNotEqual(IUUID(copied, None), None)  # mimic copied state
        self.assertEqual(uuid, IUUID(copied, None))     # before handler
        notify(ObjectCopiedEvent(copied, original=context))
        self.assertNotEqual(uuid, None)
        self.assertNotEqual(uuid, IUUID(copied, None))  # copy has new UID
Exemplo n.º 3
0
 def createAndAdd(self, data):
     obj = self.create(data)
     notify(ObjectCreatedEvent(obj))
     self.add(obj)
     uidutil = queryUtility(IIntIds)
     oneParent = None
     for (oid, oobj) in uidutil.items():
         if IPatchPortFolder.providedBy(oobj.object):
             oneParent = oobj.object
             break
     if oneParent is not None:
         for i in range(1, obj.portCount+1):
             dataVect = {}
             dataVect['ikName'] = u'%s-%02d' % (obj.ikName, i)
             dataVect['patchpanel'] = obj
             if obj.room is not None:
                 dataVect['room'] = obj.room
             newObj = PatchPort(**dataVect)
             newObj.__post_init__()
             IBrwsOverview(newObj).setTitle(dataVect['ikName'])
             oneParent[newObj.objectID] = newObj
             if hasattr(newObj, "store_refs"):
                 newObj.store_refs(**dataVect)
             notify(ObjectCreatedEvent(newObj))
     return obj
Exemplo n.º 4
0
 def handle_insert(self, action, data):
     session = Session()
     sitting = domain.GroupSitting()
     trusted = removeSecurityProxy(ISchedulingContext(self.context))
     group = session.query(domain.Group).get(trusted.group_id)
     if ("rec_type" not in data.keys()) or (data["rec_type"] == ""):
         sitting.start_date = datetime.datetime.strptime(data["start_date"], '%Y-%m-%d %H:%M')
         sitting.end_date = datetime.datetime.strptime(data["end_date"], '%Y-%m-%d %H:%M')
         sitting.group_id = trusted.group_id
         if "language" in data.keys():
             sitting.language = data["language"]
         if "venue" in data.keys():
             sitting.venue_id = data["venue"]
         session.add(sitting)
         notify(ObjectCreatedEvent(sitting))
         session.commit()
         self.request.response.setHeader('Content-type', 'text/xml')
         return '<data><action type="inserted" sid="'+str(data["ids"])+'" tid="'+str(sitting.sitting_id)+'" /></data>'
     else:
         try:
             recurrence_start_date = datetime.datetime.strptime(data["start_date"], '%Y-%m-%d %H:%M')
             recurrence_end_date = datetime.datetime.strptime(data["end_date"], '%Y-%m-%d %H:%M')
         except:
             print "Date is not in the correct format"
         year = timedelta(days=365)
         #max end date is one year from now or end_date of the group whichever is sooner
         if (group is not None) and (group.end_date is not None):
             if (datetime.datetime.now() + year) < group.end_date:
                 end = datetime.datetime.now() + year 
             else:
                 end = group.end_date
             if recurrence_end_date > end:
                 recurrence_end_date = end 
         else:
             if recurrence_end_date > (datetime.datetime.now() + year):
                 recurrence_end_date = datetime.datetime.now() + year
         recurrence_type = data["rec_type"]
         length = data["event_length"]
         sitting_length = timedelta(seconds=int(length))
         dates = self.generate_recurrence_dates(recurrence_start_date, recurrence_end_date, recurrence_type)
         output = '<data>'
         for date in dates:
             sitting = domain.GroupSitting()
             sitting.group_id = trusted.group_id
             sitting.start_date = date
             sitting.end_date = date + sitting_length
             sitting.status = None
             if "language" in data.keys():
                 sitting.language = data["language"]
             if "venue" in data.keys():
                 sitting.venue_id = data["venue"]
             session.add(sitting)
             notify(ObjectCreatedEvent(sitting))
             output = output+'<action type="inserted" sid="'+str(data["ids"])+'" tid="'+str(sitting.sitting_id)+'" />'
         session.commit()
         output = output + '</data>'
         self.request.response.setHeader('Content-type', 'text/xml')
         return output
Exemplo n.º 5
0
    def setUp(test):
        functional.FunctionalTestSetup().setUp()

        newInteraction()

        def fake_utcnow(self):
            return datetime.datetime(2015, 7, 30, 8, 0, 0)

        curse(datetime.datetime, 'utcnow', classmethod(fake_utcnow))

        root = functional.getRootFolder()
        setSite(root)
        sm = root.getSiteManager()

        # IIntIds
        root['intids'] = IntIds()
        sm.registerUtility(root['intids'], IIntIds)
        root['intids'].register(root)

        # catalog
        root['catalog'] = Catalog()
        sm.registerUtility(root['catalog'], ICatalog)

        # PluggableAuthentication
        pau = PluggableAuthentication(u'')
        event.notify(ObjectCreatedEvent(pau))
        sm[u'auth'] = pau
        sm.registerUtility(pau, IAuthentication)

        # Credentials Plugin
        defaultCreds.install()
        defaultCreds.activate()

        # people
        people = PersonalSpaceManager(title=u'People')
        event.notify(ObjectCreatedEvent(people))
        root['people'] = people
        sm.registerUtility(root['people'], IPersonalSpaceManager)

        user = sm.getUtility(IAuthentication).getPrincipal('zope.mgr')
        people.assignPersonalSpace(user)

        user = sm.getUtility(IAuthentication).getPrincipal('zope.user')
        people.assignPersonalSpace(user)

        # default content
        content = Content(u'Content1', u'Some Content1')
        event.notify(ObjectCreatedEvent(content))
        IOwnership(content).ownerId = 'zope.user'
        root['content1'] = content

        content = Content(u'Content2', u'Some Content2')
        event.notify(ObjectCreatedEvent(content))
        IOwnership(content).ownerId = 'zope.user'
        root['content2'] = content

        endInteraction()
Exemplo n.º 6
0
    def test_multi_valued(self):
        from zope.event import notify
        from zope.interface import implements
        from zope.lifecycleevent import ObjectCreatedEvent
        from plone.uuid.interfaces import IUUID
        from plone.uuid.interfaces import IAttributeUUID
        from Products.Archetypes.Widget import RelatedItemsWidget

        class ExampleContent(object):
            implements(IAttributeUUID)

        with mock.patch('plone.app.widgets.utils.getUtility') as mock_method:
            registry = Mock()
            registry.get.return_value = ['SomeType']
            mock_method.return_value = registry

            obj1 = ExampleContent()
            obj2 = ExampleContent()
            notify(ObjectCreatedEvent(obj1))
            notify(ObjectCreatedEvent(obj2))

            self.field.getName.return_value = 'fieldname'
            self.field.getAccessor.return_value = lambda: [obj1, obj2]
            self.field.multiValued = True
            self.context.portal_registry.get.return_value = ['SomeType']

            widget = RelatedItemsWidget()

            self.assertEqual(
                {
                    'name': 'fieldname',
                    'value': '{};{}'.format(IUUID(obj1), IUUID(obj2)),
                    'pattern': 'relateditems',
                    'pattern_options': {
                        'folderTypes': ['SomeType'],
                        'homeText':
                        u'Home',
                        'searchAllText':
                        u'Entire site',
                        'searchText':
                        u'Search',
                        'separator':
                        ';',
                        'orderable':
                        True,
                        'maximumSelectionSize':
                        -1,
                        'vocabularyUrl':
                        '/@@getVocabulary?name='
                        'plone.app.vocabularies.Catalog'
                        '&field=fieldname',
                    },
                },
                widget._base_args(self.context, self.field, self.request),
            )
Exemplo n.º 7
0
 def _create_document(registry, folder):
     """Create new document and version"""
     document = Document()
     registry.notify(ObjectCreatedEvent(document))
     locate(document, folder)
     version = DocumentVersion()
     registry.notify(ObjectCreatedEvent(version))
     # add version to document
     versions = IWorkflowVersions(document)
     versions.add_version(version, None)
     IWorkflowInfo(version).fire_transition('init')
     return document, version
Exemplo n.º 8
0
    def test_multi_valued(self):
        from zope.event import notify
        from zope.interface import implementer
        from zope.lifecycleevent import ObjectCreatedEvent
        from plone.uuid.interfaces import IUUID
        from plone.uuid.interfaces import IAttributeUUID
        from Products.Archetypes.Widget import RelatedItemsWidget

        @implementer(IAttributeUUID)
        class ExampleContent(object):
            pass

        obj1 = ExampleContent()
        obj2 = ExampleContent()
        notify(ObjectCreatedEvent(obj1))
        notify(ObjectCreatedEvent(obj2))

        self.field.getName.return_value = 'fieldname'
        self.field.getAccessor.return_value = lambda: [obj1, obj2]
        self.field.multiValued = True

        widget = RelatedItemsWidget()
        base_args = widget._base_args(self.context, self.field, self.request)

        self.assertDictContainsSubset(
            {
                'name': 'fieldname',
                'value': '{};{}'.format(IUUID(obj1), IUUID(obj2)),
                'pattern': 'relateditems',
            }, base_args)

        self.assertDictContainsSubset(
            {
                'separator':
                ';',
                'orderable':
                True,
                'maximumSelectionSize':
                -1,
                'vocabularyUrl':
                '/@@getVocabulary?name='
                'plone.app.vocabularies.Catalog'
                '&field=fieldname',
                'basePath':
                '/Plone/doc',
                'contextPath':
                '/Plone/doc',
                'rootPath':
                '/',
                'rootUrl':
                ''
            }, base_args.get('pattern_options', {}))
Exemplo n.º 9
0
    def test_widget(self):
        from zope.event import notify
        from zope.interface import implements
        from zope.lifecycleevent import ObjectCreatedEvent
        from plone.uuid.interfaces import IUUID
        from plone.uuid.interfaces import IAttributeUUID
        from plone.app.widgets.at import RelatedItemsWidget

        class ExampleContent(object):
            implements(IAttributeUUID)

        obj1 = ExampleContent()
        obj2 = ExampleContent()
        notify(ObjectCreatedEvent(obj1))
        notify(ObjectCreatedEvent(obj2))

        self.field.getName.return_value = 'fieldname'
        self.field.getAccessor.return_value = lambda: [obj1, obj2]
        self.context.portal_properties.site_properties\
            .getProperty.return_value = ['SomeType']

        widget = RelatedItemsWidget()

        self.assertEqual(
            {
                'name': 'fieldname',
                'value': '{};{}'.format(IUUID(obj1), IUUID(obj2)),
                'pattern': 'relateditems',
                'pattern_options': {
                    'folderTypes': ['SomeType'],
                    'homeText':
                    u'home',
                    'searchAllText':
                    u'entire site',
                    'searchText':
                    u'Search',
                    'separator':
                    ';',
                    'orderable':
                    True,
                    'vocabularyUrl':
                    '/@@getVocabulary?name='
                    'plone.app.vocabularies.Catalog'
                    '&field=fieldname',
                },
            },
            widget._base_args(self.context, self.field, self.request),
        )
Exemplo n.º 10
0
def create_application(factory, container, name):
    """Creates an application and triggers the events from
    the application lifecycle.
    """
    # Check the factory.
    assert IApplication.implementedBy(factory)

    # Check the availability of the name in the container.
    if name in container:
        raise KeyError(name)

    # Instanciate the application
    application = factory()

    # Trigger the creation event.
    notify(ObjectCreatedEvent(application))

    # Persist the application.
    # This may raise a KeyError.
    container[name] = application

    # Trigger the initialization event.
    notify(ApplicationInitializedEvent(application))

    return application
Exemplo n.º 11
0
 def handleCreate(self, action):
     """create was pressed"""
     data, errors = self.extractData()
     if errors:
         self.status = self.formErrorsMessage
         return
     objList = data['connectors']
     if len(objList) < 2:
         self.status = _('insufficient connectors')
         return
     else:
         uidutil = queryUtility(IIntIds)
         con1 = objList.pop(0)
         con1_id = uidutil.getId(con1)
         while len(objList) > 0:
             con2 = objList.pop(0)
             con2_id = uidutil.getId(con2)
             print "conn: %s - %s" % (con1.ikName, con2.ikName)
             dataVect = {}
             dataVect['ikName'] = u'%s -/- %s' % (con1.ikName, con2.ikName)
             dataVect['connectors'] = [con1, con2]
             dataVect['requirements'] = []
             newObj = PhysicalLink(**dataVect)
             newObj.__post_init__()
             IBrwsOverview(newObj).setTitle(dataVect['ikName'])
             self.context[newObj.objectID] = newObj
             if hasattr(newObj, "store_refs"):
                 newObj.store_refs(**dataVect)
             notify(ObjectCreatedEvent(newObj))
             con1 = con2
             con1_id = con2_id
         url = absoluteURL(self.context, self.request) + u'/wz_create.html'
         self.request.response.redirect(url)
Exemplo n.º 12
0
    def create_or_modify_content(self, tus_upload):
        metadata = tus_upload.metadata()
        filename = metadata.get("filename", "")
        content_type = metadata.get("content-type", "application/octet-stream")
        mode = metadata.get("mode", "create")
        fieldname = metadata.get("fieldname")

        if mode == "create":
            type_ = metadata.get("@type")
            if type_ is None:
                ctr = getToolByName(self.context, "content_type_registry")
                type_ = ctr.findTypeName(filename.lower(), content_type,
                                         "") or "File"

            obj = create(self.context, type_)
        else:
            obj = self.context

        if not fieldname:
            info = IPrimaryFieldInfo(obj, None)
            if info is not None:
                fieldname = info.fieldname
            elif base_hasattr(obj, "getPrimaryField"):
                field = obj.getPrimaryField()
                fieldname = field.getName()

        if not fieldname:
            return self.error("Bad Request", "Fieldname required", 400)

        # Acquisition wrap temporarily for deserialization
        temporarily_wrapped = False
        if IAcquirer.providedBy(obj) and not safe_hasattr(obj, "aq_base"):
            obj = obj.__of__(self.context)
            temporarily_wrapped = True

        # Update field with file data
        deserializer = queryMultiAdapter((obj, self.request),
                                         IDeserializeFromJson)
        if deserializer is None:
            return self.error(
                "Not Implemented",
                f"Cannot deserialize type {obj.portal_type}",
                501,
            )
        try:
            deserializer(data={fieldname: tus_upload}, create=mode == "create")
        except DeserializationError as e:
            return self.error("Deserialization Error", str(e), 400)

        if temporarily_wrapped:
            obj = aq_base(obj)

        if mode == "create":
            if not getattr(deserializer, "notifies_create", False):
                notify(ObjectCreatedEvent(obj))
            obj = add(self.context, obj)

        tus_upload.close()
        tus_upload.cleanup()
        self.request.response.setHeader("Location", obj.absolute_url())
Exemplo n.º 13
0
 def create(self, message, manual=False):
     """Store the existing state of the adapted context as a new version.
     """
     context = self.__parent__
     if manual:
         if not self.has_write_permission(context):
             raise Unauthorized
     version = self.domain_model()
     trusted = removeSecurityProxy(context)
     
     # set values on version from context
     self._copyFields(trusted, version)
     
     # content domain ids are typically not in the interfaces
     # manually inspect and look for one, by hand to save on the new version
     mapper = orm.object_mapper(trusted)
     version.content_id = mapper.primary_key_from_instance(trusted)[0]
     version.status = None
     version.manual = manual
     
     # we rely on change handler to attach the change object to the version
     event.notify(
         interfaces.VersionCreated(context, self, version, message))
     
     session = Session()
     session.add(version)
     
     version.context = context
     event.notify(ObjectCreatedEvent(version))
     
     return version
Exemplo n.º 14
0
    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
Exemplo n.º 15
0
    def __call__(self, data):

        for name in self.schema:
            field = self.schema[name]
            if IMethod.providedBy(field):
                continue
            if data.get(name) is None:
                data[name] = self.schema[name].default
        name = data.get('name')
        site = self.context
        # we just wanna have one
        util = component.queryUtility(interfaces.IMemcachedClient,
                                      context=site,
                                      name=name)
        if util is not None:
            return
        # needed to be called TTW
        sm = removeSecurityProxy(site.getSiteManager())
        default = sm['default']
        util = utility.MemcachedClient()
        zope.event.notify(ObjectCreatedEvent(util))
        for attr in ['trackKeys', 'defaultNS', 'servers', 'defaultLifetime']:
            setattr(util, attr, data[attr])
        default[u'memcachedclient_' + name] = util
        sm.registerUtility(util, interfaces.IMemcachedClient, name=name)
Exemplo n.º 16
0
 def createAndAdd(self, data):
     domain_model = self.domain_model
     # create the object, inspect data for constructor args      
     try:  
         ob = createInstance(domain_model, data)
     except TypeError:
         ob = domain_model()
     
     # apply any context values
     self.finishConstruction(ob)
     
     # apply extra form values
     form.applyChanges(ob, self.form_fields, data, self.adapters)
     
     # save the object, id is generated by db on flush
     self.context[""] = ob
     
     # flush so we have database id
     bungeni.alchemist.Session().flush()
     
     # fire an object created event
     notify(ObjectCreatedEvent(ob))
     
     # signal to add form machinery to go to next url
     self._finished_add = True
     
     mapper = orm.object_mapper(ob)
     
     # TODO single primary key (need changes to base container)
     oid = mapper.primary_key_from_instance(ob)
     
     # retrieve the object with location and security information
     return self.context[oid]
Exemplo n.º 17
0
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
Exemplo n.º 18
0
    def create(self, container=None):
        """
        Create content in the given container and return url.
        Uses dexterity_update to set the
        appropriate fields after creation.
        """
        if not self.validate():
            # BBB: do something clever that works with pat-inject
            # at the moment the @@add_something form is not a complete page
            # but just some markup,
            # so we cannot show that one here
            pass
        new = self.get_new_object(container)
        modified, errors = self.update(new)

        if not errors:
            api.portal.show_message(
                _("Item created."),
                request=self.request,
                type="success"
            )
            new.reindexObject()
            notify(ObjectCreatedEvent(new))
        else:
            api.portal.show_message(
                _("There was a problem: %s." % errors),
                request=self.request,
                type="error",
            )

        return new.absolute_url()
Exemplo n.º 19
0
def manage_addImage(context, identifier, title=None, file=None):
    """Add an Image.
    """
    if file is not None:
        validate_image(file)

    filename = None
    if hasattr(file, 'name'):
        filename = os.path.basename(file.name)

    container = context
    if ISilvaFactoryDispatcher.providedBy(container):
        container = container.Destination()

    name_chooser = ISilvaNameChooser(container)
    identifier = name_chooser.chooseName(identifier or filename,
                                         None,
                                         file=file,
                                         interface=interfaces.IAsset)
    try:
        name_chooser.checkName(identifier, None)
    except ContentError as e:
        raise ValueError(
            _(u"Please provide a unique id: ${reason}",
              mapping=dict(reason=e.reason)))
    context._setObject(identifier, Image(identifier))
    content = context._getOb(identifier)
    if title is not None:
        content.set_title(title)
    if file is not None:
        content.set_image(file)
    notify(ObjectCreatedEvent(content))
    return content
Exemplo n.º 20
0
 def __call__(self):
     self.request.response.setHeader(
         'Content-type', 'application/vnd.oasis.opendocument.text')
     self.request.response.setHeader(
         'Content-disposition', 'inline;filename="' +
         removeSecurityProxy(self.report.report_type) + "_" +
         removeSecurityProxy(self.report.start_date).strftime('%Y-%m-%d') +
         '.odt"')
     session = Session()
     report = session.query(domain.Report).get(self.report.report_id)
     d = dict([(f.file_title, f.file_data) for f in report.attached_files])
     if "odt" not in d.keys():
         params = {}
         params['body_text'] = self.cleanupText()
         renderer = Renderer(self.odt_file, params, self.tempFileName)
         renderer.run()
         f = open(self.tempFileName, 'rb')
         doc = f.read()
         f.close()
         os.remove(self.tempFileName)
         attached_file = domain.AttachedFile()
         attached_file.file_title = "odt"
         attached_file.file_data = doc
         attached_file.language = report.language
         report.attached_files.append(attached_file)
         notify(ObjectCreatedEvent(attached_file))
         session.add(report)
         session.commit()
         return doc
     else:
         return d["odt"].__str__()
Exemplo n.º 21
0
 def createAndAdd(self, data):
     domain_model = self.domain_model
     # create the object, inspect data for constructor args
     try:
         ob = createInstance(domain_model, data)
     except TypeError:
         log.error("Failure: createInstance(%s, %s)", domain_model, data)
         probing.log_exc(sys.exc_info(), log_handler=log.error)
         ob = domain_model()
     # apply any context values
     self.finishConstruction(ob)
     # apply extra form values
     formlib.form.applyChanges(ob, self.form_fields, data, self.adapters)
     # set the object in container context, causing autosetting of
     # constrained values e.g. one2many attributes, by triggering call to
     # _ManagedContainer.constraints.setConstrainedValues()
     self.context[""] = ob
     # flush so we have database id
     Session().flush()
     # !+DataError reload form and display this error?
     # fire an object created event
     notify(ObjectCreatedEvent(
         ob))  # !+ would set doc_id (if session not flushed) !!
     # signal to add form machinery to go to next url
     self._finished_add = True
     # retrieve the object with location and security information
     oid = self.get_oid(ob)
     return self.context[oid]
Exemplo n.º 22
0
    def handleAdd(self, action):

        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return

        typeName = self.tileType.__name__

        generator = getUtility(IUUIDGenerator)
        tileId = generator()

        # Traverse to a new tile in the context, with no data
        tile = self.context.restrictedTraverse('@@%s/%s' % (
            typeName,
            tileId,
        ))

        dataManager = ITileDataManager(tile)
        dataManager.set(data)

        # Look up the URL - we need to do this after we've set the data to
        # correctly account for transient tiles
        tileURL = absoluteURL(tile, self.request)

        notify(ObjectCreatedEvent(tile))
        notify(ObjectAddedEvent(tile, self.context, tileId))

        self.request.response.redirect(tileURL)
Exemplo n.º 23
0
def createContent(portal_type, **kw):
    fti = getUtility(IDexterityFTI, name=portal_type)
    content = createObject(fti.factory)

    # Note: The factory may have done this already, but we want to be sure
    # that the created type has the right portal type. It is possible
    # to re-define a type through the web that uses the factory from an
    # existing type, but wants a unique portal_type!
    content.portal_type = fti.getId()
    schemas = iterSchemataForType(portal_type)
    fields = dict(kw)  # create a copy

    for schema in schemas:
        # schema.names() doesn't return attributes from superclasses in derived
        # schemas. therefore we have to iterate over all items from the passed
        # keywords arguments and set it, if the behavior has the questioned
        # attribute.
        behavior = schema(content)
        for name, value in fields.items():
            try:
                # hasattr swallows exceptions.
                getattr(behavior, name)
            except AttributeError:
                # fieldname not available
                continue
            setattr(behavior, name, value)
            del fields[name]

    for (key, value) in fields.items():
        setattr(content, key, value)

    notify(ObjectCreatedEvent(content))
    return content
Exemplo n.º 24
0
 def saveDiscussions(self):
     session = Session()
     new_record_keys = []
     domain_model = removeSecurityProxy(self.context.domain_model)
     for record in self.data:
         discussion_text = record.get("body", "")
         object_id = record.get("object_id", None)
         if object_id:
             current_record = removeSecurityProxy(
                 self.context.get(getItemKey(object_id)))
             current_record.body = discussion_text
             session.add(current_record)
             session.flush()
             notify(ObjectModifiedEvent(current_record))
             new_record_keys.append(stringKey(current_record))
         else:
             new_record = domain_model(body=discussion_text,
                                       language=get_default_language())
             new_record.scheduled_item = removeSecurityProxy(
                 self.context.__parent__)
             session.add(new_record)
             session.flush()
             notify(ObjectCreatedEvent(new_record))
             new_record_keys.append(stringKey(new_record))
     records_to_delete = [
         removeSecurityProxy(self.context.get(key))
         for key in self.context.keys() if key not in new_record_keys
     ]
     map(session.delete, records_to_delete)
     map(lambda deleted: notify(ObjectRemovedEvent(deleted)),
         records_to_delete)
Exemplo n.º 25
0
 def appendSlave(self, msgHeader, nodename=None):
     """
     append oid to slave list
     """
     if nodename:
         if nodename in zapi.getRoot(self):
             newSlaveNode = zapi.getRoot(self)[nodename]
         else:
             #self.oidSlave = msgHeader['from_oid']
             newSlaveNode = createObject(\
                 u"org.ict_ok.slave.slave.Slave")
             ISlave['objectID'].readonly = False
             newSlaveNode.objectID = msgHeader['from_oid']
             ISlave['objectID'].readonly = True
             newSlaveNode.ikName = unicode(nodename)
             notify(ObjectCreatedEvent(newSlaveNode))
             zapi.getRoot(self)[nodename] = newSlaveNode
     slaveSupervisor = zapi.queryUtility(IAdmUtilSupervisor,
                                         context=newSlaveNode)
     if slaveSupervisor:
         #slaveSupervisor.ipv4Master = msgHeader['to_ip']
         #slaveSupervisor.oidMaster = msgHeader['to_oid']
         slaveSupervisor.status2Master = u"connected"
         slaveSupervisor.ipv4Slave = msgHeader['from_ip']
         slaveSupervisor.oidSlave = msgHeader['from_oid']
         slaveSupervisor.lastSeenSlave = datetime.now(berlinTZ)
     self._p_changed = True
     mq_utility = zapi.queryUtility(IAdmUtilObjMQ)
     if mq_utility:
         my_data = {'cmd': 'connected'}
         my_data['header'] = mq_utility.switchFromTo(msgHeader)
         mq_utility.sendPerMq(my_data)
Exemplo n.º 26
0
def manage_addFile(self, id, file='', title='', precondition='',
                   content_type='', REQUEST=None):
    """Add a new File object.

    Creates a new File object 'id' with the contents of 'file'"""

    id = str(id)
    title = str(title)
    content_type = str(content_type)
    precondition = str(precondition)

    id, title = cookId(id, title, file)
    
    self=self.this()

    # First, we create the file without data:
    self._setObject(id, File(id,title,'',content_type, precondition))
    
    newFile = self._getOb(id)
    
    # Now we "upload" the data.  By doing this in two steps, we
    # can use a database trick to make the upload more efficient.
    if file:
        newFile.manage_upload(file)
    if content_type:
        newFile.content_type=content_type
    
    notify(ObjectCreatedEvent(newFile))
    
    if REQUEST is not None:
        REQUEST['RESPONSE'].redirect(self.absolute_url()+'/manage_main')
Exemplo n.º 27
0
    def handle_publish(self, action, data):
        self.generated_content = self.generateContent(data)
        if IWorkspaceScheduling.providedBy(self.request):
            if not hasattr(self.context, "group_id"):
                context_group_id = ISchedulingContext(self.context).group_id
            else:
                context_group_id = self.context.group_id
        else:
            #get the chamber id
            context_group_id = get_chamber_for_context(
                self.context).parliament_id
        report = domain.Report(
            title=self.title,
            start_date=self.start_date,
            end_date=self.end_date,
            body=self.generated_content,
            owner_id=get_login_user().user_id,  # !+GROUP_AS_OWNER
            language=self.language,
            group_id=context_group_id)
        session = Session()
        session.add(report)
        session.flush()
        notify(ObjectCreatedEvent(report))
        self.status = _(u"Report has been processed and saved")

        return self.template()
Exemplo n.º 28
0
    def __call__(self):
        self.request.response.setHeader("Content-type", "application/pdf")
        self.request.response.setHeader(
            "Content-disposition", 'inline;filename="' +
            removeSecurityProxy(self.report.report_type) + "_" +
            removeSecurityProxy(self.report.start_date).strftime("%Y-%m-%d") +
            '.pdf"')

        session = Session()
        report = session.query(domain.Report).get(self.report.report_id)
        d = dict([(f.file_title, f.file_data) for f in report.attached_files])
        if "pdf" not in d.keys():
            params = {}
            params["body_text"] = self.cleanupText()
            openofficepath = getUtility(IOpenOfficeConfig).getPath()
            renderer = Renderer(self.odt_file,
                                params,
                                self.tempFileName,
                                pythonWithUnoPath=openofficepath)
            renderer.run()
            f = open(self.tempFileName, "rb")
            doc = f.read()
            f.close()
            os.remove(self.tempFileName)
            attached_file = domain.AttachedFile()
            attached_file.file_title = "pdf"
            attached_file.file_data = doc
            attached_file.language = report.language
            report.attached_files.append(attached_file)
            notify(ObjectCreatedEvent(attached_file))
            session.add(report)
            session.commit()
            return doc
        else:
            return d["pdf"].__str__()
Exemplo n.º 29
0
    def action(self, type_name='', id=''):
        if not type_name:
            raise UserError(_(u"You must select the type of object to add."))

        if type_name.startswith('@@'):
            type_name = type_name[2:]

        if '/' in type_name:
            view_name = type_name.split('/', 1)[0]
        else:
            view_name = type_name

        if queryMultiAdapter((self, self.request), name=view_name) is not None:
            url = "%s/%s=%s" % (absoluteURL(self, self.request), type_name, id)
            self.request.response.redirect(url)
            return

        if not self.contentName:
            self.contentName = id

        factory = getUtility(IFactory, type_name)
        content = factory()

        notify(ObjectCreatedEvent(content))

        self.add(content)
        self.request.response.redirect(self.nextURL())
Exemplo n.º 30
0
def check_required_utilities(site, utilities):
    """Utility function to check for required utilities

    :param ISite site: the site manager into which configuration may be checked
    :param tuple utilities: each element of the tuple is another tuple made of the utility
        interface, the utility registration name, the utility factory and the object name when
        creating the utility, as in:

    .. code-block:: python

        REQUIRED_UTILITIES = ((ISecurityManager, '', SecurityManager, 'Security manager'),
                              (IPrincipalAnnotationUtility, '', PrincipalAnnotationUtility,
                               'User profiles'))
    """
    registry = get_current_registry()
    for interface, name, factory, default_id in utilities:
        utility = query_utility(interface, name=name)
        if utility is None:
            lsm = site.getSiteManager()
            if default_id in lsm:
                continue
            if factory is None:
                factory = get_object_factory(interface)
            utility = factory()
            registry.notify(ObjectCreatedEvent(utility))
            lsm[default_id] = utility
            lsm.registerUtility(utility, interface, name=name)