Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@sugarlabs.org>2013-10-03 03:14:39 (GMT)
committer Aleksey Lim <alsroot@sugarlabs.org>2013-10-03 03:14:39 (GMT)
commitdf67cfa72459592cc1888b78a94347e88f601d69 (patch)
tree1811d5b7131bfe76bc84684e023c1317eabfd4ff
parentc362ec6b35df570fba4306c6463325030cdb98ba (diff)
Local api command to get cloned path
-rw-r--r--sugar_network/client/implementations.py7
-rw-r--r--sugar_network/db/directory.py9
-rw-r--r--sugar_network/db/resource.py9
-rw-r--r--sugar_network/db/storage.py4
4 files changed, 19 insertions, 10 deletions
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')