コード例 #1
0
 def test_migrate_extended_document(self):
     from plone.app.contenttypes.migration.migration import migrateCustomAT
     from plone.app.contenttypes.interfaces import INewsItem
     at_document = self.createCustomATDocument('foo-document')
     qi = self.portal.portal_quickinstaller
     # install pac but only install News Items
     qi.installProduct(
         'plone.app.contenttypes',
         profile='plone.app.contenttypes:default',
         blacklistedSteps=['typeinfo'])
     installTypeIfNeeded("News Item")
     fields_mapping = (
         {'AT_field_name': 'textExtended',
          'AT_field_type': 'Products.Archetypes.Field.TextField',
          'DX_field_name': 'text',
          'DX_field_type': 'RichText', },
         {'AT_field_name': 'stringExtended',
          'AT_field_type': 'StringField',
          'DX_field_name': 'title',
          'DX_field_type': 'StringField', },
     )
     # migrate extended AT Document to default DX News Item
     migrateCustomAT(
         fields_mapping, src_type='Document', dst_type='News Item')
     dx_newsitem = self.portal['foo-document']
     self.assertTrue(INewsItem.providedBy(dx_newsitem))
     self.assertTrue(dx_newsitem is not at_document)
     self.assertEquals(at_document.textExtended(), dx_newsitem.text.raw)
     self.assertEquals(at_document.stringExtended, dx_newsitem.title)
コード例 #2
0
    def test_migration_with_custom_fieldmigrator(self):
        """Migrate a ATDocument to a DXNewsItem using a custom modifier"""
        from plone.app.contenttypes.interfaces import INewsItem
        from plone.app.contenttypes.migration.migration import migrateCustomAT
        at_document = self.createCustomATDocument('foo-document')
        at_text = (u'Some | field is | pipe-delimited | in the field\n')
        at_document.setText(at_text)
        qi = self.portal.portal_quickinstaller
        # install pac but only install News Items
        qi.installProduct('plone.app.contenttypes',
                          profile='plone.app.contenttypes:default',
                          blacklistedSteps=['typeinfo'])
        installTypeIfNeeded('News Item')
        fields_mapping = ({
            'AT_field_name': 'text',
            'DX_field_name': 'creators',
            'field_migrator': some_field_migrator
        }, )
        migrateCustomAT(fields_mapping,
                        src_type='Document',
                        dst_type='News Item')

        dx_newsitem = self.portal['foo-document']
        self.assertTrue(INewsItem.providedBy(dx_newsitem))
        self.assertTrue(dx_newsitem is not at_document)
        self.assertEqual(4, len(dx_newsitem.creators))
        self.assertEqual(at_document.Title(), dx_newsitem.title)
コード例 #3
0
    def test_fix_interface_for_news_item(self):
        self.obj.portal_type = 'News Item'
        self.catalog.reindexObject(self.obj)

        self.portal.restrictedTraverse('fix_base_classes')()

        self.assertTrue(INewsItem.providedBy(self.obj))
コード例 #4
0
 def test_migrate_extended_document(self):
     from plone.app.contenttypes.migration.migration import migrateCustomAT
     from plone.app.contenttypes.interfaces import INewsItem
     at_document = self.createCustomATDocument('foo-document')
     qi = self.portal.portal_quickinstaller
     # install pac but only install News Items
     qi.installProduct('plone.app.contenttypes',
                       profile='plone.app.contenttypes:default',
                       blacklistedSteps=['typeinfo'])
     installTypeIfNeeded('News Item')
     fields_mapping = (
         {
             'AT_field_name': 'textExtended',
             'AT_field_type': 'Products.Archetypes.Field.TextField',
             'DX_field_name': 'text',
             'DX_field_type': 'RichText',
         },
         {
             'AT_field_name': 'stringExtended',
             'AT_field_type': 'StringField',
             'DX_field_name': 'title',
             'DX_field_type': 'StringField',
         },
     )
     # migrate extended AT Document to default DX News Item
     migrateCustomAT(fields_mapping,
                     src_type='Document',
                     dst_type='News Item')
     dx_newsitem = self.portal['foo-document']
     self.assertTrue(INewsItem.providedBy(dx_newsitem))
     self.assertTrue(dx_newsitem is not at_document)
     self.assertEqual(at_document.textExtended(), dx_newsitem.text.raw)
     self.assertEqual(at_document.stringExtended, dx_newsitem.title)
