diff options
author | Aleksey Lim <alsroot@sugarlabs.org> | 2014-05-04 07:59:26 (GMT) |
---|---|---|
committer | Aleksey Lim <alsroot@sugarlabs.org> | 2014-05-04 07:59:26 (GMT) |
commit | 0684b55b5f66da1c2dc61f15105ef5e0632019bf (patch) | |
tree | 848a31a82345dd38643c4be76620fe3f16f52adf /sugar_network | |
parent | a57e9537c034ee4566f8cf694518619588097f76 (diff) |
Simplify code and return author property as-is
Diffstat (limited to 'sugar_network')
-rw-r--r-- | sugar_network/db/__init__.py | 2 | ||||
-rw-r--r-- | sugar_network/db/metadata.py | 32 | ||||
-rw-r--r-- | sugar_network/db/resource.py | 4 | ||||
-rw-r--r-- | sugar_network/db/routes.py | 17 | ||||
-rw-r--r-- | sugar_network/toolkit/router.py | 19 |
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', |