コード例 #1
0
ファイル: setuphandlers.py プロジェクト: sgeulette/ric.core
def addUUIDOnPortal(portal):
    if not IAttributeUUID.providedBy(portal):
        alsoProvides(portal, IAttributeUUID)
    uuid_adapter = IMutableUUID(portal)
    if uuid_adapter.get() is None:
        generator = getUtility(IUUIDGenerator)
        uuid = generator()
        uuid_adapter.set(uuid)
コード例 #2
0
ファイル: test_search.py プロジェクト: bsmali4/plone.restapi
    def setUp(self):
        self.app = self.layer['app']
        self.portal = self.layer['portal']
        self.portal_url = self.portal.absolute_url()
        self.request = self.portal.REQUEST
        self.catalog = getToolByName(self.portal, 'portal_catalog')

        self.api_session = RelativeSession(self.portal_url)
        self.api_session.headers.update({'Accept': 'application/json'})
        self.api_session.auth = (SITE_OWNER_NAME, SITE_OWNER_PASSWORD)

        # /plone/folder
        self.folder = createContentInContainer(self.portal,
                                               u'Folder',
                                               id=u'folder',
                                               title=u'Some Folder')

        # /plone/folder/doc
        self.doc = createContentInContainer(
            self.folder,
            u'DXTestDocument',
            id='doc',
            title=u'Lorem Ipsum',
            start=DateTime(1950, 1, 1, 0, 0),
            effective=DateTime(1995, 1, 1, 0, 0),
            expires=DateTime(1999, 1, 1, 0, 0),
            test_int_field=42,
            test_list_field=['Keyword1', 'Keyword2', 'Keyword3'],
            test_bool_field=True,
            test_richtext_field=RichTextValue(raw=u'<p>Some Text</p>',
                                              mimeType='text/html',
                                              outputMimeType='text/html'),
        )
        IMutableUUID(self.doc).set('77779ffa110e45afb1ba502f75f77777')
        self.doc.reindexObject()

        # /plone/folder/other-document
        self.doc2 = createContentInContainer(
            self.folder,
            u'DXTestDocument',
            id='other-document',
            title=u'Other Document',
            description=u'\xdcbersicht',
            start=DateTime(1975, 1, 1, 0, 0),
            effective=DateTime(2015, 1, 1, 0, 0),
            expires=DateTime(2020, 1, 1, 0, 0),
            test_list_field=['Keyword2', 'Keyword3'],
            test_bool_field=False,
        )

        # /plone/doc-outside-folder
        createContentInContainer(
            self.portal,
            u'DXTestDocument',
            id='doc-outside-folder',
            title=u'Doc outside folder',
        )

        transaction.commit()
コード例 #3
0
    def test_uuid_index_query(self):
        IMutableUUID(self.doc).set("7777a074cb4240d08c9a129e3a837777")
        self.doc.reindexObject()
        transaction.commit()

        query = {"UID": "7777a074cb4240d08c9a129e3a837777"}
        response = self.api_session.get("/@search", params=query)
        self.assertEqual([u"/plone/folder/doc"], result_paths(response.json()))
コード例 #4
0
    def test_uuid_index_query(self):
        IMutableUUID(self.doc).set('7777a074cb4240d08c9a129e3a837777')
        self.doc.reindexObject()
        transaction.commit()

        query = {'UID': '7777a074cb4240d08c9a129e3a837777'}
        response = self.api_session.get('/@search', params=query)
        self.assertEqual([u'/plone/folder/doc'], result_paths(response.json()))
コード例 #5
0
 def test_documentation_link(self):
     self.portal.invokeFactory('Link', id='link')
     self.portal.link.title = 'My Link'
     self.portal.link.description = u'This is a link'
     self.portal.remoteUrl = 'http://plone.org'
     self.portal.link.creation_date = DateTime('2016-01-21T04:14:48+00:00')
     self.portal.link.modification_date = DateTime(
         '2016-01-21T04:24:11+00:00')
     IMutableUUID(self.portal.link).set('6ff48d27762143a0ae8d63cee73d9fc2')
     import transaction
     transaction.commit()
     response = self.api_session.get(self.portal.link.absolute_url())
     save_response_for_documentation('link.json', response)
