コード例 #1
0
ファイル: test_fti.py プロジェクト: vedantc98/Plone-test
    def test_components_unregistered_on_delete(self):
        portal_type = u"testtype"
        fti = DexterityFTI(portal_type)
        container_dummy = self.create_dummy()

        # Mock the lookup of the site and the site manager at the site root
        dummy_site = self.create_dummy()
        self.mock_utility(dummy_site, ISiteRoot)

        site_manager_mock = Mock(wraps=PersistentComponents(
            bases=(getGlobalSiteManager(), )))
        from zope.component.hooks import getSiteManager
        self.patch_global(getSiteManager, return_value=site_manager_mock)

        # First add the components
        ftiAdded(fti, ObjectAddedEvent(fti, container_dummy, fti.getId()))

        # Then remove them again
        ftiRemoved(fti, ObjectRemovedEvent(fti, container_dummy, fti.getId()))

        site_dummy = self.create_dummy(
            getSiteManager=lambda: site_manager_mock)
        setSite(site_dummy)
        setHooks()

        self.assertEqual(None, queryUtility(IDexterityFTI, name=portal_type))
        self.assertEqual(None, queryUtility(IFactory, name=portal_type))
コード例 #2
0
    def create_attachment(self, mail, part):
        ''' Create an attachment for this mail
        '''
        cid = part['Content-Id']
        file_name = part.get_filename() or cid
        content_type = part.get_content_type()
        payload = part.get_payload(decode=True)

        type_name = self.registry.findTypeName(file_name, content_type,
                                               payload) or 'File'

        obj = api.content.create(
            type=type_name,
            title=file_name,
            container=mail,
        )
        if type_name == 'File':
            obj.file = NamedBlobFile(data=payload, filename=unicode(file_name))
        elif type_name == 'Image':
            obj.image = NamedBlobImage(data=payload,
                                       filename=unicode(file_name))
        else:
            primary = utils.get_primary_field(obj)
            if primary:
                primary[1].set(obj, payload)
            else:
                log.warning('Discarding paylod for %s', obj.UID())

        obj.setSubject(self.mailin_keyworkds)
        event.notify(ObjectAddedEvent(obj))
        return obj
コード例 #3
0
ファイル: test_fti.py プロジェクト: vedantc98/Plone-test
    def test_components_not_registered_on_add_if_exist(self):
        portal_type = u"testtype"
        fti = DexterityFTI(portal_type)
        container_dummy = self.create_dummy()

        # Mock the lookup of the site and the site manager at the site root
        dummy_site = self.create_dummy()
        self.mock_utility(dummy_site, ISiteRoot)

        site_manager_mock = Mock(wraps=PersistentComponents(
            bases=(getGlobalSiteManager(), )))
        from zope.component.hooks import getSiteManager
        self.patch_global(getSiteManager, return_value=site_manager_mock)

        # Register FTI utility and factory utility

        self.mock_utility(fti, IDexterityFTI, name=portal_type)
        self.mock_utility(DexterityFactory(portal_type),
                          IFactory,
                          name=portal_type)

        # We expect that all components are registered, so do not expect any
        # registrations

        ftiAdded(fti, ObjectAddedEvent(fti, container_dummy, fti.getId()))

        self.assertFalse(site_manager_mock.registerUtility.called)
コード例 #4
0
ファイル: test_fti.py プロジェクト: vedantc98/Plone-test
    def test_components_registered_on_add(self):
        portal_type = u"testtype"
        fti = DexterityFTI(portal_type)
        container_dummy = self.create_dummy()

        # Mock the lookup of the site and the site manager at the site root
        dummy_site = self.create_dummy()
        self.mock_utility(dummy_site, ISiteRoot)

        site_manager_mock = Mock(wraps=PersistentComponents(
            bases=(getGlobalSiteManager(), )))
        from zope.component.hooks import getSiteManager
        self.patch_global(getSiteManager, return_value=site_manager_mock)

        ftiAdded(fti, ObjectAddedEvent(fti, container_dummy, fti.getId()))

        args1, kwargs1 = site_manager_mock.registerUtility.call_args_list[0]
        self.assertEqual(args1, (fti, IDexterityFTI, portal_type))
        self.assertEqual(kwargs1, {'info': 'plone.dexterity.dynamic'})

        args2, kwargs2 = site_manager_mock.registerUtility.call_args_list[1]
        self.assertIsInstance(args2[0], DexterityFactory)
        self.assertEqual(args2[0].portal_type, portal_type)
        self.assertEqual(args2[1:], (IFactory, portal_type))
        self.assertEqual(kwargs2, {'info': 'plone.dexterity.dynamic'})

        site_dummy = self.create_dummy(
            getSiteManager=lambda: site_manager_mock)
        setSite(site_dummy)
        setHooks()

        self.assertNotEquals(None, queryUtility(IDexterityFTI,
                                                name=portal_type))
        self.assertNotEquals(None, queryUtility(IFactory, name=portal_type))