コード例 #5
0
    def test_migration_with_custom_fieldmigrator(self):
        """Migrate a ATDocument to a DXNewsItem using a custom modifier"""
        from plone.app.contenttypes.interfaces import INewsItem
        from plone.app.contenttypes.migration.migration import migrateCustomAT
        at_document = self.createCustomATDocument('foo-document')
        at_text = (
            u'Some | field is | pipe-delimited | in the field\n'
        )
        at_document.setText(at_text)
        # install pac but only install News Items
        portal_setup = getToolByName(self.portal, 'portal_setup')
        portal_setup.runAllImportStepsFromProfile(
            'profile-plone.app.contenttypes:default',
            blacklisted_steps=['typeinfo'],
        )
        installTypeIfNeeded('News Item')
        fields_mapping = (
            {'AT_field_name': 'text',
             'DX_field_name': 'creators',
             'field_migrator': some_field_migrator},
        )
        migrateCustomAT(
            fields_mapping, src_type='Document', dst_type='News Item')

        dx_newsitem = self.portal['foo-document']
        self.assertTrue(INewsItem.providedBy(dx_newsitem))
        self.assertTrue(dx_newsitem is not at_document)
        self.assertEqual(4, len(dx_newsitem.creators))
        self.assertEqual(at_document.Title(), dx_newsitem.title)
コード例 #6
0
    def test_fix_interface_for_news_item(self):
        self.obj.portal_type = 'News Item'
        self.catalog.reindexObject(self.obj)

        self.portal.restrictedTraverse('fix_base_classes')()

        self.assertTrue(INewsItem.providedBy(self.obj))
コード例 #7
0
 def test_migrate_extended_document(self):
     from plone.app.contenttypes.migration.migration import migrateCustomAT
     from plone.app.contenttypes.interfaces import INewsItem
     at_document = self.createCustomATDocument('foo-document')
     # install pac but only install News Items
     portal_setup = getToolByName(self.portal, 'portal_setup')
     portal_setup.runAllImportStepsFromProfile(
         'profile-plone.app.contenttypes:default',
         blacklisted_steps=['typeinfo'],
     )
     installTypeIfNeeded('News Item')
     fields_mapping = (
         {'AT_field_name': 'textExtended',
          'AT_field_type': 'Products.Archetypes.Field.TextField',
          'DX_field_name': 'text',
          'DX_field_type': 'RichText', },
         {'AT_field_name': 'stringExtended',
          'AT_field_type': 'StringField',
          'DX_field_name': 'title',
          'DX_field_type': 'StringField', },
     )
     # migrate extended AT Document to default DX News Item
     migrateCustomAT(
         fields_mapping, src_type='Document', dst_type='News Item')
     dx_newsitem = self.portal['foo-document']
     self.assertTrue(INewsItem.providedBy(dx_newsitem))
     self.assertTrue(dx_newsitem is not at_document)
     self.assertEqual(at_document.textExtended(), dx_newsitem.text.raw)
     self.assertEqual(at_document.stringExtended, dx_newsitem.title)
コード例 #8
0
 def test_factory(self):
     fti = queryUtility(
         IDexterityFTI,
         name='News Item'
     )
     factory = fti.factory
     new_object = createObject(factory)
     self.failUnless(INewsItem.providedBy(new_object))