コード例 #6
0
 def migrate_at_uuid(self):
     """Migrate AT universal uid
     """
     if not IReferenceable.providedBy(self.old):
         return  # old object doesn't support AT uuids
     uid = self.old.UID()
     self.old._uncatalogUID(self.parent)
     if UUID_ATTR:  # Prevent object deletion triggering UID related magic
         setattr(self.old, UUID_ATTR, None)
     if queryAdapter(self.new, IMutableUUID):
         IMutableUUID(self.new).set(str(uid))
     else:
         self.new._setUID(uid)
コード例 #7
0
    def _add_element(self, element, event=True):
        element = aq_base(element)
        uid = self._generate_uid()
        IMutableUUID(element).set(uid)

        if event is True:
            notify(ObjectWillBeAddedEvent(element, self, uid))
        self._tree[uid] = element
        element.__parent__ = aq_base(self)

        if event is True:
            notify(ObjectCreatedEvent(element))
            notify(ObjectAddedEvent(element.__of__(self), self, uid))
            notify(ContainerModifiedEvent(self))
コード例 #8
0
 def test_documentation_event(self):
     self.portal.invokeFactory('Event', id='event')
     self.portal.event.title = 'Event'
     self.portal.event.description = u'This is an event'
     self.portal.event.start = datetime(2013, 1, 1, 10, 0)
     self.portal.event.end = datetime(2013, 1, 1, 12, 0)
     self.portal.event.creation_date = DateTime('2016-01-21T03:14:48+00:00')
     self.portal.event.modification_date = DateTime(
         '2016-01-21T03:24:11+00:00')
     IMutableUUID(self.portal.event).set('846d632bc0854c5aa6d3dcae171ed2db')
     import transaction
     transaction.commit()
     response = self.api_session.get(self.portal.event.absolute_url())
     save_response_for_documentation('event.json', response)
コード例 #9
0
 def test_documentation_file(self):
     self.portal.invokeFactory('File', id='file')
     self.portal.file.title = 'My File'
     self.portal.file.description = u'This is a file'
     pdf_file = os.path.join(os.path.dirname(__file__), u'file.pdf')
     self.portal.file.file = NamedBlobFile(data=open(pdf_file, 'r').read(),
                                           contentType='application/pdf',
                                           filename=u'file.pdf')
     self.portal.file.creation_date = DateTime('2016-01-21T05:14:48+00:00')
     self.portal.file.modification_date = DateTime(
         '2016-01-21T05:24:11+00:00')
     IMutableUUID(self.portal.file).set('9b6a4eadb9074dde97d86171bb332ae9')
     import transaction
     transaction.commit()
     response = self.api_session.get(self.portal.file.absolute_url())
     save_response_for_documentation('file.json', response)
コード例 #10
0
 def test_documentation_image(self):
     self.portal.invokeFactory('Image', id='image')
     self.portal.image.title = 'My Image'
     self.portal.image.description = u'This is an image'
     image_file = os.path.join(os.path.dirname(__file__), u'image.png')
     self.portal.image.image = NamedBlobImage(data=open(image_file,
                                                        'r').read(),
                                              contentType='image/png',
                                              filename=u'image.png')
     self.portal.image.creation_date = DateTime('2016-01-21T06:14:48+00:00')
     self.portal.image.modification_date = DateTime(
         '2016-01-21T06:24:11+00:00')
     IMutableUUID(self.portal.image).set('2166e81a0c224fe3b62e197c7fdc9c3e')
     import transaction
     transaction.commit()
     response = self.api_session.get(self.portal.image.absolute_url())
     save_response_for_documentation('image.json', response)
