diff options
author | Jessica Tallon <jessica@megworld.co.uk> | 2014-11-21 13:18:25 +0000 |
---|---|---|
committer | Jessica Tallon <jessica@megworld.co.uk> | 2014-11-21 13:30:31 +0000 |
commit | 9c602458d830c1ebcd0ede7c14f7ddef79e2a73f (patch) | |
tree | 0590894f15068afe176fe9e9ddb6f028c131a089 /mediagoblin/db/models.py | |
parent | f44bd7dc873d6122d32f4d8619f82429096750cf (diff) | |
download | mediagoblin-9c602458d830c1ebcd0ede7c14f7ddef79e2a73f.tar.lz mediagoblin-9c602458d830c1ebcd0ede7c14f7ddef79e2a73f.tar.xz mediagoblin-9c602458d830c1ebcd0ede7c14f7ddef79e2a73f.zip |
Fix #1025 - Make API IDs IRIs
Diffstat (limited to 'mediagoblin/db/models.py')
-rw-r--r-- | mediagoblin/db/models.py | 39 |
1 files changed, 28 insertions, 11 deletions
diff --git a/mediagoblin/db/models.py b/mediagoblin/db/models.py index 2de319d6..12757eda 100644 --- a/mediagoblin/db/models.py +++ b/mediagoblin/db/models.py @@ -40,6 +40,7 @@ from mediagoblin.db.mixin import UserMixin, MediaEntryMixin, \ ActivityMixin from mediagoblin.tools.files import delete_media_files from mediagoblin.tools.common import import_component +from mediagoblin.tools.routing import extract_url_arguments import six from pytz import UTC @@ -526,11 +527,17 @@ class MediaEntry(Base, MediaEntryMixin): def serialize(self, request, show_comments=True): """ Unserialize MediaEntry to object """ + href = request.urlgen( + "mediagoblin.federation.object", + object_type=self.object_type, + id=self.id, + qualified=True + ) author = self.get_uploader published = UTC.localize(self.created) updated = UTC.localize(self.created) context = { - "id": self.id, + "id": href, "author": author.serialize(request), "objectType": self.object_type, "url": self.url_for_self(request.urlgen, qualified=True), @@ -547,12 +554,7 @@ class MediaEntry(Base, MediaEntryMixin): }, "links": { "self": { - "href": request.urlgen( - "mediagoblin.federation.object", - object_type=self.object_type, - id=self.id, - qualified=True - ), + "href": href, }, } @@ -755,10 +757,16 @@ class MediaComment(Base, MediaCommentMixin): def serialize(self, request): """ Unserialize to python dictionary for API """ + href = request.urlgen( + "mediagoblin.federation.object", + object_type=self.object_type, + id=self.id, + qualified=True + ) media = MediaEntry.query.filter_by(id=self.media_entry).first() author = self.get_author context = { - "id": self.id, + "id": href, "objectType": self.object_type, "content": self.content, "inReplyTo": media.serialize(request, show_comments=False), @@ -770,7 +778,7 @@ class MediaComment(Base, MediaCommentMixin): return context - def unserialize(self, data): + def unserialize(self, data, request): """ Takes API objects and unserializes on existing comment """ # Do initial checks to verify the object is correct required_attributes = ["content", "inReplyTo"] @@ -784,7 +792,10 @@ class MediaComment(Base, MediaCommentMixin): # Validate that the ID is correct try: - media_id = int(data["inReplyTo"]["id"]) + media_id = int(extract_url_arguments( + url=data["inReplyTo"]["id"], + urlmap=request.app.url_map + )["id"]) except ValueError: return False @@ -1214,10 +1225,16 @@ class Generator(Base): ) def serialize(self, request): + href = request.urlgen( + "mediagoblin.federation.object", + object_type=self.object_type, + id=self.id, + qualified=True + ) published = UTC.localize(self.published) updated = UTC.localize(self.updated) return { - "id": self.id, + "id": href, "displayName": self.name, "published": published.isoformat(), "updated": updated.isoformat(), |