def test_create_file(self): grok_component('ITest2', ITest2) # mock stuf mock_context = self.providing_stub([ ITabbedviewUploadable, ]) named_file = NamedFile('bla bla', filename=u'test.txt') obj = self.providing_stub([ITest1, ITest2]) request = self.stub() self.expect(obj.REQUEST).result(request) iterSchemata = self.mocker.replace( 'plone.dexterity.utils.iterSchemata') self.expect(iterSchemata(obj)).result([ITest1, ITest2]) self.replay() # test if it's sets the default value and # also if it add the created file to the primary field adapter = IQuickUploadFileFactory(mock_context) named_file = adapter.create_file(u'hugo.jpeg', u'data data', obj) self.assertEquals(named_file.data, u'data data')
def test_custom_actions(self): default_actions = api.content.create(self.portal, 'File', id='easyform_default_actions.xml') default_actions.file = NamedFile(self.no_schema) ef = api.content.create(self.folder, 'EasyForm', id='my-form') self.assertEqual(ef.actions_model, self.no_schema)
def setUp(self): self.portal = self.layer['portal'] setRoles(self.portal, TEST_USER_ID, ['Manager']) self.portal.invokeFactory('Folder', 'media') self.folder = self.portal.media self.folder.invokeFactory( 'Image', 'image', title='Test Image') self.image_type = self.folder['image'] self.image_type.image = NamedImage( getData('data/plone-app-caching.jpg'), 'image/jpg', u'plone-app-caching.jpg') self.folder.invokeFactory( 'File', 'file', title=u'Töst File') self.file = self.folder['file'] self.file.file = NamedFile( getData('data/testfile.csv'), 'text/csv', u'data/töstfile.csv') setRoles(self.portal, TEST_USER_ID, TEST_USER_ROLES)
def test_custom_actions(self): default_actions = api.content.create(self.portal, "File", id="easyform_default_actions.xml") default_actions.file = NamedFile(self.no_schema) ef = api.content.create(self.folder, "EasyForm", id="my-form") self.assertEqual(ef.actions_model, self.no_schema)
def test_should_detect_same_data_and_filename(self): self.loginAsPortalOwner() self.portal.invokeFactory(testing.TEST_CONTENT_TYPE_ID, 'obj1', file=NamedFile(data='contents', filename=u'f.txt')) obj1 = self.portal['obj1'] self.portal.invokeFactory(testing.TEST_CONTENT_TYPE_ID, 'obj2', file=NamedFile(data='contents', filename=u'f.txt')) obj2 = self.portal['obj2'] diff = namedfile.NamedFileBinaryDiff(obj1, obj2, 'file') self.assertTrue(IDifference.providedBy(diff)) self.assertTrue(diff.same)
def get_attachment(self, filename, type): file_path = os.path.join(os.path.dirname(__file__), filename) with open(file_path, 'rb') as f: if api.env.plone_version() < '5.0': return f if type == 'image': return NamedImage(data=f, filename=filename) return NamedFile(data=f, filename=filename)
def updateLastWorkingResults(self): self.modification_date = DateTime.DateTime() resp = requests.post(self.endpoint, json=json.loads(self.query), timeout=2) self.cached_results = NamedFile(data=resp.text, contentType='text/x-json', filename=u'cached_data.json')
def render(self): file_etiquetas = NamedFile(open( '/tmp/%s.pdf' % self.request.SESSION.id, 'r'), filename=u'etiquetas.pdf') cd = 'inline; filename="etiquetas.pdf"' self.request.response.setHeader('Content-Disposition', cd) set_headers(file_etiquetas, self.request.response) return stream_data(file_etiquetas)
def test_should_detect_same_data_and_filename(self): setRoles(self.portal, TEST_USER_ID, ['Manager']) self.portal.invokeFactory(TEST_CONTENT_TYPE_ID, 'obj1', file=NamedFile(data='contents', filename=u'f.txt')) obj1 = self.portal['obj1'] self.portal.invokeFactory(TEST_CONTENT_TYPE_ID, 'obj2', file=NamedFile(data='contents', filename=u'f.txt')) obj2 = self.portal['obj2'] diff = DexterityBinaryDiff(obj1, obj2, 'file') self.assertTrue(IDifference.providedBy(diff)) self.assertTrue(diff.same)
def test_document_fusion_with_merge_multiple(self): # data source is in a related content # we merge two files from two sources alsoProvides(self.portal.REQUEST, ICollectiveDocumentfusionLayer) intids = getUtility(IIntIds) source_1 = api.content.create(self.portal, type='contact_infos', id='desvenain_thomas', identity='M. Desvenain Thomas', address_1='24 rue des Trois Mollettes', address_2='C24', zipcode='59000', city='Lille') source_2 = api.content.create(self.portal, type='contact_infos', id='fretin_vincent', identity='M. Fretin Vincent', address_1='51 r Lac', address_2='', zipcode='59810', city='LESQUIN') content = api.content.create(self.portal, type='label_model', title=u"Modèle d'étiquette", file=NamedFile(data=open(TEST_LABEL_ODT).read(), filename=u'label.odt', contentType='application/vnd.oasis.opendocument.text'), relatedItems=[RelationValue(intids.getId(source_1)), RelationValue(intids.getId(source_2))], ) notify(ObjectModifiedEvent(content)) generated_stream = content.unrestrictedTraverse('@@getdocumentfusion')() self.assertTrue(generated_stream) self.assertEqual(self.portal.REQUEST.response['content-type'], 'application/pdf') generated_path = tempfile.mktemp(suffix='label.pdf') generated_file = open(generated_path, 'w') generated_file.write(generated_stream.read()) generated_file.close() txt_path = tempfile.mktemp(suffix='label.pdf') subprocess.call(['pdftotext', generated_path, txt_path]) txt = open(txt_path).read().replace(r'\xc2\xa0', ' ') # label 1 self.assertIn('M. DESVENAIN THOMAS', txt) self.assertIn('24 RUE DES TROIS MOLLETTES', txt) self.assertIn('C24', txt) self.assertIn(u'59000', txt) # label 2 self.assertIn('M. FRETIN VINCENT', txt) self.assertIn(u'59810', txt) self.assertIn(u'LESQUIN', txt) os.remove(txt_path) os.remove(generated_path)
def test_view_audio_tag(self): self.portal.invokeFactory('File', 'file') file = self.portal['file'] file.file = NamedFile() file.file.contentType = 'video/ogv' alsoProvides(self.request, IPloneAppContenttypesLayer) view = file.restrictedTraverse('@@file_view') rendered = view() self.assertTrue('</video>' in rendered)
def render(self): session = Session() anexo = session.query(db.Anexo).get(self.request.id) p = anexo.protocolo path_anexo = os.path.join(PATH_ANEXOS, ScopeID(), str(p.ano), str(p.id), str(anexo.id)) file_anexo = NamedFile(open(path_anexo, 'r'), filename=anexo.arquivo) cd = 'inline; filename="%s"' % anexo.arquivo.encode('utf-8') self.request.response.setHeader('Content-Disposition', cd) set_headers(file_anexo, self.request.response) return stream_data(file_anexo)
def test_should_detect_different_data(self): setRoles(self.portal, TEST_USER_ID, ['Manager']) self.portal.invokeFactory( testing.TEST_CONTENT_TYPE_ID, 'obj1', file=NamedFile(data='contents', filename=u'f.txt'), ) obj1 = self.portal['obj1'] self.portal.invokeFactory( testing.TEST_CONTENT_TYPE_ID, 'obj2', file=NamedFile(data='different contents', filename=u'f.txt'), ) obj2 = self.portal['obj2'] diff = namedfile.NamedFileBinaryDiff(obj1, obj2, 'file') self.assertTrue(IDifference.providedBy(diff)) self.assertFalse(diff.same)
def test_namedfile_field_serialization_returns_unicode(self): value = self.serialize( 'test_namedfile_field', NamedFile(data=u'Spam and eggs', contentType=u'text/plain', filename=u'test.txt')) self.assertTrue(isinstance(value, unicode), 'Not an <unicode>') self.assertEqual( self.doc1.absolute_url() + u'/@@download/test_namedfile_field', value)
def test_custom_email_template(self): """ Test mailer with custom template """ default_fields = api.content.create(self.portal, 'File', id='easyform_mail_body_default.pt') default_fields.file = NamedFile('Custom e-mail template!') mailer = get_actions(self.ff1)['mailer'] mailer.onSuccess({}, self.layer['request']) self.assertIn(u'Custom e-mail template!', self.messageText)
def test_custom_email_template(self): """ Test mailer with custom template """ default_fields = api.content.create(self.portal, "File", id="easyform_mail_body_default.pt") default_fields.file = NamedFile("Custom e-mail template!") mailer = get_actions(self.ff1)["mailer"] mailer.onSuccess({}, self.layer["request"]) self.assertIn(u"Custom e-mail template!", self.messageText)
def _make_namedfile(value, field, widget): """Return a NamedImage or NamedFile instance, if it isn't already one - e.g. when it's base64 encoded data. """ if isinstance(value, basestring) and IASCII.providedBy(field): filename, data = b64decode_file(value) if INamedImageWidget.providedBy(widget): value = NamedImage(data=data, filename=filename) else: value = NamedFile(data=data, filename=filename) return value
def toWidgetValue(self, value): if not isinstance(value, basestring): return None filename, data = b64decode_file(value) if INamedImageWidget.providedBy(self.widget): value = NamedImage(data=data, filename=filename) else: value = NamedFile(data=data, filename=filename) return value
def create_file(container, filename): current_dir = os.path.abspath(os.path.dirname(__file__)) file_path = os.path.join(current_dir, "profiles/demo/data/", filename) if os.path.isfile(file_path): contentType = mimetypes.guess_type(file_path)[0] title = os.path.basename(file_path) with open(file_path, "rb") as fd: file_obj = content.create(container=container, type="File", title=title) file_obj.file = NamedFile(data=fd, filename=title, contentType=contentType)
def test_namedfile_is_handeled_correctly_even_when_blobs_are_enabled(self): ftwdexterity.HAVE_BLOBS = True namedfile = create(Builder("namedfile") .having(named_file=NamedFile(data='NamedFile', filename=u'h\xc3\xb6lla.txt'))) ziprepresentation = getMultiAdapter((namedfile, self.request), interface=IZipRepresentation) files = list(ziprepresentation.get_files()) files_converted = [(path, stream.read()) for path, stream in files] self.assertEquals([(u'/h\xc3\xb6lla.txt', "NamedFile")], files_converted)
def test_dexterity_handles_non_blob_files_and_returns_tuple(self): ftwdexterity.HAVE_BLOBS = False namedfile = create(Builder("namedfile") .having(named_file=NamedFile(data='NamedFile', filename=u'h\xc3\xb6lla.txt'))) ziprepresentation = getMultiAdapter((namedfile, self.request), interface=IZipRepresentation) files = list(ziprepresentation.get_files()) files_converted = [(path, stream.read()) for path, stream in files] self.assertEquals([(u'/h\xc3\xb6lla.txt', "NamedFile")], files_converted)
def setup(self): name = ISettingsPortal.__identifier__ + '.background_image' background_image = api.portal.get_registry_record(name, default=None) if background_image is None: self.data = None return # set background media data for download filename, data = b64decode_file(background_image) self.filename = filename self.data = NamedFile(data=data, filename=filename) self.checksum = hashlib.sha1(data).hexdigest()
def test_with_file(self): self.expect(self.request.get('HTTP_USER_AGENT', ANY)).result('DEF') monk_file = NamedFile('bla bla', filename=u'test.txt') self.replay() set_attachment_content_disposition( self.request, 'Default Name', file=monk_file) self.assertEquals( self.header, ['text/plain', 7, 'attachment; filename="Default Name"'])
def afterSetUp(self): self.folder.invokeFactory("EasyForm", "ff1") self.ff1 = getattr(self.folder, "ff1") self.ff1.CSRFProtection = False # no csrf protection self.ff1.showAll = True field_template = api.content.create(self.layer["portal"], "File", id="easyform_default_fields.xml") with open(join(dirname(__file__), "fixtures", self.schema_fixture)) as f: filecontent = NamedFile(f.read(), contentType="application/xml") field_template.file = filecontent classImplements(BaseRequest, IFormLayer) validators.update_validators()
def setUp(self): portal = self.layer['portal'] setRoles(portal, TEST_USER_ID, ('Manager',)) portal.invokeFactory('emc.kb.folder', 'folder') portal['folder'].invokeFactory('emc.kb.kbfolder', 'kbfolder') portal['folder']['kbfolder'].invokeFactory('File', 'f1') file = portal['folder']['kbfolder'] file.file = NamedFile() file.title = "My File" file.description = "This is my file." self.portal = portal
def test_namedfile_field_serialization_returns_dict(self): value = self.serialize( 'test_namedfile_field', NamedFile(data=u'Spam and eggs', contentType=u'text/plain', filename=u'test.txt')) self.assertTrue(isinstance(value, dict), 'Not a <dict>') download_url = u'/'.join([ self.doc1.absolute_url(), u'@@download/test_namedfile_field']) self.assertEqual( {u'filename': u'test.txt', u'content-type': u'text/plain', u'size': 13, u'download': download_url}, value)
def test_no_widget_on_thankspage_fieldset(self): self.ff1.showAll = True field_template = api.content.create(self.layer['portal'], 'File', id='easyform_default_fields.xml') with open(join(dirname(__file__), 'fixtures', 'fieldset_form.xml')) as f: filecontent = NamedFile(f.read(), contentType='application/xml') field_template.file = filecontent data = {'front': 'hello front', 'back': 'hello back'} request = self.LoadRequestForm(**data) request.method = 'POST' form = EasyFormForm(self.ff1, request)() self.assertNotIn('<input id="form-widgets-back"', form)
def test_serialize_file(self): self.portal.invokeFactory('File', id='file1', title='File 1') self.portal.file1.file = NamedFile(data=u'Spam and eggs', contentType=u'text/plain', filename=u'test.txt') file_url = self.portal.file1.absolute_url() download_url = '{0}/@@download/file'.format(file_url) self.assertEqual( { u'filename': u'test.txt', u'content-type': u'text/plain', u'download': download_url, u'size': 13 }, self.serialize(self.portal.file1).get('file'))
def test_thankspage_radio(self): self.ff1.showAll = True field_template = api.content.create(self.layer['portal'], 'File', id='easyform_default_fields.xml') with open(join(dirname(__file__), 'fixtures', 'radio_form.xml')) as f: filecontent = NamedFile(f.read(), contentType='application/xml') field_template.file = filecontent data = {'yes': 'true', 'yes-empty-marker': 1} request = self.LoadRequestForm(**data) request.method = 'POST' form = EasyFormForm(self.ff1, request)() self.assertIn( '<span id="form-widgets-yes" class="radio-widget bool-field"><span class="selected-option">yes</span></span>', # noqa form)
def test_show_hidden_on_thankspage(self): self.ff1.showAll = True field_template = api.content.create(self.layer['portal'], 'File', id='easyform_default_fields.xml') with open(join(dirname(__file__), 'fixtures', 'hidden_form.xml')) as f: filecontent = NamedFile(f.read(), contentType='application/xml') field_template.file = filecontent data = {'hide': 'hello hidden'} request = self.LoadRequestForm(**data) request.method = 'POST' form = EasyFormForm(self.ff1, request)() self.assertIn( '<span id="form-widgets-hide" class="text-widget textline-field">hello hidden</span>', # noqa form)