コード例 #11
0
    def render(self):
        portal = api.portal.get()
        soup = get_soup('uuid_preserver', portal)
        pc = api.portal.get_tool('portal_catalog')
        results = pc.searchResults()

        for result in results:
            obj = [r for r in soup.query(Eq('path', result.getPath()))]
            if obj:
                try:
                    realobj = result.getObject()
                    IMutableUUID(realobj).set(str(obj[0].attrs['uuid']))
                    realobj.reindexObject(idxs=['UID'])
                    logger.warning('Set UUID per {}'.format(result.getPath()))
                except:
                    logger.warning('Can\'t set UUID for {}'.format(
                        result.getPath()))
コード例 #12
0
    def setUp(self):
        self.portal = self.layer["portal"]
        self.request = self.layer["request"]

        self.portal.invokeFactory(
            "DXTestDocument",
            id=u"doc1",
            test_primary_namedfile_field=NamedFile(
                data=u"Spam and eggs", contentType=u"text/plain", filename=u"test.txt"
            ),
        )

        self.portal.invokeFactory(
            "DXTestDocument", id=u"doc2", test_primary_namedfile_field=None,
        )

        self.portal.doc1.creation_date = DateTime("2015-04-27T10:14:48+00:00")
        self.portal.doc1.modification_date = DateTime("2015-04-27T10:24:11+00:00")
        IMutableUUID(self.portal.doc1).set("30314724b77a4ec0abbad03d262837aa")
コード例 #13
0
    def setUp(self):
        self.portal = self.layer["portal"]
        self.request = self.layer["request"]

        richtext_value = RichTextValue(u"Käfer", "text/plain", "text/html")

        self.portal.invokeFactory(
            "DXTestDocument",
            id=u"doc1",
            test_ascii_field="foo",
            test_asciiline_field="foo",
            test_bool_field=True,
            test_bytes_field="\xc3\xa4\xc3\xb6\xc3\xbc",
            test_bytesline_field="\xc3\xa4\xc3\xb6\xc3\xbc",
            test_choice_field=u"foo",
            test_date_field=date(2015, 7, 15),
            test_datetime_field=datetime(2015, 6, 20, 13, 22, 4),
            test_decimal_field="1.1",
            test_dict_field={
                "foo": "bar",
                "spam": "eggs",
                "1": 1
            },
            test_float_field=1.5,
            test_frozenset_field=frozenset([1, 2, 3]),
            test_int_field=500,
            test_list_field=[1, "two", 3],
            test_set_field=set(["a", "b", "c"]),
            test_text_field=u"Käfer",
            test_richtext_field=richtext_value,
            test_textline_field=u"Käfer",
            test_time_field=time(14, 15, 33),
            test_timedelta_field=timedelta(44),
            test_tuple_field=(1, 1),
            test_readonly_field=u"readonly",
            test_read_permission_field=u"Secret Stuff",
        )

        self.portal.doc1.creation_date = DateTime("2015-04-27T10:14:48+00:00")
        self.portal.doc1.modification_date = DateTime(
            "2015-04-27T10:24:11+00:00")
        IMutableUUID(self.portal.doc1).set("30314724b77a4ec0abbad03d262837aa")
コード例 #14
0
    def setUp(self):
        self.app = self.layer['app']
        self.portal = self.layer['portal']
        self.request = self.portal.REQUEST
        self.catalog = getToolByName(self.portal, 'portal_catalog')

        # /plone/my-folder
        self.folder = createContentInContainer(self.portal,
                                               u'Folder',
                                               title=u'My Folder')

        # /plone/my-folder/my-document
        self.doc = createContentInContainer(self.folder,
                                            u'Document',
                                            creation_date=DateTime(
                                                2015, 12, 31, 23, 45),
                                            title=u'My Document')

        IMutableUUID(self.doc).set('77779ffa110e45afb1ba502f75f77777')
        self.doc.reindexObject()
コード例 #15
0
 def test_documentation_folder(self):
     self.portal.invokeFactory('Folder', id='folder')
     self.portal.folder.title = 'My Folder'
     self.portal.folder.description = u'This is a folder with two documents'
     self.portal.folder.invokeFactory('Document',
                                      id='doc1',
                                      title='A document within a folder')
     self.portal.folder.invokeFactory('Document',
                                      id='doc2',
                                      title='A document within a folder')
     self.portal.folder.creation_date = DateTime(
         '2016-01-21T07:14:48+00:00')
     self.portal.folder.modification_date = DateTime(
         '2016-01-21T07:24:11+00:00')
     IMutableUUID(
         self.portal.folder).set('fc7881c46d61452db4177bc059d9dcb5')
     import transaction
     transaction.commit()
     response = self.api_session.get(self.portal.folder.absolute_url())
     save_response_for_documentation('folder.json', response)
