eggification
[Photo.git] / Products / Photo / standards / xmp / __init__.py
diff --git a/Products/Photo/standards/xmp/__init__.py b/Products/Photo/standards/xmp/__init__.py
new file mode 100755 (executable)
index 0000000..604685f
--- /dev/null
@@ -0,0 +1,42 @@
+from os.path import join
+from Globals import package_home
+from _namespaces import namespaces
+
+home = package_home(globals())
+
+f = file(join(home, 'accessors.csv'))
+lines = f.readlines()
+f.close()
+
+accessors = {}
+accessorIds = {}
+rdfKwnowTypes = {'Seq':True, 'prop':True, 'Alt':True, 'Bag':True}
+
+prefix2Ns = dict([item[::-1] for item in namespaces.items()])
+
+for l in [l for l in lines if not l.startswith('#')] :
+       fields = [f.strip() for f in l.split(',')]
+
+       if not filter(None, fields) : continue
+       
+       cat, caption, name, root, rdfType = fields
+
+       accessor = { 'id' : name.split(':')[1]
+                          , 'root' : root
+                          , 'rdfType' : rdfType
+                          , 'namespace' : prefix2Ns.get(name.split(':')[0])
+                               }
+
+       assert not accessors.has_key(name), "Duplicate definition for %r" % name
+       assert name.count(':') <=1, "Ambiguous name %r" % name
+       assert not accessorIds.has_key(accessor['id']), "Ambiguous name: %r" % name
+       assert rdfKwnowTypes.has_key(rdfType), "Unknown rdf type: %r" % rdfType
+       if rdfType == 'prop' :
+               assert prefix2Ns.has_key(name.split(':')[0]), \
+                       "Attribute name %r don't match a known namespace prefix" % name
+       
+       accessors[name] = accessor
+       accessorIds[accessor['id']] = True
+
+
+__all__ = ('namespaces', 'prefix2Ns', 'accessors')