diff options
Diffstat (limited to 'mediagoblin/db')
-rw-r--r-- | mediagoblin/db/indexes.py | 10 | ||||
-rw-r--r-- | mediagoblin/db/models.py | 46 |
2 files changed, 53 insertions, 3 deletions
diff --git a/mediagoblin/db/indexes.py b/mediagoblin/db/indexes.py index bbcceb6d..d379a52b 100644 --- a/mediagoblin/db/indexes.py +++ b/mediagoblin/db/indexes.py @@ -111,6 +111,16 @@ USER_INDEXES = { ACTIVE_INDEXES['users'] = USER_INDEXES +# MediaComment indexes + +MEDIA_COMMENT_INDEXES = { + 'mediaentry_created': { + 'index': [('media_entry', ASCENDING), + ('created', DESCENDING)]}} + +ACTIVE_INDEXES['media_comments'] = MEDIA_COMMENT_INDEXES + + #################### # Deprecated indexes #################### diff --git a/mediagoblin/db/models.py b/mediagoblin/db/models.py index 8d06ae49..bf825a23 100644 --- a/mediagoblin/db/models.py +++ b/mediagoblin/db/models.py @@ -22,7 +22,8 @@ from mediagoblin import util from mediagoblin.auth import lib as auth_lib from mediagoblin import mg_globals from mediagoblin.db import migrations -from mediagoblin.db.util import ObjectId +from mediagoblin.db.util import DESCENDING, ObjectId +from mediagoblin.util import Pagination ################### # Custom validators @@ -110,7 +111,22 @@ class MediaEntry(Document): def main_mediafile(self): pass - + + def get_comments(self, page): + cursor = self.db.MediaComment.find({ + 'media_entry': self['_id']}).sort('created', DESCENDING) + + pagination = Pagination(page, cursor) + comments = pagination() + + data = list() + for comment in comments: + comment['author'] = self.db.User.find_one({ + '_id': comment['author']}) + data.append(comment) + + return (data, pagination) + def generate_slug(self): self['slug'] = util.slugify(self['title']) @@ -142,8 +158,32 @@ class MediaEntry(Document): def uploader(self): return self.db.User.find_one({'_id': self['uploader']}) +class MediaComment(Document): + __collection__ = 'media_comments' + + structure = { + 'media_entry': ObjectId, + 'author': ObjectId, + 'created': datetime.datetime, + 'content': unicode, + 'content_html': unicode} + + required_fields = [ + 'media_entry', 'author', 'created', 'content'] + + default_values = { + 'created': datetime.datetime.utcnow} + + def media_entry(self): + return self.db.MediaEntry.find_one({'_id': self['media_entry']}) + + def author(self): + return self.db.User.find_one({'_id': self['author']}) -REGISTER_MODELS = [MediaEntry, User] +REGISTER_MODELS = [ + MediaEntry, + User, + MediaComment] def register_models(connection): |