コード例 #16
0
    def setUp(self):
        self.portal = self.layer['portal']
        self.request = self.layer['request']

        richtext_value = RichTextValue(
            u'Käfer',
            'text/plain',
            'text/html'
        )

        self.portal.invokeFactory(
            'DXTestDocument',
            id=u'doc1',
            test_ascii_field='foo',
            test_asciiline_field='foo',
            test_bool_field=True,
            test_bytes_field='\xc3\xa4\xc3\xb6\xc3\xbc',
            test_bytesline_field='\xc3\xa4\xc3\xb6\xc3\xbc',
            test_choice_field=u'foo',
            test_date_field=date(2015, 7, 15),
            test_datetime_field=datetime(2015, 6, 20, 13, 22, 4),
            test_decimal_field='1.1',
            test_dict_field={'foo': 'bar', 'spam': 'eggs', '1': 1},
            test_float_field=1.5,
            test_frozenset_field=frozenset([1, 2, 3]),
            test_int_field=500,
            test_list_field=[1, 'two', 3],
            test_set_field=set(['a', 'b', 'c']),
            test_text_field=u'Käfer',
            test_richtext_field=richtext_value,
            test_textline_field=u'Käfer',
            test_time_field=time(14, 15, 33),
            test_timedelta_field=timedelta(44),
            test_tuple_field=(1, 1),
            test_readonly_field=u'readonly',
            test_read_permission_field=u'Secret Stuff')

        self.portal.doc1.creation_date = DateTime('2015-04-27T10:14:48+00:00')
        self.portal.doc1.modification_date = DateTime(
            '2015-04-27T10:24:11+00:00')
        IMutableUUID(self.portal.doc1).set('30314724b77a4ec0abbad03d262837aa')
コード例 #17
0
    def setUp(self):
        self.app = self.layer["app"]
        self.portal = self.layer["portal"]
        self.request = self.portal.REQUEST
        self.catalog = getToolByName(self.portal, "portal_catalog")

        # /plone/my-folder
        self.folder = createContentInContainer(self.portal,
                                               "Folder",
                                               title="My Folder")

        # /plone/my-folder/my-document
        self.doc = createContentInContainer(
            self.folder,
            "Document",
            creation_date=DateTime(2015, 12, 31, 23, 45),
            title="My Document",
        )

        IMutableUUID(self.doc).set("77779ffa110e45afb1ba502f75f77777")
        self.doc.reindexObject()
コード例 #18
0
def set_uuid(ob, uuid):
    types_tool = api.portal.get_tool('portal_types')
    fti = types_tool.get(ob.portal_type)
    if IDexterityFTI.providedBy(fti):
        # DX
        if HAS_DEXTERITY_REFERENCEABLE:
            if DX.IReferenceable.providedBy(ob):
                uid_catalog = api.portal.get_tool('uid_catalog')
                path = '/'.join(ob.getPhysicalPath())
                uid_catalog.uncatalog_object(path)
        # noinspection PyArgumentList
        IMutableUUID(ob).set(str(uuid))
        if HAS_DEXTERITY_REFERENCEABLE:
            if DX.IReferenceable.providedBy(ob):
                uid_catalog = api.portal.get_tool('uid_catalog')
                path = '/'.join(ob.getPhysicalPath())
                uid_catalog.catalog_object(ob, path)
    elif HAS_ARCHETYPES:
        if AT.IReferenceable.providedBy(ob):
            # AT
            ob._uncatalogUID(api.portal.get())
            ob._setUID(uuid)
