Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/datastore/src/carquinyol/metadatastore.py
diff options
context:
space:
mode:
Diffstat (limited to 'datastore/src/carquinyol/metadatastore.py')
-rw-r--r--datastore/src/carquinyol/metadatastore.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/datastore/src/carquinyol/metadatastore.py b/datastore/src/carquinyol/metadatastore.py
new file mode 100644
index 0000000..5967017
--- /dev/null
+++ b/datastore/src/carquinyol/metadatastore.py
@@ -0,0 +1,60 @@
+import os
+
+from carquinyol import layoutmanager
+from carquinyol import metadatareader
+
+MAX_SIZE = 256
+_INTERNAL_KEYS = ['checksum']
+
+
+class MetadataStore(object):
+
+ def store(self, uid, metadata):
+ metadata_path = layoutmanager.get_instance().get_metadata_path(uid)
+ if not os.path.exists(metadata_path):
+ os.makedirs(metadata_path)
+ else:
+ for key in os.listdir(metadata_path):
+ if key not in _INTERNAL_KEYS:
+ os.remove(os.path.join(metadata_path, key))
+
+ metadata['uid'] = uid
+ for key, value in metadata.items():
+
+ # Hack to support activities that still pass properties named as
+ # for example title:text.
+ if ':' in key:
+ key = key.split(':', 1)[0]
+
+ f = open(os.path.join(metadata_path, key), 'w')
+ try:
+ if isinstance(value, unicode):
+ value = value.encode('utf-8')
+ elif not isinstance(value, basestring):
+ value = str(value)
+ f.write(value)
+ finally:
+ f.close()
+
+ def retrieve(self, uid, properties=None):
+ metadata_path = layoutmanager.get_instance().get_metadata_path(uid)
+ return metadatareader.retrieve(metadata_path, properties)
+
+ def delete(self, uid):
+ metadata_path = layoutmanager.get_instance().get_metadata_path(uid)
+ for key in os.listdir(metadata_path):
+ os.remove(os.path.join(metadata_path, key))
+ os.rmdir(metadata_path)
+
+ def get_property(self, uid, key):
+ metadata_path = layoutmanager.get_instance().get_metadata_path(uid)
+ property_path = os.path.join(metadata_path, key)
+ if os.path.exists(property_path):
+ return open(property_path, 'r').read()
+ else:
+ return None
+
+ def set_property(self, uid, key, value):
+ metadata_path = layoutmanager.get_instance().get_metadata_path(uid)
+ property_path = os.path.join(metadata_path, key)
+ open(property_path, 'w').write(value)