def setUp(self):
        self.portal = self.layer['portal']
        self.request = self.layer['request']
        setRoles(self.portal, TEST_USER_ID, ['Manager'])

        self.browser = Browser(self.portal)

        # login as siteowner
        self.browser.open(self.portal.absolute_url() + '/login_form')
        self.browser.getControl(name='__ac_name').value = SITE_OWNER_NAME
        self.browser.getControl(name='__ac_password').value = SITE_OWNER_PASSWORD
        self.browser.getControl(name='submit').click()

        # create testdata
        dirname, filename = os.path.split(os.path.abspath(__file__))

        self.portal.invokeFactory('Folder', 'folder', title="Test Title")
        self.folder = self.portal['folder']

        # image with exif/iptc
        path = os.path.join(dirname, "test_images", "metadata-test-image-L.jpg")
        self.folder.invokeFactory('Image', 'testimage', image=image_by_path(path))
        self.exif_image = self.folder['testimage']

        # image with xmp
        path = os.path.join(dirname, "test_images", "small_IMG_5097.jpg")
        self.folder.invokeFactory('Image', 'testimage2', image=image_by_path(path))
        self.xmp_image = self.folder['testimage2']

        transaction.commit()
    def test_meta_tags(self):
        self.config.add_exif_tag('Image Copyright')
        self.config.add_iptc_tag('5')
        self.config.add_iptc_tag('25')

        self.portal.invokeFactory('Folder', 'test-folder', title="Test Title")

        folder = self.portal['test-folder']

        dirname, filename = os.path.split(os.path.abspath(__file__))

        path = os.path.join(dirname, "test_images", "metadata-test-image-L.jpg")

        folder.invokeFactory('Image', 'testimage', image=image_by_path(path))

        image = folder['testimage']

        meta = image_to_meta(image)

        exif = meta['exif']
        iptc = meta['iptc'].data

        subjects = image.Subject()

        self.assertTrue(exif['Image Copyright'].printable in subjects)

        self.assertFalse(exif['EXIF FlashPixVersion'].printable in subjects)

        self.assertTrue(iptc[5] in subjects)
        # iptc[25 is a list
        self.assertTrue(iptc[25][0] in subjects)
    def test_get_image(self):
        view = view = getMultiAdapter(
            (self.folder, self.request),
            name='folder_contents'
        )

        result = view.image_html()
        self.assertFalse('img' in result)

        dirname, filename = os.path.split(os.path.abspath(__file__))

        path = os.path.join(dirname, "test_images", "small_IMG_5097.jpg")

        self.folder.invokeFactory('Image', 'testimage', image=image_by_path(path))

        image = self.folder['testimage']

        self.request.form.update({'uid': image.UID()})

        view = view = getMultiAdapter(
            (self.folder, self.request),
            name='folder_contents'
        )

        result = view.image_html()
        self.assertTrue('img' in result)
    def test_xmp_and_ignored_list(self):
        self.config.xmp_fields = [{
            'regex': '',
            'field': u'{http://purl.org/dc/elements/1.1/}subject',
            'format': ''
        }]
        self.config.ignored_tags = [{'tag': 'Garde'}]

        self.portal.invokeFactory('Folder', 'test-folder', title="Test Title")

        folder = self.portal['test-folder']

        dirname, filename = os.path.split(os.path.abspath(__file__))

        path = os.path.join(dirname, "test_images", "small_IMG_5097.jpg")

        folder.invokeFactory('Image', 'testimage', image=image_by_path(path))

        image = folder['testimage']

        subjects = image.Subject()

        self.assertTrue('Inthronisation' in subjects)
        self.assertTrue('Hohenfurch' in subjects)
        self.assertFalse('Garde' in subjects)
    def test_regex_no_match(self):
        self.config.exif_fields = [{
            'regex': '(\w+) (\w+)',
            'field': u'Image Copyright',
            'format': 'hello_{1}_{0}'
        }]

        self.portal.invokeFactory('Folder', 'test-folder', title="Test Title")

        folder = self.portal['test-folder']

        dirname, filename = os.path.split(os.path.abspath(__file__))

        path = os.path.join(dirname, "test_images", "small_IMG_5097.jpg")

        folder.invokeFactory('Image', 'testimage', image=image_by_path(path))

        image = folder['testimage']

        meta = image_to_meta(image)

        exif = meta['exif']

        subjects = image.Subject()

        self.assertFalse(exif['Image Copyright'].printable in subjects)
        self.assertTrue(subjects)
    def test_meta_tags_with_only_format(self):
        self.config.exif_fields = [{
            'regex': None,
            'field': u'Image Copyright',
            'format': 'hello_{0}'
        }]

        self.portal.invokeFactory('Folder', 'test-folder', title="Test Title")

        folder = self.portal['test-folder']

        dirname, filename = os.path.split(os.path.abspath(__file__))

        path = os.path.join(dirname, "test_images", "metadata-test-image-L.jpg")

        folder.invokeFactory('Image', 'testimage', image=image_by_path(path))

        image = folder['testimage']

        meta = image_to_meta(image)

        exif = meta['exif']

        subjects = image.Subject()

        self.assertFalse(exif['Image Copyright'].printable in subjects)
        self.assertTrue('hello_' + exif['Image Copyright'].printable in subjects)
    def test_rotation_pillow(self):
        self.portal.invokeFactory('Folder', 'test-folder', title="Test Title")

        folder = self.portal['test-folder']

        dirname, filename = os.path.split(os.path.abspath(__file__))

        path = os.path.join(dirname, "test_images", "Landscape_5.jpg")

        folder.invokeFactory('Image', 'testimage')

        image = folder['testimage']

        image.image = image_by_path(path)

        rotate_with_pillow(image)

        self.assertTrue(image.image._height < image.image._width)
    def test_rotation_and_filename_tags(self):
        self.portal.invokeFactory('Folder', 'test-folder', title="Test Title")

        folder = self.portal['test-folder']

        dirname, filename = os.path.split(os.path.abspath(__file__))

        path = os.path.join(dirname, "test_images", "Landscape_5.jpg")

        folder.invokeFactory('Image', 'testimage', image=image_by_path(path),
                             title="Different Title")

        image = folder['testimage']

        self.assertTrue(image.image._height < image.image._width)
        subjects = image.Subject()

        self.assertTrue('Different' in subjects)
        self.assertTrue('Title' in subjects)
        self.assertFalse('Landscape_5' in subjects)