コード例 #19
0
 def test_documentation_news_item(self):
     self.portal.invokeFactory('News Item', id='newsitem')
     self.portal.newsitem.title = 'My News Item'
     self.portal.newsitem.description = u'This is a news item'
     self.portal.newsitem.text = RichTextValue(u"Lorem ipsum", 'text/plain',
                                               'text/html')
     image_file = os.path.join(os.path.dirname(__file__), u'image.png')
     self.portal.newsitem.image = NamedBlobImage(data=open(image_file,
                                                           'r').read(),
                                                 contentType='image/png',
                                                 filename=u'image.png')
     self.portal.newsitem.image_caption = u'This is an image caption.'
     self.portal.newsitem.creation_date = DateTime(
         '2016-01-21T02:14:48+00:00')
     self.portal.newsitem.modification_date = DateTime(
         '2016-01-21T02:24:11+00:00')
     IMutableUUID(
         self.portal.newsitem).set('80c2a074cb4240d08c9a129e3a834c74')
     import transaction
     transaction.commit()
     response = self.api_session.get(self.portal.newsitem.absolute_url())
     save_response_for_documentation('newsitem.json', response)
コード例 #20
0
 def test_documentation_collection(self):
     self.portal.invokeFactory('Collection', id='collection')
     self.portal.collection.title = 'My Collection'
     self.portal.collection.description = \
         u'This is a collection with two documents'
     self.portal.collection.query = [{
         'i': 'portal_type',
         'o': 'plone.app.querystring.operation.string.is',
         'v': 'Document',
     }]
     self.portal.invokeFactory('Document', id='doc1', title='Document 1')
     self.portal.invokeFactory('Document', id='doc2', title='Document 2')
     self.portal.collection.creation_date = DateTime(
         '2016-01-21T08:14:48+00:00')
     self.portal.collection.modification_date = DateTime(
         '2016-01-21T08:24:11+00:00')
     IMutableUUID(
         self.portal.collection).set('d0c89bc77f874ce1aad5720921d875c0')
     import transaction
     transaction.commit()
     response = self.api_session.get(self.portal.collection.absolute_url())
     save_response_for_documentation('collection.json', response)
コード例 #21
0
ファイル: folder.py プロジェクト: jyukopla/collective.flow
    def create(self, data):
        fti = getUtility(IDexterityFTI, name=self.portal_type)
        context = aq_inner(self.context)
        submission = createObject(fti.factory).__of__(context)
        IMutableUUID(submission).set(uuid4())
        submission.title = IUUID(submission)  # noqa: P001

        # extract attachments to be saved into separate objects
        submission._v_attachments = tuple(extract_attachments(data, context))

        # save form data (bypass data manager for speed
        # and to avoid needing to reload the form schema)
        save_form(self, data, submission, default_values=True, force=True)

        # save schema to allow submission to adapt its schema interface
        submission.schema = remove_attachments(self.context.schema)
        submission.schema_digest = hashlib.md5(submission.schema).hexdigest()

        # we cannot acquire from parent FlowFolder, because behaviors
        # are resolved without acquisition chain
        submission.submission_behaviors = self.submission_behaviors

        return aq_base(submission)
コード例 #22
0
    def setUp(self):
        self.app = self.layer['app']
        self.request = self.layer['request']
        self.portal = self.layer['portal']
        self.portal_url = self.portal.absolute_url()

        self.time_freezer = freeze_time("2016-10-21 19:00:00")
        self.frozen_time = self.time_freezer.start()

        self.api_session = RelativeSession(self.portal_url)
        self.api_session.headers.update({'Accept': 'application/json'})
        self.api_session.auth = (SITE_OWNER_NAME, SITE_OWNER_PASSWORD)

        setRoles(self.portal, TEST_USER_ID, ['Manager'])
        self.portal.invokeFactory('Document', id='front-page')
        self.document = self.portal['front-page']
        self.document.title = u"Welcome to Plone"
        self.document.description = \
            u"Congratulations! You have successfully installed Plone."
        self.document.text = RichTextValue(
            u"If you're seeing this instead of the web site you were " +
            u"expecting, the owner of this web site has just installed " +
            u"Plone. Do not contact the Plone Team or the Plone mailing " +
            u"lists about this.", 'text/plain', 'text/html')
        self.document.creation_date = DateTime('2016-01-21T01:14:48+00:00')
        IMutableUUID(self.document).set('1f699ffa110e45afb1ba502f75f7ec33')
        self.document.reindexObject()
        self.document.modification_date = DateTime('2016-01-21T01:24:11+00:00')
        import transaction
        transaction.commit()
        self.browser = Browser(self.app)
        self.browser.handleErrors = False
        self.browser.addHeader(
            'Authorization', 'Basic %s:%s' % (
                SITE_OWNER_NAME,
                SITE_OWNER_PASSWORD,
            ))
