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)
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()
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()))
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()))
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)
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)
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))
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)
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)
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)
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()))
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")
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")
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()
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)
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')
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()
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)
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)
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)
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)
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, ))
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
def migrate_id_and_uuid(self, old_object, new_object): new_object.id = old_object.id IMutableUUID(new_object).set(IUUID(old_object))
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)
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))
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
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
def UID(self): return IMutableUUID(self).get()
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()