Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@sugarlabs.org>2012-10-01 21:31:30 (GMT)
committer Aleksey Lim <alsroot@sugarlabs.org>2012-10-01 21:31:30 (GMT)
commit24489c5b5deb44a20ad8bcfb20afe23828ff45c7 (patch)
treee4b8b681ce35d393c02dd81c56770989c887a48d
parente6329d986f3f7978e9bda31eb19e62e4f0130766 (diff)
Commands attach/detach can be called only from Hub for now
-rw-r--r--sugar_network/node/commands.py20
-rw-r--r--sugar_network/resources/context.py18
2 files changed, 21 insertions, 17 deletions
diff --git a/sugar_network/node/commands.py b/sugar_network/node/commands.py
index 36889dc..e576d2b 100644
--- a/sugar_network/node/commands.py
+++ b/sugar_network/node/commands.py
@@ -102,6 +102,26 @@ class NodeCommands(ad.VolumeCommands, Commands):
return cmd
+ @ad.document_command(method='PUT', cmd='attach',
+ permissions=ad.ACCESS_AUTH)
+ def attach(self, document, guid, request):
+ auth.validate(request, 'root')
+ directory = self.volume[document]
+ doc = directory.get(guid)
+ # TODO Reading layer here is a race
+ layer = list(set(doc['layer']) | set(request.content))
+ directory.update(guid, {'layer': layer})
+
+ @ad.document_command(method='PUT', cmd='detach',
+ permissions=ad.ACCESS_AUTH)
+ def detach(self, document, guid, request):
+ auth.validate(request, 'root')
+ directory = self.volume[document]
+ doc = directory.get(guid)
+ # TODO Reading layer here is a race
+ layer = list(set(doc['layer']) - set(request.content))
+ directory.update(guid, {'layer': layer})
+
def before_create(self, request, props):
if request['document'] == 'user':
props['guid'], props['pubkey'] = _load_pubkey(props['pubkey'])
diff --git a/sugar_network/resources/context.py b/sugar_network/resources/context.py
index 8af986c..63d1e31 100644
--- a/sugar_network/resources/context.py
+++ b/sugar_network/resources/context.py
@@ -20,7 +20,7 @@ from sugar_network import resources, static
from sugar_network.local import activities
from sugar_network.resources.volume import Resource
from sugar_network.zerosugar import Spec
-from sugar_network.node import obs, auth
+from sugar_network.node import obs
from active_toolkit import coroutine, util
@@ -158,22 +158,6 @@ class Context(Resource):
def presolve(self, value):
return value
- @ad.document_command(method='PUT', cmd='attach',
- permissions=ad.ACCESS_AUTH)
- def attach(self, request):
- auth.validate(request, 'root')
- # TODO Reading layer here is a race
- layer = list(set(self['layer']) | set(request.content))
- request.volume['context'].update(self.guid, {'layer': layer})
-
- @ad.document_command(method='PUT', cmd='detach',
- permissions=ad.ACCESS_AUTH)
- def detach(self, request):
- auth.validate(request, 'root')
- # TODO Reading layer here is a race
- layer = list(set(self['layer']) - set(request.content))
- request.volume['context'].update(self.guid, {'layer': layer})
-
def _process_aliases(self, aliases):
packages = {}
for repo in obs.get_repos():