コード例 #5
0
ファイル: utils.py プロジェクト: tuxwerk/plone.restapi
def add(container, obj, rename=True):
    """Add an object to a container."""
    id_ = getattr(aq_base(obj), "id", None)

    # Archetypes objects are already created in a container thus we just fire
    # the notification events and rename the object if necessary.
    if base_hasattr(obj, "_at_rename_after_creation"):
        notify(ObjectAddedEvent(obj, container, id_))
        notifyContainerModified(container)
        if obj._at_rename_after_creation and rename:
            obj._renameAfterCreation(check_auto_id=True)
        return obj
    else:
        if rename:
            chooser = INameChooser(container)
            # INameFromTitle adaptable objects should not get a name
            # suggestion. NameChooser would prefer the given name instead of
            # the one provided by the INameFromTitle adapter.
            suggestion = None
            name_from_title = INameFromTitle(obj, None)
            if name_from_title is None:
                suggestion = obj.Title()
            id_ = chooser.chooseName(suggestion, obj)
            obj.id = id_
        new_id = container._setObject(id_, obj)
        # _setObject triggers ObjectAddedEvent which can end up triggering a
        # content rule to move the item to a different container. In this case
        # look up the object by UUID.
        try:
            return container._getOb(new_id)
        except AttributeError:
            uuid = IUUID(obj)
            return uuidToObject(uuid)
コード例 #6
0
ファイル: adapters.py プロジェクト: lukasgraf/opengever.core
 def add(self, item):
     if not IResponse.providedBy(item):
         raise UnaddableError(self, item,
                              "IResponse interface not provided.")
     self.append(item)
     id = str(len(self))
     event = ObjectAddedEvent(item, newParent=self.context, newName=id)
     notify(event)
コード例 #7
0
    def addRelation(self, obj):
        """Override base to run manage_afterAdd like ObjectManager"""
        if self._objects.has_key(obj.getId()):
            log.debug("obj %s already exists on %s", obj.getPrimaryId(),
                      self.getPrimaryId())

        notify(ObjectWillBeAddedEvent(obj, self, obj.getId()))
        ToManyRelationshipBase.addRelation(self, obj)
        obj = obj.__of__(self)
        o = self._getOb(obj.id)
        notify(ObjectAddedEvent(o, self, obj.getId()))
コード例 #8
0
 def _setObject(self, id, object, suppress_events=False):
     if not suppress_events:
         notify(ObjectWillBeAddedEvent(object, self, id))
     self._setOb(id, object)
     object = self._getOb(id)
     if hasattr(aq_base(object), 'manage_afterAdd'):
         object.manage_afterAdd(object, self)
     if not suppress_events:
         notify(ObjectAddedEvent(object, self, id))
         notifyContainerModified(self)
     return object
コード例 #9
0
ファイル: test_fti.py プロジェクト: polyester/plone.dexterity
    def test_components_registered_on_add(self):
        portal_type = 'testtype'
        fti = DexterityFTI(portal_type)
        container_dummy = self.create_dummy()

        # Mock the lookup of the site and the site manager at the site root
        dummy_site = self.create_dummy()
        self.mock_utility(dummy_site, Interface)

        site_manager_mock = self.mocker.proxy(
            PersistentComponents(bases=(getGlobalSiteManager(), )))
        getSiteManager_mock = self.mocker.replace(
            'zope.component.hooks.getSiteManager')
        self.expect(getSiteManager_mock(dummy_site)).result(site_manager_mock)

        # We expect that no components are registered , so look for all
        # registrations
        self.expect(
            site_manager_mock.registerUtility(
                fti,
                IDexterityFTI,
                portal_type,
                info='plone.dexterity.dynamic')).passthrough()
        self.expect(
            site_manager_mock.registerUtility(
                mocker.MATCH(lambda x: isinstance(x, DexterityFactory) and x.
                             portal_type == portal_type),
                IFactory,
                portal_type,
                info='plone.dexterity.dynamic')).passthrough()

        self.replay()

        ftiAdded(fti, ObjectAddedEvent(fti, container_dummy, fti.getId()))

        site_dummy = self.create_dummy(
            getSiteManager=lambda: site_manager_mock)
        setSite(site_dummy)
        setHooks()

        self.assertNotEquals(None, queryUtility(IDexterityFTI,
                                                name=portal_type))
        self.assertNotEquals(None, queryUtility(IFactory, name=portal_type))