コード例 #23
0
    def __iter__(self):
        for item in self.previous:
            pathkey = self.pathkey(*item.keys())[0]
            # not enough info
            if not pathkey:
                yield item
                continue

            path = item[pathkey]
            # Skip the Plone site object itself
            if not path:
                yield item
                continue

            obj = self.context.unrestrictedTraverse(
                safe_unicode(path).lstrip('/'), None)

            if not IDexterityContent.providedBy(obj):
                # Path doesn't exist
                # obj can not only be None, but also the value of an attribute,
                # which is returned by traversal.
                yield item
                continue

            uuid = item.get('plone.uuid')
            if uuid is not None:
                IMutableUUID(obj).set(str(uuid))

            # For all fields in the schema, update in roughly the same way
            # z3c.form.widget.py would
            for schemata in iterSchemata(obj):
                for name, field in getFieldsInOrder(schemata):
                    self.update_field(obj, field, item)

            notify(ObjectModifiedEvent(obj))
            yield item
コード例 #24
0
 def migrate_id_and_uuid(self, old_object, new_object):
     new_object.id = old_object.id
     IMutableUUID(new_object).set(IUUID(old_object))
コード例 #25
0
def autosave(event):  # noqa
    context = getattr(event, 'object', None)
    request = getattr(context, 'REQUEST', getRequest())
    if not request.URL.endswith('/@@z3cform_validate_field'):
        return

    view = getattr(request, 'PUBLISHED', None)
    form = getattr(view, 'context', None)
    if getattr(aq_base(form), 'form_instance', None):
        form = form.form_instance

    if IAddForm.providedBy(form):
        fti = queryUtility(IDexterityFTI, name=form.portal_type)
        if not isDraftable(fti):
            return

        draft = getCurrentDraft(request, create=True)
        target = getattr(draft, '_draftAddFormTarget', None)

        if target is None:
            target = createContent(form.portal_type)
            target.id = ''
            IMutableUUID(target).set('++add++{0}'.format(form.portal_type))
            draft._draftAddFormTarget = target
        target = target.__of__(context)

    else:
        fti = queryUtility(IDexterityFTI, name=context.portal_type)
        if not isDraftable(fti):
            return

        draft = getCurrentDraft(request, create=True)
        target = context

    fti = queryUtility(IDexterityFTI, name=target.portal_type)
    if not isDraftable(fti):
        return

    if not getattr(form, 'extractData', None):
        return

    data, errors = form.extractData()
    if not errors:
        content = DraftProxy(draft, target)

        # Drop known non-draftable values
        data = dict([(k, v) for k, v in data.items()
                     if k not in AUTOSAVE_BLACKLIST])  # noqa

        # Values are applied within savepoint to allow revert of any
        # unexpected side-effects from setting field values
        sp = transaction.savepoint(optimistic=True)
        try:
            applyChanges(form, content, data)
            for group in getattr(form, 'groups', []):
                applyChanges(group, content, data)
        except Exception:
            # If shortname was not blacklisted, it could fail because the
            # behavior trying to rename object on add form.
            pass
        values = dict(draft.__dict__)
        sp.rollback()

        for key, value in values.items():
            setattr(draft, key, value)

        # Disable Plone 5 implicit CSRF to update draft
        if HAS_PLONE_PROTECT:
            alsoProvides(request, IDisableCSRFProtection)
