def test_get_contenttype(self): self.assertEqual(get_contenttype(NamedImage(getFile('image.gif').read(), contentType='image/gif')), 'image/gif') self.assertEqual(get_contenttype(NamedImage(getFile('image.gif').read(), filename=u'image.gif')), 'image/gif') self.assertEqual(get_contenttype( NamedImage(getFile('notimage.doc').read(), filename=u'notimage.doc')), 'application/msword')
def test_get_contenttype(self): self.assertEqual( get_contenttype( NamedImage(getFile('image.gif').read(), contentType='image/gif')), 'image/gif') self.assertEqual( get_contenttype( NamedImage(getFile('image.gif').read(), filename=u'image.gif')), 'image/gif') self.assertEqual( get_contenttype( NamedImage(getFile('notimage.doc').read(), filename=u'notimage.doc')), 'application/msword')
def afterSetUp(self): data = getFile('image.gif').read() item = DummyContent() item.image = NamedImage(data, 'image/gif', u'image.gif') self.app._setOb('item', item) self.item = self.app.item self.scaling = ImageScaling(self.app.item, None)
def testImageValidation(self): from plone.namedfile.field import InvalidImageFile,\ validate_image_field class FakeField(object): __name__ = 'logo' # field is empty validate_image_field(FakeField(), None) # field has an empty file image = self._makeImage() self.assertRaises( InvalidImageFile, validate_image_field, FakeField(), image) # field has an image file image._setData(zptlogo) validate_image_field(FakeField(), image) notimage = NamedImage(getFile('notimage.doc').read(), filename=u'notimage.doc') self.assertRaises( InvalidImageFile, validate_image_field, FakeField(), notimage)
def afterSetUp(self): data = getFile('image.gif').read() item = DummyContent() item.image = NamedImage(data, 'image/gif', u'image.gif') self.app._setOb('item', item) self.item = self.app.item self.view = self.item.unrestrictedTraverse('@@images') self._orig_sizes = ImageScaling._sizes
def testScaleInvalidation(self): # first get the scale of the original image self.scaling.available_sizes = {'foo': (23,23)} foo1 = self.scaling.scale('image', scale='foo') # now upload a new one and make sure the scale has changed data = getFile('image.jpg').read() self.item.image = NamedImage(data, 'image/jpeg', u'image.jpg') foo2 = self.scaling.scale('image', scale='foo') self.failIf(foo1.data == foo2.data, 'scale not updated?')
def testScaleInvalidation(self): # first get the scale of the original image self.scaling.available_sizes = {'foo': (23, 23)} foo1 = self.scaling.scale('image', scale='foo') # now upload a new one and make sure the scale has changed data = getFile('image.jpg').read() self.item.image = NamedImage(data, 'image/jpeg', u'image.jpg') foo2 = self.scaling.scale('image', scale='foo') self.failIf(foo1.data == foo2.data, 'scale not updated?')
def testScaleInvalidation(self): # first view the thumbnail of the original image ImageScaling._sizes = {'thumb': (128,128)} uid1, ext, width1, height1 = self.traverse('image/thumb') # now upload a new one and make sure the thumbnail has changed data = getFile('image.jpg').read() self.item.image = NamedImage(data, 'image/jpeg', u'image.jpg') uid2, ext, width2, height2 = self.traverse('image/thumb') self.assertNotEqual(uid1, uid2, 'thumb not updated?') # the height also differs as the original image had a size of 200, 200 # whereas the updated one has 500, 200... self.assertEqual(width1, width2) self.assertNotEqual(height1, height2)
def testScaleInvalidation(self): # first view the thumbnail of the original image ImageScaling._sizes = {'thumb': (128, 128)} uid1, ext, width1, height1 = self.traverse('image/thumb') # now upload a new one and make sure the thumbnail has changed data = getFile('image.jpg').read() self.item.image = NamedImage(data, 'image/jpeg', u'image.jpg') uid2, ext, width2, height2 = self.traverse('image/thumb') self.assertNotEqual(uid1, uid2, 'thumb not updated?') # the height also differs as the original image had a size of 200, 200 # whereas the updated one has 500, 200... self.assertEqual(width1, width2) self.assertNotEqual(height1, height2)
def testPublishThumbViaName(self): ImageScaling._sizes = {'thumb': (128,128)} # make sure traversing works as is and with scaling credentials = self.getCredentials() # first the field without a scale name response = self.publish('/item/@@images/image', basic=credentials) self.assertEqual(response.getStatus(), 200) self.assertEqual(response.getBody(), getFile('image.gif').read()) self.assertEqual(response.getHeader('Content-Type'), 'image/gif') # and last a scaled version response = self.publish('/item/@@images/image/thumb', basic=credentials) self.assertEqual(response.getStatus(), 200) self.assertEqual(response.getHeader('Content-Type'), 'image/jpeg') self.assertImage(response.getBody(), 'JPEG', (128, 128))
def testPublishThumbViaName(self): ImageScaling._sizes = {'thumb': (128, 128)} # make sure traversing works as is and with scaling credentials = self.getCredentials() # first the field without a scale name response = self.publish('/item/@@images/image', basic=credentials) self.assertEqual(response.getStatus(), 200) self.assertEqual(response.getBody(), getFile('image.gif').read()) self.assertEqual(response.getHeader('Content-Type'), 'image/gif') # and last a scaled version response = self.publish('/item/@@images/image/thumb', basic=credentials) self.assertEqual(response.getStatus(), 200) self.assertEqual(response.getHeader('Content-Type'), 'image/jpeg') self.assertImage(response.getBody(), 'JPEG', (128, 128))
def testImageValidation(self): from plone.namedfile.field import InvalidImageFile,\ validate_image_field class FakeField(object): __name__ = 'logo' # field is empty validate_image_field(FakeField(), None) # field has an empty file image = self._makeImage() self.assertRaises(InvalidImageFile, validate_image_field, FakeField(), image) # field has an image file image._setData(zptlogo) validate_image_field(FakeField(), image) notimage = NamedImage(getFile('notimage.doc').read(), filename=u'notimage.doc') self.assertRaises(InvalidImageFile, validate_image_field, FakeField(), notimage)
def demo_steps(context): """ Run steps to prepare a demo. """ if context.readDataFile('s17.employee-demo.txt') is None: return portal = context.getSite() portal.invokeFactory('Folder', 'employees') folder = portal['employees'] folder.title = 'Employees' pw = getToolByName(portal, 'portal_workflow') list_users = [{'name':'marcelo-santos', 'password':'******', 'number': '1', 'birthday': (1985, 2, 17)}, {'name':'marcelo-alves', 'password':'******', 'number': '2', 'birthday': (1983, 6, 01)}, {'name':'julia-alvarez', 'password':'******', 'number': '3', 'birthday': (1988, 10, 26)}, {'name':'juan-perez', 'password':'******', 'number': '4', 'birthday': (1981, 1, 15)}, {'name':'gustavo-roner', 'password':'******', 'number': '5', 'birthday': (1986, 2, 15)}] for user in list_users: create_user(user['name'], user['password'], portal) # Set behaviors to employee fti = queryUtility(IDexterityFTI, name='Employee') behaviors = fti.behaviors + \ tuple(['s17.person.behaviors.user.IPloneUser', 's17.person.behaviors.contact.IContactInfo']) fti.behaviors = tuple(behaviors) for user in list_users: employee = user['name'] fullname = employee.split('-') birthday = user['birthday'] image = os.path.join(os.path.dirname(__file__), 'profiles', 'demo', 'images', 'picture%s.png' % user['number']) data = getFile(image).read() folder.invokeFactory('Employee', employee, birthday=datetime.date(datetime(birthday[0], birthday[1], birthday[2])), picture=NamedImage(data), given_name=fullname[0].capitalize(), surname=fullname[1].capitalize(), gender=u'm', ) if (employee == 'julia-alvarez'): folder[employee].gender = 'f' p1_contact = IContactInfo(folder[employee]) p1_contact.emails = [{'category': u'work', 'data': u'*****@*****.**' % employee.replace('-', '.')}, {'category': u'home', 'data': u'*****@*****.**' % employee.replace('-', '.')}] p1_contact.instant_messengers = [{'category': u'skype', 'data': u'%s' % employee.replace('-', '_')}] p1_contact.telephones = [{'category': 'home', 'data': '+5511555.1213'}, {'category': 'work', 'data': '+5511316.9876'}] p1_ploneuser = IPloneUser(folder[employee]) p1_ploneuser.user_name = employee folder[employee].reindexObject() review_state = pw.getStatusOf(folder[employee], 'review_state') if not review_state == 'internally_published': pw.doActionFor(folder[employee], 'publish_internally') # publish folder. Folder must have intranet_workflow assigned. review_state = pw.getStatusOf(folder, 'review_state') folder_wchain = pw.getChainFor(folder) if folder_wchain == 'intranet_workflow' and \ review_state != 'internally_published': pw.doActionFor(folder, 'publish_internally') import transaction transaction.commit()
def demo_steps(context): """ Run steps to prepare a demo. """ if context.readDataFile('s17.person-demo.txt') is None: return portal = context.getSite() portal.invokeFactory('Folder', 'Persons') folder = portal['Persons'] list_users = [{'name': 'marcelo-santos', 'password': '******', 'number': '1', 'birthday': (1985, 2, 17)}, {'name': 'marcelo-alves', 'password': '******', 'number': '2', 'birthday': (1983, 6, 01)}, {'name': 'julia-alvarez', 'password': '******', 'number': '3', 'birthday': (1988, 10, 26)}, {'name': 'juan-perez', 'password': '******', 'number': '4', 'birthday': (1981, 1, 15)}, {'name': 'gustavo-roner', 'password': '******', 'number': '5', 'birthday': (1986, 2, 15)}] for user in list_users: create_user(user['name'], user['password'], portal) # Set behaviors to person behaviors = ['s17.person.behaviors.user.IPloneUser', 's17.person.behaviors.contact.IContactInfo'] fti = queryUtility(IDexterityFTI, name='Person') fti.behaviors = tuple(behaviors) for user in list_users: person = user['name'] fullname = person.split('-') birthday = user['birthday'] image = os.path.join( os.path.dirname(__file__), 'profiles', 'demo', 'images', 'picture%s.png' % user['number']) data = getFile(image).read() folder.invokeFactory( 'Person', person, birthday=datetime.date(datetime(birthday[0], birthday[1], birthday[2])), picture=NamedImage(data), given_name=fullname[0].capitalize(), surname=fullname[1].capitalize(), gender=u'm', ) if (person == 'julia-alvarez'): folder[person].gender = 'f' p1_contact = IContactInfo(folder[person]) p1_contact.emails = [ {'category': u'work', 'data': u'*****@*****.**' % person.replace('-', '.')}, {'category': u'home', 'data': u'*****@*****.**' % person.replace('-', '.')}, ] p1_contact.instant_messengers = [ {'category': u'skype', 'data': u'%s' % person.replace('-', '_')}, ] p1_contact.telephones = [ {'category': 'home', 'data': '+5511555.1213'}, {'category': 'work', 'data': '+5511316.9876'}, ] p1_ploneuser = IPloneUser(folder[person]) p1_ploneuser.user_name = person folder[person].reindexObject() review_state = folder[person].portal_workflow.getInfoFor(folder[person], 'review_state') if not review_state == 'published': folder[person].portal_workflow.doActionFor(folder[person], 'publish') review_state = folder.portal_workflow.getInfoFor(folder, 'review_state') if not review_state == 'published': folder.portal_workflow.doActionFor(folder, 'publish') import transaction transaction.commit()