コード例 #10
0
ファイル: utils.py プロジェクト: kevuhlig/plone.restapi
def add(container, obj):
    """Add an object to a container."""
    id_ = obj.getId()
    # Archetypes objects are already created in a container thus we just fire
    # the notification events.
    if aq_base(container) is aq_base(aq_parent(obj)):
        notify(ObjectAddedEvent(obj, container, id_))
        notifyContainerModified(container)
        return obj
    else:
        new_id = container._setObject(id_, obj)
        # _setObject triggers ObjectAddedEvent which can end up triggering a
        # content rule to move the item to a different container. In this case
        # look up the object by UUID.
        try:
            return container._getOb(new_id)
        except AttributeError:
            uuid = IUUID(obj)
            return uuidToObject(uuid)
コード例 #11
0
ファイル: test_fti.py プロジェクト: polyester/plone.dexterity
    def test_components_unregistered_on_delete(self):
        portal_type = 'testtype'
        fti = DexterityFTI(portal_type)
        container_dummy = self.create_dummy()

        # Mock the lookup of the site and the site manager at the site root
        dummy_site = self.create_dummy()
        self.mock_utility(dummy_site, Interface)

        site_manager_mock = self.mocker.proxy(
            PersistentComponents(bases=(getGlobalSiteManager(), )))
        getSiteManager_mock = self.mocker.replace(
            'zope.component.hooks.getSiteManager')
        self.expect(
            getSiteManager_mock(dummy_site)).result(site_manager_mock).count(
                1, None)

        # We expect to always be able to unregister without error, even if the
        # components do not exists (as here)

        self.expect(
            site_manager_mock.unregisterUtility(
                provided=IDexterityFTI, name=portal_type)).passthrough()
        self.expect(
            site_manager_mock.unregisterUtility(
                provided=IFactory, name=portal_type)).passthrough()

        self.replay()

        # First add the components
        ftiAdded(fti, ObjectAddedEvent(fti, container_dummy, fti.getId()))

        # Then remove them again
        ftiRemoved(fti, ObjectRemovedEvent(fti, container_dummy, fti.getId()))

        site_dummy = self.create_dummy(
            getSiteManager=lambda: site_manager_mock)
        setSite(site_dummy)
        setHooks()

        self.assertEqual(None, queryUtility(IDexterityFTI, name=portal_type))
        self.assertEqual(None, queryUtility(IFactory, name=portal_type))
コード例 #12
0
ファイル: TypesTool.py プロジェクト: c0ns0le/zenoss-4
    def _constructInstance(self, container, id, *args, **kw):
        """Build a bare instance of the appropriate type.

        Does not do any security checks.
        """
        constructor = self.restrictedTraverse(self.constructor_path)

        # make sure ownership is explicit before switching the context
        if not hasattr(aq_base(constructor), '_owner'):
            constructor._owner = aq_get(constructor, '_owner')
        #   Rewrap to get into container's context.
        constructor = aq_base(constructor).__of__(container)

        id = str(id)
        obj = constructor(container, id, *args, **kw)
        if hasattr(obj, '_setPortalTypeName'):
            obj._setPortalTypeName(self.getId())
        notify(ObjectAddedEvent(obj, container, obj.getId()))
        notifyContainerModified(container)
        return obj
