Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar_network
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@sugarlabs.org>2014-05-04 07:59:26 (GMT)
committer Aleksey Lim <alsroot@sugarlabs.org>2014-05-04 07:59:26 (GMT)
commit0684b55b5f66da1c2dc61f15105ef5e0632019bf (patch)
tree848a31a82345dd38643c4be76620fe3f16f52adf /sugar_network
parenta57e9537c034ee4566f8cf694518619588097f76 (diff)
Simplify code and return author property as-is
Diffstat (limited to 'sugar_network')
-rw-r--r--sugar_network/db/__init__.py2
-rw-r--r--sugar_network/db/metadata.py32
-rw-r--r--sugar_network/db/resource.py4
-rw-r--r--sugar_network/db/routes.py17
-rw-r--r--sugar_network/toolkit/router.py19
5 files changed, 21 insertions, 53 deletions
diff --git a/sugar_network/db/__init__.py b/sugar_network/db/__init__.py
index 6a6b27c..c486a70 100644
--- a/sugar_network/db/__init__.py
+++ b/sugar_network/db/__init__.py
@@ -351,7 +351,7 @@ Volume
from sugar_network.db.metadata import \
stored_property, indexed_property, Property, Numeric, Boolean, Dict, \
- Enum, List, Aggregated, Blob, Localized, Reference
+ Enum, List, Aggregated, Blob, Localized, Reference, Author
from sugar_network.db.index import index_flush_timeout, \
index_flush_threshold, index_write_queue
from sugar_network.db.resource import Resource
diff --git a/sugar_network/db/metadata.py b/sugar_network/db/metadata.py
index 53d3f40..b0c8917 100644
--- a/sugar_network/db/metadata.py
+++ b/sugar_network/db/metadata.py
@@ -413,38 +413,14 @@ class Guid(Property):
acl=ACL.CREATE | ACL.READ)
-class Authors(Dict):
+class Author(Dict):
- def typecast(self, value):
- if type(value) not in (list, tuple):
- return dict(value)
- result = {}
- for order, author in enumerate(value):
- user = author.pop('guid')
- author['order'] = order
- result[user] = author
- return result
-
- def reprcast(self, value):
- result = []
- for guid, props in sorted(value.items(),
- cmp=lambda x, y: cmp(x[1]['order'], y[1]['order'])):
- if 'name' in props:
- result.append({
- 'guid': guid,
- 'name': props['name'],
- 'role': props['role'],
- })
- else:
- result.append({
- 'name': guid,
- 'role': props['role'],
- })
- return result
+ INSYSTEM = 1 << 0
+ ORIGINAL = 1 << 16
def encode(self, value):
for guid, props in value.items():
if 'name' in props:
yield toolkit.ascii(props['name'])
- if not (props['role'] & ACL.INSYSTEM):
+ if not (props['role'] & Author.INSYSTEM):
yield guid
diff --git a/sugar_network/db/resource.py b/sugar_network/db/resource.py
index 1bf46c6..24d4ea1 100644
--- a/sugar_network/db/resource.py
+++ b/sugar_network/db/resource.py
@@ -16,7 +16,7 @@
import time
from sugar_network.db.metadata import indexed_property, Localized
-from sugar_network.db.metadata import Numeric, List, Authors, Enum
+from sugar_network.db.metadata import Numeric, List, Author, Enum
from sugar_network.db.metadata import Composite, Aggregated
from sugar_network.toolkit.router import ACL
from sugar_network.toolkit import ranges
@@ -67,7 +67,7 @@ class Resource(object):
def mtime(self, value):
return value
- @indexed_property(Authors, prefix='RA', default={}, full_text=True,
+ @indexed_property(Author, prefix='RA', default={}, full_text=True,
acl=ACL.READ)
def author(self, value):
return value
diff --git a/sugar_network/db/routes.py b/sugar_network/db/routes.py
index 4c29780..29507d3 100644
--- a/sugar_network/db/routes.py
+++ b/sugar_network/db/routes.py
@@ -19,7 +19,7 @@ import logging
from contextlib import contextmanager
from sugar_network import toolkit
-from sugar_network.db.metadata import Aggregated
+from sugar_network.db.metadata import Aggregated, Author
from sugar_network.toolkit.router import ACL, File
from sugar_network.toolkit.router import route, fallbackroute, preroute
from sugar_network.toolkit.coroutine import this
@@ -46,7 +46,7 @@ class Routes(object):
doc.created()
if this.principal:
authors = doc.posts['author'] = {}
- self._useradd(authors, this.principal, ACL.ORIGINAL)
+ self._useradd(authors, this.principal, Author.ORIGINAL)
self.volume[this.request.resource].create(doc.posts)
return doc['guid']
@@ -238,19 +238,14 @@ class Routes(object):
user_doc = self.volume['user'][user]
if user_doc.available:
props['name'] = user_doc['name']
- role |= ACL.INSYSTEM
+ role |= Author.INSYSTEM
else:
- role &= ~ACL.INSYSTEM
- props['role'] = role & (ACL.INSYSTEM | ACL.ORIGINAL)
+ role &= ~Author.INSYSTEM
+ props['role'] = role & (Author.INSYSTEM | Author.ORIGINAL)
if user in authors:
authors[user].update(props)
else:
- if authors:
- top = max(authors.values(), key=lambda x: x['order'])
- props['order'] = top['order'] + 1
- else:
- props['order'] = 0
authors[user] = props
def _aggpost(self, acl):
@@ -282,7 +277,7 @@ class Routes(object):
if this.principal:
authors = aggvalue['author'] = {}
- role = ACL.ORIGINAL if this.principal in doc['author'] else 0
+ role = Author.ORIGINAL if this.principal in doc['author'] else 0
self._useradd(authors, this.principal, role)
doc.posts[request.prop] = {aggid: aggvalue}
doc.updated()
diff --git a/sugar_network/toolkit/router.py b/sugar_network/toolkit/router.py
index ec89fec..ba498d6 100644
--- a/sugar_network/toolkit/router.py
+++ b/sugar_network/toolkit/router.py
@@ -74,23 +74,20 @@ def postroute(func):
class ACL(object):
- INSYSTEM = 1 << 0
- ORIGINAL = 1 << 1
-
- CREATE = 1 << 2
- WRITE = 1 << 3
- READ = 1 << 4
- DELETE = 1 << 5
- INSERT = 1 << 6
- REMOVE = 1 << 7
- REPLACE = 1 << 8
+ CREATE = 1 << 0
+ WRITE = 1 << 1
+ READ = 1 << 2
+ DELETE = 1 << 3
+ INSERT = 1 << 4
+ REMOVE = 1 << 5
+ REPLACE = 1 << 6
PUBLIC = CREATE | WRITE | READ | DELETE | INSERT | REMOVE
AUTH = 1 << 10
AUTHOR = 1 << 11
AGG_AUTHOR = 1 << 12
- LOCAL = 1 << 14
+ LOCAL = 1 << 20
NAMES = {
CREATE: 'Create',