コード例 #26
0
ファイル: topics.py プロジェクト: urska19/Plone_site
 def migrate_at_uuid(self):
     """Migrate AT universal uid
     """
     uid = self.UID
     if uid and queryAdapter(self.new, IMutableUUID):
         IMutableUUID(self.new).set(str(uid))
コード例 #27
0
    def __iter__(self):  #  noqa
        # need to be refactored
        for item in self.previous:
            pathkey = self.pathkey(*list(item.keys()))[0]
            # not enough info
            if not pathkey:
                yield item
                continue

            path = item[pathkey]
            # Skip the Plone site object itself
            if not path:
                yield item
                continue

            obj = self.context.unrestrictedTraverse(path.lstrip("/"), None)

            # path doesn't exist
            if obj is None:
                yield item
                continue

            if IDexterityContent.providedBy(obj):
                uuid = item.get("plone.uuid")
                if uuid is not None:
                    try:
                        IMutableUUID(obj).set(str(uuid))
                    except Exception:
                        self.errored.append(item["_original_path"])

                files = item.setdefault(self.fileskey, {})

                # For all fields in the schema, update in roughly the same way
                # z3c.form.widget.py would
                for schemata in iterSchemata(obj):
                    for name, field in getFieldsInOrder(schemata):
                        if name == "id":
                            continue
                        if field.readonly:
                            continue
                        # setting value from the blueprint cue
                        value = item.get(name, _marker)
                        if value is not _marker:
                            if IRelationList.providedBy(
                                    field) or IRelationChoice.providedBy(
                                        field):  # noqa
                                self.transmogrifier.fixrelations.append((
                                    "/".join(obj.getPhysicalPath()),
                                    name,
                                    value,
                                ))  # noqa
                            # Value was given in pipeline, so set it
                            deserializer = queryMultiAdapter((field, obj),
                                                             IDeserializer)
                            try:
                                value = deserializer(
                                    value,
                                    files,
                                    item,
                                    self.disable_constraints,
                                    logger=self.log,
                                )
                                field.set(field.interface(obj), value)
                                continue
                            except Exception:
                                continue

                        # Get the widget's current value, if it has one then
                        # leave it alone
                        value = getMultiAdapter(
                            (obj, field), interfaces.IDataManager).query()
                        if not (value is field.missing_value
                                or value is interfaces.NO_VALUE):
                            continue

                        # Finally, set a default value if nothing is set so far
                        default = queryMultiAdapter(
                            (
                                obj,
                                obj.REQUEST,  # request
                                None,  # form
                                field,
                                None,  # Widget
                            ),
                            interfaces.IValue,
                            name="default",
                        )

                        if schemata.__name__ == "IAllowDiscussion":
                            default = item.get("allow_discusion", None)
                            field.set(field.interface(obj), default)
                            continue

                        if default is not None:
                            default = default.get()
                        if default is None:
                            default = getattr(field, "default", None)
                        if default is None:
                            try:
                                default = field.missing_value
                            except AttributeError:
                                pass
                        field.set(field.interface(obj), default)
                notify(ObjectModifiedEvent(obj))
            yield item
