|
20 | 20 | import os |
21 | 21 | import sys |
22 | 22 | import tempfile |
| 23 | +import threading |
23 | 24 | import unittest |
24 | 25 |
|
25 | 26 | import exiv2 |
26 | 27 |
|
| 28 | +properties_lock = threading.Lock() |
| 29 | + |
27 | 30 |
|
28 | 31 | class TestPropertiesModule(unittest.TestCase): |
29 | 32 | key_name = 'Xmp.dc.description' |
@@ -83,21 +86,22 @@ def test_XmpProperties(self): |
83 | 86 | properties.propertyTitle(key) |
84 | 87 | with self.assertRaises(exiv2.Exiv2Error): |
85 | 88 | properties.propertyType(key) |
86 | | - if 'unittest-ft' in sys.argv[0]: |
87 | | - self.skipTest("don't test writing to global XMP namespaces") |
88 | | - namespaces = properties.registeredNamespaces() |
89 | | - self.assertIsInstance(namespaces, dict) |
90 | | - self.assertGreater(len(namespaces), 0) |
91 | | - self.assertEqual(namespaces[self.prefix_name], self.namespace) |
| 89 | + # registeredNamespaces is not thread safe in exiv2 <= 0.28.x |
| 90 | + if exiv2.testVersion(0, 29, 0) or 'unittest-ft' not in sys.argv[0]: |
| 91 | + namespaces = properties.registeredNamespaces() |
| 92 | + self.assertIsInstance(namespaces, dict) |
| 93 | + self.assertGreater(len(namespaces), 0) |
| 94 | + self.assertEqual(namespaces[self.prefix_name], self.namespace) |
92 | 95 | # these don't seem to have any effect on properties.registeredNamespaces |
93 | 96 | prefix = 'exmpl' |
94 | 97 | namespace = 'http://example.com/' |
95 | | - properties.registerNs(namespace, prefix) |
96 | | - self.assertEqual(properties.ns(prefix), namespace) |
97 | | - properties.unregisterNs(namespace) |
98 | | - with self.assertRaises(exiv2.Exiv2Error): |
99 | | - properties.ns(prefix) |
100 | | - properties.unregisterNs() |
| 98 | + with properties_lock: |
| 99 | + properties.registerNs(namespace, prefix) |
| 100 | + self.assertEqual(properties.ns(prefix), namespace) |
| 101 | + properties.unregisterNs(namespace) |
| 102 | + with self.assertRaises(exiv2.Exiv2Error): |
| 103 | + properties.ns(prefix) |
| 104 | + properties.unregisterNs() |
101 | 105 |
|
102 | 106 | def test_XmpPropertyInfo(self): |
103 | 107 | key = exiv2.XmpKey(self.key_name) |
|
0 commit comments