From df67cfa72459592cc1888b78a94347e88f601d69 Mon Sep 17 00:00:00 2001 From: Aleksey Lim Date: Thu, 03 Oct 2013 03:14:39 +0000 Subject: Local api command to get cloned path --- diff --git a/sugar_network/client/implementations.py b/sugar_network/client/implementations.py index 4413c42..b993b3e 100644 --- a/sugar_network/client/implementations.py +++ b/sugar_network/client/implementations.py @@ -53,6 +53,13 @@ class Routes(object): def invalidate_solutions(self, mtime): self._node_mtime = mtime + @route('GET', ['context', None], cmd='path') + def path(self, request): + clone_path = self._volume['context'].path(request.guid, '.clone') + enforce(exists(clone_path), http.NotFound) + clone_impl = basename(os.readlink(clone_path)) + return self._volume['implementation'].path(clone_impl, 'data') + @route('GET', ['context', None], cmd='launch', arguments={'args': list}, mime_type='text/event-stream') def launch(self, request, no_spawn): diff --git a/sugar_network/db/directory.py b/sugar_network/db/directory.py index a59992c..d27f0e0 100644 --- a/sugar_network/db/directory.py +++ b/sugar_network/db/directory.py @@ -71,15 +71,16 @@ class Directory(object): ts = self._index.checkpoint() self.broadcast({'event': 'populate', 'mtime': ts}) - def path(self, guid, prop=None): + def path(self, guid, *args): record = self._storage.get(guid) - if not prop: + if not args: return record.path() + prop = args[0] if prop in self.metadata and \ isinstance(self.metadata[prop], BlobProperty): - return record.blob_path(prop) + return record.blob_path(*args) else: - return record.path(prop) + return record.path(*args) def wipe(self): self.close() diff --git a/sugar_network/db/resource.py b/sugar_network/db/resource.py index 0e7217d..207824e 100644 --- a/sugar_network/db/resource.py +++ b/sugar_network/db/resource.py @@ -93,14 +93,15 @@ class Resource(object): def tags(self, value): return value - def path(self, prop=None): - if not prop: + def path(self, *args): + if not args: return self._record.path() + prop = args[0] if prop in self.metadata and \ isinstance(self.metadata[prop], BlobProperty): - return self._record.blob_path(prop) + return self._record.blob_path(*args) else: - return self._record.path(prop) + return self._record.path(*args) def get(self, prop, accept_language=None): """Get document's property value. diff --git a/sugar_network/db/storage.py b/sugar_network/db/storage.py index f8587d9..b8e5aa8 100644 --- a/sugar_network/db/storage.py +++ b/sugar_network/db/storage.py @@ -126,8 +126,8 @@ class Record(object): def path(self, *args): return join(self._root, *args) - def blob_path(self, prop): - return join(self._root, prop + _BLOB_SUFFIX) + def blob_path(self, prop, *args): + return join(self._root, prop + _BLOB_SUFFIX, *args) def invalidate(self): guid_path = join(self._root, 'guid') -- cgit v0.9.1