Example #1
0
 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')
Example #2
0
 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')
Example #3
0
 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)
Example #4
0
 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)
Example #5
0
    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)
Example #6
0
 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
Example #7
0
 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
Example #8
0
 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?')
Example #9
0
 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?')
Example #10
0
 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)
Example #11
0
 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)
Example #12
0
 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))
Example #13
0
 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))
Example #14
0
    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()