diff options
Diffstat (limited to 'sugar_network/model/post.py')
-rw-r--r-- | sugar_network/model/post.py | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/sugar_network/model/post.py b/sugar_network/model/post.py new file mode 100644 index 0000000..d7a742c --- /dev/null +++ b/sugar_network/model/post.py @@ -0,0 +1,93 @@ +# Copyright (C) 2012-2014 Aleksey Lim +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +from sugar_network import db, model, static +from sugar_network.toolkit.router import Blob, ACL + + +class Post(db.Resource): + + @db.indexed_property(prefix='C', + acl=ACL.CREATE | ACL.READ) + def context(self, value): + return value + + @db.indexed_property(prefix='A', default='', + acl=ACL.CREATE | ACL.READ) + def topic(self, value): + return value + + @topic.setter + def topic(self, value): + if value and not self['context']: + post = self.volume['post'].get(value) + self['context'] = post['context'] + return value + + @db.indexed_property(prefix='T', typecast=model.POST_TYPES) + def type(self, value): + return value + + @db.indexed_property(slot=1, prefix='N', full_text=True, localized=True, + acl=ACL.CREATE | ACL.READ) + def title(self, value): + return value + + @db.indexed_property(prefix='D', full_text=True, localized=True, + acl=ACL.CREATE | ACL.READ) + def message(self, value): + return value + + @db.indexed_property(prefix='R', default='') + def solution(self, value): + return value + + @db.indexed_property(prefix='V', typecast=model.RATINGS, default=0, + acl=ACL.CREATE | ACL.READ) + def vote(self, value): + return value + + @db.blob_property(mime_type='image/png') + def preview(self, value): + if value: + return value + return Blob({ + 'url': '/static/images/missing-preview.png', + 'blob': static.path('images', 'missing-preview.png'), + 'mime_type': 'image/png', + }) + + @db.blob_property() + def data(self, value): + if value: + value['name'] = self['title'] + return value + + @db.indexed_property(slot=2, default=0, acl=ACL.READ | ACL.CALC) + def downloads(self, value): + return value + + @db.indexed_property(slot=3, typecast=model.RATINGS, default=0, + acl=ACL.READ | ACL.CALC) + def rating(self, value): + return value + + @db.stored_property(typecast=[], default=[0, 0], + acl=ACL.READ | ACL.CALC) + def reviews(self, value): + if value is None: + return 0 + else: + return value[0] |