コード例 #1
0
    def test_get_interfaces(self):
        fti_mock = Mock(spec=DexterityFTI)
        fti_mock.lookupSchema = Mock(return_value=IDummy)
        self.mock_utility(fti_mock, IDexterityFTI, name=u"testtype")

        factory = DexterityFactory(portal_type=u"testtype")
        spec = factory.getInterfaces()

        self.assertEqual(u"testtype", spec.__name__)
        self.assertEqual([IDummy, Interface], list(spec.flattened()))
コード例 #2
0
ファイル: test_factory.py プロジェクト: eea/plone.dexterity
    def test_get_interfaces(self):
        fti_mock = Mock(spec=DexterityFTI)
        fti_mock.lookupSchema = Mock(return_value=IDummy)
        self.mock_utility(fti_mock, IDexterityFTI, name=u"testtype")

        factory = DexterityFactory(portal_type=u"testtype")
        spec = factory.getInterfaces()

        self.assertEqual(u"testtype", spec.__name__)
        self.assertEqual([IDummy, Interface], list(spec.flattened()))
コード例 #3
0
ファイル: test_factory.py プロジェクト: MWatHIT/emc_project
    def test_get_interfaces(self):
        fti_mock = self.mocker.mock(DexterityFTI)
        self.expect(fti_mock.lookupSchema()).result(IDummy)
        self.mock_utility(fti_mock, IDexterityFTI, name=u"testtype")

        self.replay()

        factory = DexterityFactory(portal_type=u"testtype")
        spec = factory.getInterfaces()

        self.assertEqual(u"testtype", spec.__name__)
        self.assertEqual([IDummy, Interface], list(spec.flattened()))
コード例 #4
0
    def test_get_interfaces(self):
        fti_mock = self.mocker.mock(DexterityFTI)
        self.expect(fti_mock.lookupSchema()).result(IDummy)
        self.mock_utility(fti_mock, IDexterityFTI, name=u"testtype")

        self.replay()

        factory = DexterityFactory(portal_type=u"testtype")
        spec = factory.getInterfaces()

        self.assertEqual(u"testtype", spec.__name__)
        self.assertEqual([IDummy, Interface], list(spec.flattened()))
コード例 #5
0
def register(fti):
    """Helper method to:

         - register an FTI as a local utility
         - register a local factory utility
         - register an add view
    """

    site_manager = getGlobalSiteManager()

    portal_type = fti.getId()

    fti_utility = queryUtility(IDexterityFTI, name=portal_type)
    if fti_utility is None:
        site_manager.registerUtility(fti,
                                     IDexterityFTI,
                                     portal_type,
                                     info='plone.dexterity.dynamic')

    factory_utility = queryUtility(IFactory, name=fti.factory)
    if factory_utility is None:
        site_manager.registerUtility(DexterityFactory(portal_type),
                                     IFactory,
                                     fti.factory,
                                     info='plone.dexterity.dynamic')
コード例 #6
0
ファイル: test_fti.py プロジェクト: vedantc98/Plone-test
    def test_new_factory_not_registered_after_name_changed_if_exists(self):
        portal_type = u"testtype"
        fti = DexterityFTI(portal_type)

        # 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)

        # Create a global default for the new name
        self.mock_utility(DexterityFactory(portal_type),
                          IFactory,
                          name='new-factory')

        fti.factory = 'new-factory'
        ftiModified(
            fti,
            ObjectModifiedEvent(
                fti,
                DexterityFTIModificationDescription('factory', 'old-factory')))

        # Factory should not be registered again
        self.assertFalse(site_manager_mock.registerUtility.called)
コード例 #7
0
ファイル: test_fti.py プロジェクト: vedantc98/Plone-test
    def test_global_components_not_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)

        # 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 to always be able to unregister without error, even if the
        # component exists. The factory is only unregistered if it was
        # registered with info='plone.dexterity.dynamic'.

        ftiRemoved(fti, ObjectRemovedEvent(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))
コード例 #8
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)
コード例 #9
0
ファイル: upgrades.py プロジェクト: BB-Open/pkan_dcatapde
def remove_defaultfactories(context):
    """
    Remove Custom DefaultFactories because they are not used.
    Add Dexterity DefaultFactory instead
    :param context:
    :return:
    """
    site = queryUtility(ISiteRoot)
    if site is None:
        return

    sm = getSiteManager(site)
    names = DCAT_CTs + [CT_HARVESTER, CT_HARVESTER_FOLDER]
    for name in names:

        sm.unregisterUtility(name=name, provided=IDexterityFactory)

        fti = getUtility(IDexterityFTI, name=name)

        factory_utility = queryUtility(IFactory, name=fti.factory)
        if factory_utility is None:
            sm.registerUtility(
                DexterityFactory(name),
                IFactory,
                fti.factory,
                info='plone.dexterity.dynamic',
            )
    transaction.commit()