コード例 #28
0
    def __iter__(self):
        for item in self.previous:
            pathkey = self.pathkey(*item.keys())[0]
            # not enough info
            if not pathkey:
                yield item
                continue

            path = item[pathkey]
            # Skip the Plone site object itself
            if not path:
                yield item
                continue

            obj = self.context.unrestrictedTraverse(path.encode().lstrip('/'),
                                                    None)

            # path doesn't exist
            if obj is None:
                yield item
                continue

            if IDexterityContent.providedBy(obj):
                uuid = item.get('plone.uuid')
                if uuid is not None:
                    try:
                        IMutableUUID(obj).set(str(uuid))
                    except:
                        self.errored.append(item['_original_path'])

                files = item.setdefault(self.fileskey, {})

                # For all fields in the schema, update in roughly the same way
                # z3c.form.widget.py would
                for schemata in iterSchemata(obj):
                    for name, field in getFieldsInOrder(schemata):
                        if name == 'id':
                            continue
                        if field.readonly:
                            continue
                        #setting value from the blueprint cue
                        value = item.get(name, _marker)
                        if value is not _marker:
                            # Value was given in pipeline, so set it
                            deserializer = IDeserializer(field)
                            value = deserializer(
                                value,
                                files,
                                item,
                                self.disable_constraints,
                                logger=self.log,
                            )
                            field.set(field.interface(obj), value)
                            continue

                        # Get the widget's current value, if it has one then leave
                        # it alone
                        value = getMultiAdapter(
                            (obj, field), interfaces.IDataManager).query()
                        if not (value is field.missing_value
                                or value is interfaces.NO_VALUE):
                            continue

                        # Finally, set a default value if nothing is set so far
                        default = queryMultiAdapter(
                            (
                                obj,
                                obj.REQUEST,  # request
                                None,  # form
                                field,
                                None,  # Widget
                            ),
                            interfaces.IValue,
                            name='default')
                        if default is not None:
                            default = default.get()
                        if default is None:
                            default = getattr(field, 'default', None)
                        if default is None:
                            try:
                                default = field.missing_value
                            except AttributeError:
                                pass
                        field.set(field.interface(obj), default)
                try:
                    notify(ObjectModifiedEvent(obj))
                except:
                    print 'Error probably in linkintegrity transform'
            yield item
コード例 #29
0
 def UID(self):
     return IMutableUUID(self).get()
コード例 #30
0
    def setUp(self):
        self.app = self.layer["app"]
        self.portal = self.layer["portal"]
        self.portal_url = self.portal.absolute_url()
        self.request = self.portal.REQUEST
        self.catalog = getToolByName(self.portal, "portal_catalog")

        self.api_session = RelativeSession(self.portal_url)
        self.api_session.headers.update({"Accept": "application/json"})
        self.api_session.auth = (SITE_OWNER_NAME, SITE_OWNER_PASSWORD)

        # /plone/folder
        self.folder = createContentInContainer(self.portal,
                                               u"Folder",
                                               id=u"folder",
                                               title=u"Some Folder")

        # /plone/folder/doc
        self.doc = createContentInContainer(
            self.folder,
            u"DXTestDocument",
            id="doc",
            title=u"Lorem Ipsum",
            start=DateTime(1950, 1, 1, 0, 0),
            effective=DateTime(1995, 1, 1, 0, 0),
            expires=DateTime(1999, 1, 1, 0, 0),
            test_int_field=42,
            test_list_field=["Keyword1", "Keyword2", "Keyword3"],
            test_bool_field=True,
            test_richtext_field=RichTextValue(
                raw=u"<p>Some Text</p>",
                mimeType="text/html",
                outputMimeType="text/html",
            ),
        )
        IMutableUUID(self.doc).set("77779ffa110e45afb1ba502f75f77777")
        self.doc.reindexObject()

        # /plone/folder/other-document
        self.doc2 = createContentInContainer(
            self.folder,
            u"DXTestDocument",
            id="other-document",
            title=u"Other Document",
            description=u"\xdcbersicht",
            start=DateTime(1975, 1, 1, 0, 0),
            effective=DateTime(2015, 1, 1, 0, 0),
            expires=DateTime(2020, 1, 1, 0, 0),
            test_list_field=["Keyword2", "Keyword3"],
            test_bool_field=False,
        )

        # /plone/folder2
        self.folder2 = createContentInContainer(self.portal,
                                                u"Folder",
                                                id=u"folder2",
                                                title=u"Another Folder")

        # /plone/folder2/doc
        createContentInContainer(
            self.folder2,
            u"DXTestDocument",
            id="doc",
            title=u"Document in second folder",
            start=DateTime(1975, 1, 1, 0, 0),
            effective=DateTime(2015, 1, 1, 0, 0),
            expires=DateTime(2020, 1, 1, 0, 0),
            test_bool_field=False,
        )

        # /plone/doc-outside-folder
        createContentInContainer(
            self.portal,
            u"DXTestDocument",
            id="doc-outside-folder",
            title=u"Doc outside folder",
        )

        transaction.commit()