diff options
author | Tomeu Vizoso <tomeu@sugarlabs.org> | 2009-02-04 11:45:02 (GMT) |
---|---|---|
committer | Tomeu Vizoso <tomeu@sugarlabs.org> | 2009-02-04 11:45:02 (GMT) |
commit | 3540d9cd4a0f7b77d40c49336b616acf7f8ac708 (patch) | |
tree | 11c3f5dd64aae20b13e157137de9c4200f66e8a6 /src/carquinyol/metadatastore.py | |
parent | f3f36629db33c15030c84fd9228c50b1d7fbab71 (diff) |
Rename the module from olpc.datastore to carquinyol to make clearer that it's code private to the datastore
Diffstat (limited to 'src/carquinyol/metadatastore.py')
-rw-r--r-- | src/carquinyol/metadatastore.py | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/carquinyol/metadatastore.py b/src/carquinyol/metadatastore.py new file mode 100644 index 0000000..50981f3 --- /dev/null +++ b/src/carquinyol/metadatastore.py @@ -0,0 +1,64 @@ +import os + +from carquinyol import layoutmanager +from carquinyol import metadatareader + +MAX_SIZE = 256 + +class MetadataStore(object): + def store(self, uid, metadata): + dir_path = layoutmanager.get_instance().get_entry_path(uid) + if not os.path.exists(dir_path): + os.makedirs(dir_path) + + metadata_path = os.path.join(dir_path, 'metadata') + if not os.path.exists(metadata_path): + os.makedirs(metadata_path) + else: + for key in os.listdir(metadata_path): + 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): + dir_path = layoutmanager.get_instance().get_entry_path(uid) + return metadatareader.retrieve(dir_path, properties) + + def delete(self, uid): + dir_path = layoutmanager.get_instance().get_entry_path(uid) + metadata_path = os.path.join(dir_path, 'metadata') + 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): + dir_path = layoutmanager.get_instance().get_entry_path(uid) + metadata_path = os.path.join(dir_path, 'metadata') + 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): + dir_path = layoutmanager.get_instance().get_entry_path(uid) + metadata_path = os.path.join(dir_path, 'metadata') + property_path = os.path.join(metadata_path, key) + open(property_path, 'w').write(value) + |