コード例 #9
0
ファイル: test_migration.py プロジェクト: mingtak/prome
 def test_newsitem_is_migrated(self):
     from Products.ATContentTypes.content.newsitem import ATNewsItem
     from plone.app.contenttypes.migration.migration import NewsItemMigrator
     from plone.app.contenttypes.interfaces import INewsItem
     at_newsitem = self.createATCTobject(ATNewsItem, 'newsitem')
     migrator = self.get_migrator(at_newsitem, NewsItemMigrator)
     migrator.migrate()
     new_newsitem = self.portal['newsitem']
     self.assertTrue(INewsItem.providedBy(new_newsitem))
     self.assertTrue(at_newsitem is not new_newsitem)
コード例 #10
0
 def test_blob_newsitem_is_migrated(self):
     from plone.app.contenttypes.migration.migration import\
         BlobNewsItemMigrator
     from plone.app.contenttypes.interfaces import INewsItem
     at_newsitem = self.createATCTBlobNewsItem('newsitem')
     applyProfile(self.portal, 'plone.app.contenttypes:default')
     migrator = self.get_migrator(at_newsitem, BlobNewsItemMigrator)
     migrator.migrate()
     dx_newsitem = self.portal['newsitem']
     self.assertTrue(INewsItem.providedBy(dx_newsitem))
     self.assertTrue(at_newsitem is not dx_newsitem)
コード例 #11
0
 def test_newsitem_is_migrated(self):
     from plone.app.contenttypes.migration.migration import NewsItemMigrator
     from plone.app.contenttypes.interfaces import INewsItem
     self.portal.invokeFactory('News Item', 'newsitem')
     at_newsitem = self.portal['newsitem']
     applyProfile(self.portal, 'plone.app.contenttypes:default')
     migrator = self.get_migrator(at_newsitem, NewsItemMigrator)
     migrator.migrate()
     dx_newsitem = self.portal['newsitem']
     self.assertTrue(INewsItem.providedBy(dx_newsitem))
     self.assertTrue(at_newsitem is not dx_newsitem)
コード例 #12
0
 def test_adding(self):
     self.portal.invokeFactory(
         'News Item',
         'doc1'
     )
     self.assertTrue(INewsItem.providedBy(self.portal['doc1']))
コード例 #13
0
ファイル: viewlets.py プロジェクト: urska19/Plone_site
 def update(self):
     self.context = ILeadImage(self.context)
     self.available = True if self.context.image else False
     if INewsItem.providedBy(self.context):
         self.available = False
コード例 #14
0
 def test_adding(self):
     self.portal.invokeFactory('News Item', 'doc1')
     self.assertTrue(INewsItem.providedBy(self.portal['doc1']))
コード例 #15
0
 def test_factory(self):
     fti = queryUtility(IDexterityFTI, name='News Item')
     factory = fti.factory
     new_object = createObject(factory)
     self.assertTrue(INewsItem.providedBy(new_object))
コード例 #16
0
ファイル: viewlets.py プロジェクト: CGTIC/Plone_SP
 def update(self):
     self.context = ILeadImage(self.context)
     self.available = True if self.context.image else False
     if INewsItem.providedBy(self.context):
         self.available = False