コード例 #10
0
ファイル: test_factory.py プロジェクト: MWatHIT/emc_project
    def test_create_sets_portal_type_if_not_set(self):

        # Object returned by class
        obj_mock = self.mocker.mock()
        self.expect(obj_mock.portal_type).throw(
            AttributeError)  # -> need to set portal_type

        obj_mock.portal_type = u"testtype"

        # Class set by factory
        klass_mock = self.mocker.mock()
        self.expect(klass_mock()).result(obj_mock)

        # Resolver
        resolver_mock = self.mocker.replace(
            "plone.dexterity.utils.resolveDottedName")
        self.expect(
            resolver_mock("my.mocked.ContentTypeClass")).result(klass_mock)

        # FTI
        fti_mock = self.mocker.mock(DexterityFTI)
        self.expect(fti_mock.klass).result("my.mocked.ContentTypeClass")
        self.mock_utility(fti_mock, IDexterityFTI, name=u"testtype")

        self.replay()

        factory = DexterityFactory(portal_type=u"testtype")
        self.assertEqual(obj_mock, factory())
コード例 #11
0
    def test_create_sets_portal_type_if_wrong(self):

        # Object returned by class
        obj_mock = self.mocker.mock()
        self.expect(obj_mock.portal_type).result(
            'othertype')  # -> need to fix portal_type
        obj_mock.portal_type = 'testtype'

        # Class set by factory
        klass_mock = self.mocker.mock()
        self.expect(klass_mock()).result(obj_mock)

        # Resolver
        resolver_mock = self.mocker.replace(
            'plone.dexterity.utils.resolveDottedName')
        self.expect(
            resolver_mock('my.mocked.ContentTypeClass')).result(klass_mock)

        # FTI
        fti_mock = self.mocker.mock(DexterityFTI)
        self.expect(fti_mock.klass).result('my.mocked.ContentTypeClass')
        self.mock_utility(fti_mock, IDexterityFTI, name='testtype')

        self.replay()

        factory = DexterityFactory(portal_type='testtype')
        self.assertEqual(obj_mock, factory())
コード例 #12
0
ファイル: test_factory.py プロジェクト: MWatHIT/emc_project
    def test_factory_passes_args_and_kwargs(self):

        # Object returned by class
        obj_mock = self.mocker.mock()
        self.expect(obj_mock.portal_type).result(u"testtype")

        # Class set by factory
        klass_mock = self.mocker.mock()
        self.expect(klass_mock(u"id", title=u"title")).result(obj_mock)

        # Resolver
        resolver_mock = self.mocker.replace(
            "plone.dexterity.utils.resolveDottedName")
        self.expect(
            resolver_mock("my.mocked.ContentTypeClass")).result(klass_mock)

        # FTI
        fti_mock = self.mocker.mock(DexterityFTI)
        self.expect(fti_mock.klass).result("my.mocked.ContentTypeClass")
        self.mock_utility(fti_mock, IDexterityFTI, name=u"testtype")

        self.replay()

        factory = DexterityFactory(portal_type=u"testtype")
        self.assertEqual(obj_mock, factory(u"id", title=u"title"))
コード例 #13
0
ファイル: test_factory.py プロジェクト: MWatHIT/emc_project
    def test_create_with_schema_already_provided_and_portal_type_set(self):

        # Object returned by class
        obj_mock = self.mocker.mock()
        self.expect(obj_mock.portal_type).result(u"testtype")

        # Class set by factory
        klass_mock = self.mocker.mock()
        self.expect(klass_mock()).result(obj_mock)

        # Resolver
        resolver_mock = self.mocker.replace(
            "plone.dexterity.utils.resolveDottedName")
        self.expect(
            resolver_mock("my.mocked.ContentTypeClass")).result(klass_mock)

        # FTI
        fti_mock = self.mocker.mock(DexterityFTI)
        self.expect(fti_mock.klass).result("my.mocked.ContentTypeClass")
        self.mock_utility(fti_mock, IDexterityFTI, name=u"testtype")

        self.replay()

        factory = DexterityFactory(portal_type=u"testtype")
        self.assertEqual(obj_mock, factory())