コード例 #13
0
    def _constructInstance(self, container, id, *args, **kw):
        """Build a bare instance of the appropriate type.

        Does not do any security checks.
        """
        id = str(id)

        if self.product:
            # oldstyle factory
            m = self._getFactoryMethod(container, check_security=0)

            if getattr(aq_base(m), 'isDocTemp', 0):
                kw['id'] = id
                request = aq_get(self, 'REQUEST', None)
                if request is None:
                    request = getRequest()
                newid = m(m.aq_parent, request, *args, **kw)
            else:
                newid = m(id, *args, **kw)
            # allow factory to munge ID
            newid = newid or id
            obj = container._getOb(newid)
            if hasattr(obj, '_setPortalTypeName'):
                obj._setPortalTypeName(self.getId())
            notify(ObjectCreatedEvent(obj))
            notify(ObjectAddedEvent(obj, container, newid))
            notifyContainerModified(container)

        else:
            # newstyle factory
            factory = getUtility(IFactory, self.factory)
            obj = factory(id, *args, **kw)
            if hasattr(obj, '_setPortalTypeName'):
                obj._setPortalTypeName(self.getId())
            notify(ObjectCreatedEvent(obj))
            rval = container._setObject(id, obj)
            newid = isinstance(rval, six.string_types) and rval or id
            obj = container._getOb(newid)

        return obj
コード例 #14
0
ファイル: TypesTool.py プロジェクト: c0ns0le/zenoss-4
    def _constructInstance(self, container, id, *args, **kw):
        """Build a bare instance of the appropriate type.

        Does not do any security checks.
        """
        # XXX: this method violates the rules for tools/utilities:
        # it depends on self.REQUEST
        id = str(id)

        if self.product:
            # oldstyle factory
            m = self._getFactoryMethod(container, check_security=0)

            if getattr(aq_base(m), 'isDocTemp', 0):
                kw['id'] = id
                newid = m(m.aq_parent, self.REQUEST, *args, **kw)
            else:
                newid = m(id, *args, **kw)
            # allow factory to munge ID
            newid = newid or id
            obj = container._getOb(newid)
            if hasattr(obj, '_setPortalTypeName'):
                obj._setPortalTypeName(self.getId())
            notify(ObjectCreatedEvent(obj))
            notify(ObjectAddedEvent(obj, container, newid))
            notifyContainerModified(container)

        else:
            # newstyle factory
            factory = getUtility(IFactory, self.factory)
            obj = factory(id, *args, **kw)
            if hasattr(obj, '_setPortalTypeName'):
                obj._setPortalTypeName(self.getId())
            notify(ObjectCreatedEvent(obj))
            rval = container._setObject(id, obj)
            newid = isinstance(rval, basestring) and rval or id
            obj = container._getOb(newid)

        return obj
コード例 #15
0
ファイル: test_fti.py プロジェクト: polyester/plone.dexterity
    def test_components_not_registered_on_add_if_exist(self):
        portal_type = 'testtype'
        fti = DexterityFTI(portal_type)
        container_dummy = self.create_dummy()

        # Mock the lookup of the site and the site manager at the site root
        dummy_site = self.create_dummy()
        self.mock_utility(dummy_site, Interface)

        site_manager_mock = self.mocker.proxy(
            PersistentComponents(bases=(getGlobalSiteManager(), )))
        getSiteManager_mock = self.mocker.replace(
            'zope.component.hooks.getSiteManager')
        self.expect(getSiteManager_mock(dummy_site)).result(site_manager_mock)

        # Register FTI utility and factory utility

        self.mock_utility(fti, IDexterityFTI, name=portal_type)
        self.mock_utility(DexterityFactory(portal_type),
                          IFactory,
                          name=portal_type)

        # We expect that all components are registered, so do not expect any
        # registrations

        self.expect(
            site_manager_mock.registerUtility(
                fti, IDexterityFTI, portal_type)).passthrough().count(0)
        self.expect(
            site_manager_mock.registerUtility(
                mocker.MATCH(lambda x: isinstance(x, DexterityFactory) and x.
                             portal_type == portal_type), IFactory,
                portal_type)).passthrough().count(0)

        self.replay()

        ftiAdded(fti, ObjectAddedEvent(fti, container_dummy, fti.getId()))
コード例 #16
0
 def add(self, item):
     self.append(item)
     id = str(len(self))
     event = ObjectAddedEvent(item, newParent=self.context, newName=id)
     notify(event)
コード例 #17
0
 def _notify(self, status):
     event = ObjectAddedEvent(status, newParent=self, newName=status.id)
     notify(event)