def test_write_new_property(self): """Corresponds to test-write-new-property.cpp""" filename = pkg_resources.resource_filename(__name__, "samples/test1.xmp") with open(filename, 'r') as fptr: strbuffer = fptr.read() xmp = XMPMeta() xmp.parse_from_str(strbuffer, xmpmeta_wrap=False) XMPMeta.register_namespace(NS_CC, "cc") reg_prefix = XMPMeta.get_namespace_for_prefix("cc") self.assertEqual(reg_prefix, NS_CC) reg_prefix = XMPMeta.get_prefix_for_namespace(NS_CC) self.assertEqual(reg_prefix, "cc:") xmp.set_property(NS_CC, "License", "Foo") self.assertEqual(xmp.get_property(NS_CC, "License"), "Foo") the_dt = datetime.datetime(2005, 12, 25, 12, 42, 42, tzinfo=pytz.utc) xmp.set_property_datetime(NS_EXIF, "DateTimeOriginal", the_dt) self.assertEqual(xmp.get_property(NS_EXIF, "DateTimeOriginal"), "2005-12-25T12:42:42") prop = xmp.get_property_datetime(NS_EXIF, "DateTimeOriginal") self.assertEqual(prop.year, 2005) self.assertEqual(prop.minute, 42) self.assertEqual(prop.tzinfo, pytz.utc)
def test_write_new_struct_in_array(self): filename = pkg_resources.resource_filename(__name__, "samples/test1.xmp") with open(filename, 'r') as fptr: strbuffer = fptr.read() xmp = XMPMeta() xmp.parse_from_str(strbuffer) prefix = xmp.get_prefix_for_namespace(NS_DC) xmp.append_array_item(NS_DC, prefix + 'creator', None, prop_value_is_struct=True) xmp.set_property(NS_DC, prefix + 'creator[2]/' + prefix + 'TestProp', '100') self.assertTrue(xmp.does_property_exist(NS_DC, prefix + 'creator[2]')) prop = xmp.get_property(NS_DC, prefix + 'creator[2]/%sTestProp' % prefix) self.assertEqual(prop, '100') xpath = prefix + 'creator' xmp.set_array_item(NS_DC, xpath, 3, None, prop_value_is_struct=True) xpath += '[3]/%sTestProp' % prefix xmp.set_property(NS_DC, xpath, '200') self.assertTrue(xmp.does_property_exist(NS_DC, xpath)) prop = xmp.get_property(NS_DC, xpath) self.assertEqual(prop, '200') xpath = prefix + 'TestStruct/' + prefix + 'TestValue' xmp.set_property(NS_DC, xpath, '300') self.assertTrue(xmp.does_property_exist(NS_DC, xpath)) prop = xmp.get_property(NS_DC, xpath) self.assertEqual(prop, '300')
def test_parse_from_str_3_bytes_per_codepoint(self): """ Verify that we can create and read back utf-8 where each character takes 3 bytes to encode. """ xmp = XMPMeta() rdf = xmpcoverage.RDFCoverage # Replace 'Simple2 value' with 'शिव' # This is 'Shiva' in Devanagari # शिव has code points [2358, 2367, 2357] expectedValue = u'शिव' if sys.hexversion < 0x03000000: rdf = unicode(rdf[0:272]) + expectedValue + unicode(rdf[285:]) #rdf = rdf[0:272] + expectedValue.encode('utf-8') + rdf[285:] #rdf = unicode(rdf) else: rdf = rdf[0:272] + expectedValue + rdf[285:] xmp.parse_from_str(rdf, xmpmeta_wrap=True) prop = xmp.get_property(xmpcoverage.NS1, "SimpleProp2") self.assertEqual(prop, expectedValue) del xmp
def get_xmp_version(filename): meta = pikepdf.open(filename).open_metadata() xmp = XMPMeta(xmp_str=str(meta)) try: return xmp.get_property('http://ns.adobe.com/pdf/1.3/', 'PDFVersion') except XMPError: return ''
def test_parse_str(self): xmp = XMPMeta() xmp.parse_from_str( xmpcoverage.RDFCoverage, xmpmeta_wrap=True ) prop = xmp.get_property( xmpcoverage.NS1, "SimpleProp1" ) self.assertEqual(prop, "Simple1 value" ) self.assertEqual(prop, u"Simple1 value" ) del xmp
def test_parse_from_str_3_bytes_per_codepoint(self): """ Verify that we can create and read back utf-8 where each character takes 3 bytes to encode. """ xmp = XMPMeta() rdf = xmpcoverage.RDFCoverage # Replace 'Simple2 value' with 'शिव' # This is 'Shiva' in Devanagari # शिव has code points [2358, 2367, 2357] expectedValue = u'शिव' if sys.hexversion < 0x03000000: rdf = unicode(rdf[0:272]) + expectedValue + unicode(rdf[285:]) #rdf = rdf[0:272] + expectedValue.encode('utf-8') + rdf[285:] #rdf = unicode(rdf) else: rdf = rdf[0:272] + expectedValue + rdf[285:] xmp.parse_from_str(rdf, xmpmeta_wrap=True ) prop = xmp.get_property(xmpcoverage.NS1, "SimpleProp2" ) self.assertEqual(prop, expectedValue) del xmp
def test_parse_str(self): xmp = XMPMeta() xmp.parse_from_str(xmpcoverage.RDFCoverage, xmpmeta_wrap=True) prop = xmp.get_property(xmpcoverage.NS1, "SimpleProp1") self.assertEqual(prop, "Simple1 value") self.assertEqual(prop, u"Simple1 value") del xmp
def test_text_property_450(self): xmp = XMPMeta() xmp.parse_from_str( xmpcoverage.LongTextProperty, xmpmeta_wrap=True ) headline = xmp.get_property("http://ns.adobe.com/photoshop/1.0/", 'Headline' ) self.assertEqual( headline[-5:], "=END=" ) self.assertTrue(len(headline) > 450, "Not all text was extracted from headline property.")
def test_shorthand_rdf(self): """ Tests pass so long as no error is issued. """ xmp = XMPMeta() xmp.parse_from_str(xmpcoverage.ShorthandRDF, xmpmeta_wrap=True) prop = xmp.get_property("http://ns.adobe.com/tiff/1.0", "Model") self.assertEqual(prop, "Canon PowerShot S300") del xmp
def test_text_property_450(self): xmp = XMPMeta() xmp.parse_from_str(xmpcoverage.LongTextProperty, xmpmeta_wrap=True) headline = xmp.get_property("http://ns.adobe.com/photoshop/1.0/", 'Headline') self.assertEqual(headline[-5:], "=END=") self.assertTrue( len(headline) > 450, "Not all text was extracted from headline property.")
def test_shorthand_rdf(self): """ Tests pass so long as no error is issued. """ xmp = XMPMeta() xmp.parse_from_str( xmpcoverage.ShorthandRDF, xmpmeta_wrap=True ) prop = xmp.get_property( "http://ns.adobe.com/tiff/1.0", "Model" ) self.assertEqual(prop, "Canon PowerShot S300" ) del xmp
def test_get_localized_text(self): xmp = XMPMeta() xmp.parse_from_str(xmpcoverage.RDFCoverage, xmpmeta_wrap=True) prop = xmp.get_property(xmpcoverage.NS1, "SimpleProp2") self.assertEqual(prop, "Simple2 value") ltext = xmp.get_localized_text(xmpcoverage.NS1, "ArrayProp2", 'x-one', 'x-one') self.assertEqual(ltext, "Item2.1 value") del xmp
def test_get_localized_text(self): xmp = XMPMeta() xmp.parse_from_str(xmpcoverage.RDFCoverage, xmpmeta_wrap=True ) prop = xmp.get_property(xmpcoverage.NS1, "SimpleProp2" ) self.assertEqual(prop, "Simple2 value" ) ltext = xmp.get_localized_text(xmpcoverage.NS1, "ArrayProp2", 'x-one', 'x-one' ) self.assertEqual(ltext, "Item2.1 value" ) del xmp
def test_get_localized_text(self): """ Verify that unicode string literals are properly interpreted. """ xmp = XMPMeta() xmp.parse_from_str(xmpcoverage.RDFCoverage, xmpmeta_wrap=True) prop = xmp.get_property(xmpcoverage.NS1, "SimpleProp2") self.assertEqual(prop, u'Simple2 value') ltext = xmp.get_localized_text(xmpcoverage.NS1, "ArrayProp2", 'x-one', 'x-one') self.assertEqual(ltext, u'Item2.1 value') del xmp
def test_get_localized_text(self): """ Verify that unicode string literals are properly interpreted. """ xmp = XMPMeta() xmp.parse_from_str(xmpcoverage.RDFCoverage, xmpmeta_wrap=True ) prop = xmp.get_property(xmpcoverage.NS1, "SimpleProp2" ) self.assertEqual(prop, u'Simple2 value' ) ltext = xmp.get_localized_text(xmpcoverage.NS1, "ArrayProp2", 'x-one', 'x-one' ) self.assertEqual(ltext, u'Item2.1 value' ) del xmp
def test_2bytes_codepoint(self): """ Verify that we can create and read back utf-8 where some characters takes 2 bytes to encode. """ xmp = XMPMeta() rdf = xmpcoverage.RDFCoverage # Replace 'Simple2 value' with 'stürm' # ü has code point 252, so takes 5+1=6 bytes to encode. expectedValue = u'stürm' if sys.hexversion < 0x03000000: rdf = unicode(rdf[0:272]) + expectedValue + unicode(rdf[285:]) else: rdf = rdf[0:272] + expectedValue + rdf[285:] xmp.parse_from_str(rdf, xmpmeta_wrap=True ) prop = xmp.get_property(xmpcoverage.NS1, "SimpleProp2" ) self.assertEqual(prop, expectedValue) del xmp
def test_2bytes_codepoint(self): """ Verify that we can create and read back utf-8 where some characters takes 2 bytes to encode. """ xmp = XMPMeta() rdf = xmpcoverage.RDFCoverage # Replace 'Simple2 value' with 'stürm' # ü has code point 252, so takes 5+1=6 bytes to encode. expectedValue = u'stürm' if sys.hexversion < 0x03000000: rdf = unicode(rdf[0:272]) + expectedValue + unicode(rdf[285:]) else: rdf = rdf[0:272] + expectedValue + rdf[285:] xmp.parse_from_str(rdf, xmpmeta_wrap=True) prop = xmp.get_property(xmpcoverage.NS1, "SimpleProp2") self.assertEqual(prop, expectedValue) del xmp
def test_can_inject_xmp_info_png(self): """Verify behavior of being able to inject XMP into barren PNG""" # See issue 40 srcfile = pkg.resource_filename(__name__, os.path.join("fixtures", "zeros.png")) with tempfile.NamedTemporaryFile() as tfile: shutil.copyfile(srcfile, tfile.name) xmpf = XMPFiles() xmpf.open_file(tfile.name, open_forupdate=True) xmp = XMPMeta() xmp.set_property(NS_PHOTOSHOP, "ICCProfile", "foo") xmpf.put_xmp(xmp) xmpf.close_file() xmpf.open_file(tfile.name, usesmarthandler=True) xmp = xmpf.get_xmp() prop = xmp.get_property(NS_PHOTOSHOP, "ICCProfile") xmpf.close_file() self.assertEqual(prop, "foo")
def test_exempi_core(self): """Corresponds to test_exempi.TestExempi.test_exempi_core""" filename = pkg_resources.resource_filename(__name__, "samples/test1.xmp") with open(filename, 'r') as fptr: strbuffer = fptr.read() xmp = XMPMeta() xmp.parse_from_str(strbuffer) self.assertTrue(xmp.does_property_exist(NS_TIFF, 'Make')) self.assertFalse(xmp.does_property_exist(NS_TIFF, 'Foo')) prop = xmp.get_property(NS_TIFF, 'Make') self.assertEqual(prop, 'Canon') xmp.set_property(NS_TIFF, 'Make', 'Leica') prop = xmp.get_property(NS_TIFF, 'Make') self.assertEqual(prop, 'Leica') # Some tests correspond to option masks not currently returned via # this interface. item = xmp.get_localized_text(NS_DC, 'rights', None, 'x-default') self.assertEqual(item, "2006, Hubert Figuiere") xmp.set_localized_text(NS_DC, 'rights', 'en', 'en-CA', 'Foo bar') item = xmp.get_localized_text(NS_DC, 'rights', 'en', 'en-US') # Can't look at the actual lang, unlike the original test. self.assertEqual(item, 'Foo bar') xmp.delete_localized_text(NS_DC, 'rights', 'en', 'en-CA') self.assertFalse(xmp.does_property_exist(NS_DC, "rights[1]")) xmp.set_array_item(NS_DC, "creator", 2, "foo") xmp.append_array_item(NS_DC, "creator", "bar") prop = xmp.get_array_item(NS_DC, "creator", 3) self.assertEqual(prop, "bar") xmp.delete_property(NS_DC, "creator[3]") self.assertFalse(xmp.does_property_exist(NS_DC, "creator[3]")) prop = xmp.get_property(NS_EXIF, "DateTimeOriginal") self.assertEqual(prop, "2006-12-07T23:20:43-05:00") the_prop = xmp.get_property_datetime(NS_EXIF, "DateTimeOriginal") self.assertEqual(the_prop.year, 2006) self.assertEqual(the_prop.minute, 20) self.assertEqual(the_prop.tzinfo, pytz.utc) prop = xmp.get_property(NS_XAP, "Rating") self.assertEqual(prop, "3") prop = xmp.get_property_float(NS_CAMERA_RAW_SETTINGS, "SharpenRadius") self.assertEqual(prop, 1.0) xmp.set_property_float(NS_CAMERA_RAW_SETTINGS, "SharpenRadius", 2.5) prop = xmp.get_property_float(NS_CAMERA_RAW_SETTINGS, "SharpenRadius") self.assertEqual(prop, 2.5) prop = xmp.get_property_bool(NS_CAMERA_RAW_SETTINGS, "AlreadyApplied") self.assertFalse(prop) xmp.set_property_bool(NS_CAMERA_RAW_SETTINGS, "AlreadyApplied", True) prop = xmp.get_property_bool(NS_CAMERA_RAW_SETTINGS, "AlreadyApplied") self.assertTrue(prop) prop = xmp.get_property_int(NS_EXIF, "MeteringMode") self.assertEqual(prop, 5) xmp.set_property_int(NS_EXIF, "MeteringMode", 10) prop = xmp.get_property_long(NS_EXIF, "MeteringMode") self.assertEqual(prop, 10) xmp.set_property_long(NS_EXIF, "MeteringMode", 32) prop = xmp.get_property_int(NS_EXIF, "MeteringMode") self.assertEqual(prop, 32)