コード例 #17
0
    def test_migrate_atevent_to_dxnewsitem(self):
        """Tests the custom migration by migrating a default type. It is not
        meant to be used this way but is a nice way to test the migrations.
        During this migration the old event fti is still present.
        """
        from DateTime import DateTime
        from plone.app.contenttypes.migration.migration import migrateCustomAT
        from plone.app.contenttypes.interfaces import INewsItem

        # create an ATEvent
        self.portal.invokeFactory('Event', 'event')
        at_event = self.portal['event']

        # Date
        at_event.getField('startDate') \
                .set(at_event, DateTime('2013-02-03 12:00'))
        at_event.getField('endDate') \
                .set(at_event, DateTime('2013-04-05 13:00'))

        # Contact
        at_event.getField('contactPhone').set(at_event, '123456789')
        at_event.getField('contactEmail').set(at_event, '*****@*****.**')
        at_event.getField('contactName').set(at_event, u'Näme')

        # URL
        at_event.getField('eventUrl').set(at_event, 'http://www.plone.org')

        # Attendees
        at_event.getField('attendees').set(at_event, ('You', 'Me'))

        # Text
        at_event.setText('Tütensuppe')
        at_event.setContentType('text/plain')

        oldTZ = os.environ.get('TZ', None)
        os.environ['TZ'] = 'Asia/Tbilisi'

        qi = self.portal.portal_quickinstaller
        # install pac but only install News Items
        qi.installProduct('plone.app.contenttypes',
                          profile='plone.app.contenttypes:default',
                          blacklistedSteps=['typeinfo'])
        installTypeIfNeeded('News Item')
        fields_mapping = (
            {
                'AT_field_name': 'text',
                'AT_field_type': 'Products.Archetypes.Field.TextField',
                'DX_field_name': 'text',
                'DX_field_type': 'RichText',
            },
            {
                'AT_field_name': 'contactName',
                'AT_field_type': 'StringField',
                'DX_field_name': 'image_caption',
                'DX_field_type': 'StringField',
            },
        )
        # migrate ATCTEvent to default DX News Item
        migrateCustomAT(fields_mapping, src_type='Event', dst_type='News Item')
        if oldTZ:
            os.environ['TZ'] = oldTZ
        else:
            del os.environ['TZ']

        dx_newsitem = self.portal['event']
        self.assertTrue(INewsItem.providedBy(dx_newsitem))
        self.assertTrue(dx_newsitem is not at_event)
        self.assertEqual(safe_unicode(at_event.getText()),
                         dx_newsitem.text.output)
        self.assertEqual(at_event.contactName, dx_newsitem.image_caption)
コード例 #18
0
    def data(self):

        context = self.context

        data = {}

        if ICollegeHomepage.providedBy(self.context):
            data = {
                    '@context': 'http://schema.org',
                    '@type': 'EducationalOrganization',
                    'address': {    '@type': 'PostalAddress',
                                    'addressLocality': 'University Park',
                                    'addressRegion': 'PA',
                                    'postalCode': '16802',
                                    'streetAddress': 'Penn State University'},
                    'logo': 'https://agsci.psu.edu/psu-agsciences-logo.png',
                    'name': 'Penn State College of Agricultural Sciences',
                    'sameAs': [
                        'https://www.facebook.com/agsciences',
                        'https://www.twitter.com/agsciences',
                        'https://plus.google.com/+PennStateAgSciences',
                        'https://instagram.com/agsciences',
                        'https://www.linkedin.com/company/penn-state-college-of-agricultural-sciences',
                        'https://www.youtube.com/psuagsciences',
                        'https://en.wikipedia.org/wiki/Penn_State_College_of_Agricultural_Sciences'],
                    'telephone': '+1-814-865-7521',
                    'url': 'https://agsci.psu.edu'
                    }

        elif IEvent.providedBy(context):

            data = {
                    '@context': 'http://schema.org',
                    '@type': 'Event',
                    'name': context.Title(),
                    'description' : context.Description(),
                    'startDate' : localize(context.start).isoformat(),
                    'endDate' : localize(context.end).isoformat(),
                    'url' : context.absolute_url(),
                    'location' : {
                        "@type" : "Place",
                        "address" : getattr(context, 'location', ''),
                        "name" : getattr(context, 'location', ''),
                    }
            }

        elif INewsItem.providedBy(context):

            data = {
                    '@context': 'http://schema.org',
                    '@type': 'Article',
                    'headline': context.Title(),
                    'description' : context.Description(),
                    'datePublished' : localize(context.effective()).isoformat(),
                    'url' : context.absolute_url(),
            }

        elif IPerson.providedBy(context):

            # Job Title
            job_titles = getattr(context, 'job_titles', [])

            if job_titles:
                job_title = job_titles[0]
            else:
                job_title = ""

            # Email
            email = getattr(context, 'email', '')

            # Name
            (first_name, middle_name, last_name) = [getattr(context, x, '') for x in ('first_name', 'middle_name', 'last_name')]

            # Address
            street_address = getattr(context, 'street_address', [])

            if street_address:
                street_address = [x for x in street_address if x]
                street_address = ', '.join(street_address)

            city = getattr(context, 'city', '')
            state = getattr(context, 'state', '')
            zip_code = getattr(context, 'zip_code', '')

            # Phone
            phone_number = getattr(context, 'phone_number', '')

            data = {
                    '@context': 'http://schema.org',
                    '@type': 'Person',
                    'url' : context.absolute_url(),
                    'email' : email,
                    'givenName' : first_name,
                    'additionalName' : middle_name,
                    'familyName' : last_name,
                    'telephone' : phone_number,
                    'jobTitle' : job_title,
                    'workLocation' : {
                        '@type' : 'PostalAddress',
                        'addressCountry' : 'US',
                        'addressLocality' : city,
                        'addressRegion' : state,
                        'postalCode' : zip_code,
                        'streetAddress' : street_address,
                    }
            }

        data['image'] = self.image

        if data:
            return json.dumps(data, indent=4)