コード例 #14
0
    def test_create_initialises_schema_if_not_provided(self):

        # Object returned by class
        obj_mock = self.mocker.mock()
        self.expect(obj_mock.portal_type).result('testtype')

        # Class set by factory
        klass_mock = self.mocker.mock()
        self.expect(klass_mock()).result(obj_mock)

        # Resolver
        resolver_mock = self.mocker.replace(
            'plone.dexterity.utils.resolveDottedName')
        self.expect(
            resolver_mock('my.mocked.ContentTypeClass')).result(klass_mock)

        # FTI
        fti_mock = self.mocker.mock(DexterityFTI)
        self.expect(fti_mock.klass).result('my.mocked.ContentTypeClass')
        self.mock_utility(fti_mock, IDexterityFTI, name='testtype')

        self.replay()

        factory = DexterityFactory(portal_type='testtype')
        self.assertEqual(obj_mock, factory())
コード例 #15
0
ファイル: fti.py プロジェクト: toutpt/plone.dexterity
def register(fti):
    """Helper method to:
    
         - register an FTI as a local utility
         - register a local factory utility
         - register an add view
    """

    fti = aq_base(fti)  # remove acquisition wrapper
    site = getUtility(ISiteRoot)
    site_manager = getSiteManager(site)

    portal_type = fti.getId()

    fti_utility = queryUtility(IDexterityFTI, name=portal_type)
    if fti_utility is None:
        site_manager.registerUtility(fti,
                                     IDexterityFTI,
                                     portal_type,
                                     info='plone.dexterity.dynamic')

    factory_utility = queryUtility(IFactory, name=fti.factory)
    if factory_utility is None:
        site_manager.registerUtility(DexterityFactory(portal_type),
                                     IFactory,
                                     fti.factory,
                                     info='plone.dexterity.dynamic')
コード例 #16
0
def ftiModified(object, event):
    """When an FTI is modified, re-sync and invalidate the schema, if
    necessary.
    """

    if not IDexterityFTI.providedBy(event.object):
        return

    fti = event.object
    portal_type = fti.getId()

    mod = {}
    for desc in event.descriptions:
        if IDexterityFTIModificationDescription.providedBy(desc):
            mod[desc.attribute] = desc.oldValue

    # If the factory utility name was modified, we may get an orphan if one
    # was registered as a local utility to begin with. If so, remove the
    # orphan.

    if 'factory' in mod:
        old_factory = mod['factory']

        site_manager = getGlobalSiteManager()

        # Remove previously registered factory, if no other type uses it.
        unregister_factory(old_factory, site_manager)

        # Register a new local factory if one doesn't exist already
        new_factory_utility = queryUtility(IFactory, name=fti.factory)
        if new_factory_utility is None:
            site_manager.registerUtility(DexterityFactory(portal_type),
                                         IFactory,
                                         fti.factory,
                                         info='plone.dexterity.dynamic')

    # Determine if we need to invalidate the schema at all
    if 'behaviors' in mod \
       or 'schema' in mod \
       or 'model_source' in mod \
       or 'model_file' in mod \
       or 'schema_policy' in mod:

        # Determine if we need to re-sync a dynamic schema
        if ((fti.model_source or fti.model_file)
                and ('model_source' in mod or 'model_file' in mod
                     or 'schema_policy' in mod)):

            schemaName = portalTypeToSchemaName(portal_type)
            schema = getattr(plone.dexterity.schema.generated, schemaName)

            model = fti.lookupModel()
            sync_bases = 'schema_policy' in mod
            syncSchema(model.schema,
                       schema,
                       overwrite=True,
                       sync_bases=sync_bases)

        notify(SchemaInvalidatedEvent(portal_type))
コード例 #17
0
    def test_title(self):
        fti_mock = self.mocker.mock(DexterityFTI)
        self.expect(fti_mock.title).result('Mock type')
        self.mock_utility(fti_mock, IDexterityFTI, name='testtype')

        self.replay()

        factory = DexterityFactory(portal_type='testtype')
        self.assertEqual('Mock type', factory.title)
コード例 #18
0
ファイル: test_factory.py プロジェクト: MWatHIT/emc_project
    def test_description(self):
        fti_mock = self.mocker.mock(DexterityFTI)
        self.expect(fti_mock.description).result("Mock type description")
        self.mock_utility(fti_mock, IDexterityFTI, name=u"testtype")

        self.replay()

        factory = DexterityFactory(portal_type=u"testtype")
        self.assertEqual("Mock type description", factory.description)
コード例 #19
0
ファイル: test_factory.py プロジェクト: eea/plone.dexterity
    def test_create_with_schema_already_provided_and_portal_type_set(self):

        # Object returned by class
        obj_mock = Mock(portal_type=u'testtype')

        # Class set by factory
        klass_mock = Mock(return_value=obj_mock)

        # Resolver
        from plone.dexterity.utils import resolveDottedName
        self.patch_global(resolveDottedName, return_value=klass_mock)

        # FTI
        fti_mock = Mock(spec=DexterityFTI, klass='my.mocked.ContentTypeClass')
        self.mock_utility(fti_mock, IDexterityFTI, name=u"testtype")

        factory = DexterityFactory(portal_type=u"testtype")
        self.assertEqual(obj_mock, factory())
コード例 #20
0
ファイル: test_fti.py プロジェクト: polyester/plone.dexterity
    def test_global_components_not_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)

        # 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 to always be able to unregister without error, even if the
        # component exists. The factory is only unregistered if it was
        # registered with info='plone.dexterity.dynamic'.

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

        self.replay()

        ftiRemoved(fti, ObjectRemovedEvent(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))
コード例 #21
0
ファイル: test_factory.py プロジェクト: eea/plone.dexterity
    def test_create_sets_portal_type_if_wrong(self):

        # Object returned by class
        obj_mock = Mock(portal_type='othertype')

        # Class set by factory
        klass_mock = Mock(return_value=obj_mock)

        # Resolver
        from plone.dexterity.utils import resolveDottedName
        self.patch_global(resolveDottedName, return_value=klass_mock)

        # FTI
        fti_mock = Mock(spec=DexterityFTI)
        fti_mock.klass = "my.mocked.ContentTypeClass"
        self.mock_utility(fti_mock, IDexterityFTI, name=u"testtype")

        factory = DexterityFactory(portal_type=u"testtype")
        self.assertEqual(obj_mock, factory())
        self.assertEqual(obj_mock.portal_type, u'testtype')
コード例 #22
0
ファイル: test_factory.py プロジェクト: eea/plone.dexterity
    def test_factory_passes_args_and_kwargs(self):

        # Object returned by class
        obj_mock = Mock(portal_type=u'testtype')

        # Class set by factory
        klass_mock = Mock(return_value=obj_mock)

        # Resolver
        from plone.dexterity.utils import resolveDottedName
        self.patch_global(resolveDottedName, return_value=klass_mock)

        # FTI
        fti_mock = Mock(spec=DexterityFTI)
        fti_mock.klass = "my.mocked.ContentTypeClass"
        self.mock_utility(fti_mock, IDexterityFTI, name=u"testtype")

        factory = DexterityFactory(portal_type=u"testtype")
        self.assertEqual(obj_mock, factory(u"id", title=u"title"))
        klass_mock.assert_called_once_with(u'id', title=u'title')
コード例 #23
0
ファイル: test_fti.py プロジェクト: polyester/plone.dexterity
    def test_new_factory_not_registered_after_name_changed_if_exists(self):
        portal_type = 'testtype'
        fti = DexterityFTI(portal_type)

        # 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)

        # Create a global default for the new name
        self.mock_utility(DexterityFactory(portal_type),
                          IFactory,
                          name='new-factory')

        # Factory should not be registered again
        self.expect(
            site_manager_mock.registerUtility(
                mocker.MATCH(lambda x: isinstance(x, DexterityFactory) and x.
                             portal_type == portal_type),
                IFactory,
                'new-factory',
                info='plone.dexterity.dynamic')).passthrough().count(0)

        self.replay()
        fti.factory = 'new-factory'
        ftiModified(
            fti,
            ObjectModifiedEvent(
                fti,
                DexterityFTIModificationDescription('factory', 'old-factory')))
コード例 #24
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()))
コード例 #25
0
ファイル: test_factory.py プロジェクト: eea/plone.dexterity
    def test_description(self):
        fti_mock = Mock(spec=DexterityFTI, description='Mock type description')
        self.mock_utility(fti_mock, IDexterityFTI, name=u"testtype")

        factory = DexterityFactory(portal_type=u"testtype")
        self.assertEqual("Mock type description", factory.description)
コード例 #26
0
ファイル: test_factory.py プロジェクト: eea/plone.dexterity
    def test_title(self):
        fti_mock = Mock(spec=DexterityFTI, title='Mock type')
        self.mock_utility(fti_mock, IDexterityFTI, name=u"testtype")

        factory = DexterityFactory(portal_type=u"testtype")
        self.assertEqual("Mock type", factory.title)