コード例 #19
0
    def test_migrate_atevent_to_dxnewsitem(self):
        """Tests the custom migration by migrating a default type. It is not
        meant to be used this way but is a nice way to test the migrations.
        During this migration the old event fti is still present.
        """
        from DateTime import DateTime
        from plone.app.contenttypes.migration.migration import migrateCustomAT
        from plone.app.contenttypes.interfaces import INewsItem

        # create an ATEvent
        self.portal.invokeFactory('Event', 'event')
        at_event = self.portal['event']

        # Date
        at_event.getField('startDate') \
                .set(at_event, DateTime('2013-02-03 12:00'))
        at_event.getField('endDate') \
                .set(at_event, DateTime('2013-04-05 13:00'))

        # Contact
        at_event.getField('contactPhone').set(at_event, '123456789')
        at_event.getField('contactEmail').set(at_event, '*****@*****.**')
        at_event.getField('contactName').set(at_event, u'Näme')

        # URL
        at_event.getField('eventUrl').set(at_event, 'http://www.plone.org')

        # Attendees
        at_event.getField('attendees').set(at_event, ('You', 'Me'))

        # Text
        at_event.setText('Tütensuppe')
        at_event.setContentType('text/plain')

        oldTZ = os.environ.get('TZ', None)
        os.environ['TZ'] = 'Asia/Tbilisi'

        qi = self.portal.portal_quickinstaller
        # install pac but only install News Items
        qi.installProduct(
            'plone.app.contenttypes',
            profile='plone.app.contenttypes:default',
            blacklistedSteps=['typeinfo'])
        installTypeIfNeeded("News Item")
        fields_mapping = (
            {'AT_field_name': 'text',
             'AT_field_type': 'Products.Archetypes.Field.TextField',
             'DX_field_name': 'text',
             'DX_field_type': 'RichText', },
            {'AT_field_name': 'contactName',
             'AT_field_type': 'StringField',
             'DX_field_name': 'image_caption',
             'DX_field_type': 'StringField', },
        )
        # migrate ATCTEvent to default DX News Item
        migrateCustomAT(fields_mapping, src_type='Event', dst_type='News Item')
        if oldTZ:
            os.environ['TZ'] = oldTZ
        else:
            del os.environ['TZ']

        dx_newsitem = self.portal['event']
        self.assertTrue(INewsItem.providedBy(dx_newsitem))
        self.assertTrue(dx_newsitem is not at_event)
        self.assertEquals(
            safe_unicode(at_event.getText()),
            dx_newsitem.text.output)
        self.assertEquals(
            at_event.contactName,
            dx_newsitem.image_caption)