diff options
author | Jessica Tallon <jessica@megworld.co.uk> | 2014-07-16 17:59:03 +0100 |
---|---|---|
committer | Jessica Tallon <jessica@megworld.co.uk> | 2014-07-22 23:13:16 +0100 |
commit | d8f55f2b412507d4c75ebd249a824fdaee66c6dd (patch) | |
tree | 1d4adf0e30dd636528302f9256dd8f65c3c36f53 /mediagoblin | |
parent | 0679545f192d8d45a4d98c65bf731e236d73b418 (diff) | |
download | mediagoblin-d8f55f2b412507d4c75ebd249a824fdaee66c6dd.tar.lz mediagoblin-d8f55f2b412507d4c75ebd249a824fdaee66c6dd.tar.xz mediagoblin-d8f55f2b412507d4c75ebd249a824fdaee66c6dd.zip |
Add unseralize for API objects
Diffstat (limited to 'mediagoblin')
-rw-r--r-- | mediagoblin/db/models.py | 31 | ||||
-rw-r--r-- | mediagoblin/federation/views.py | 51 | ||||
-rw-r--r-- | mediagoblin/init/celery/__init__.py | 2 |
3 files changed, 48 insertions, 36 deletions
diff --git a/mediagoblin/db/models.py b/mediagoblin/db/models.py index 0507161e..8ea16b80 100644 --- a/mediagoblin/db/models.py +++ b/mediagoblin/db/models.py @@ -499,6 +499,19 @@ class MediaEntry(Base, MediaEntryMixin): return context + def unserialize(self, data): + """ Takes API objects and unserializes on existing MediaEntry """ + if "displayName" in data: + self.title = data["displayName"] + + if "content" in data: + self.description = data["content"] + + if "license" in data: + self.license = data["license"] + + return True + class FileKeynames(Base): """ keywords for various places. @@ -658,6 +671,24 @@ class MediaComment(Base, MediaCommentMixin): return context + def unserialize(self, data): + """ Takes API objects and unserializes on existing comment """ + # Do initial checks to verify the object is correct + required_attributes = ["content", "inReplyTo"] + for attr in required_attributes: + if attr not in data: + return False + + # Validate inReplyTo has ID + if "id" not in data["inReplyTo"]: + return False + + self.media_entry = data["inReplyTo"]["id"] + self.content = data["content"] + return True + + + class Collection(Base, CollectionMixin): """An 'album' or 'set' of media by a user. diff --git a/mediagoblin/federation/views.py b/mediagoblin/federation/views.py index c383b3ef..8db04f3a 100644 --- a/mediagoblin/federation/views.py +++ b/mediagoblin/federation/views.py @@ -55,8 +55,8 @@ def user(request): "nickname": user.username, "updated": user.created.isoformat(), "published": user.created.isoformat(), - "profile": user_profile - } + "profile": user_profile, + } return json_response(data) @@ -120,12 +120,8 @@ def feed(request): if obj.get("objectType", None) == "comment": # post a comment - media = int(data["object"]["inReplyTo"]["id"]) - comment = MediaComment( - media_entry=media, - author=request.user.id, - content=data["object"]["content"] - ) + comment = MediaComment(author=request.user.id) + comment.unserialize(data["object"]) comment.save() data = {"verb": "post", "object": comment.serialize(request)} return json_response(data) @@ -139,17 +135,9 @@ def feed(request): return json_response(error, status=404) media = media.first() - obj = data["object"] - - if "displayName" in obj: - media.title = obj["displayName"] - - if "content" in obj: - media.description = obj["content"] - - if "license" in obj: - media.license = obj["license"] - + if not media.unserialize(data["object"]): + error = {"error": "Invalid 'image' with id '{0}'".format(obj_id)} + return json_response(error, status=400) media.save() media.media_manager.api_add_to_feed(request, media) @@ -195,13 +183,14 @@ def feed(request): if comment is None: error = {"error": "No such 'comment' with id '{0}'.".format(obj_id)} return json_response(error, status=400) - comment = comment[0] - # TODO: refactor this out to update/setting method on MediaComment - if obj.get("content", None) is not None: - comment.content = obj["content"] + comment = comment[0] + if not comment.unserialize(data["object"]): + error = {"error": "Invalid 'comment' with id '{0}'".format(obj_id)} + return json_response(error, status=400) comment.save() + activity = { "verb": "update", "object": comment.serialize(request), @@ -215,19 +204,11 @@ def feed(request): return json_response(error, status=400) image = image[0] - - # TODO: refactor this out to update/setting method on MediaEntry - if obj.get("displayName", None) is not None: - image.title = obj["displayName"] - - if obj.get("content", None) is not None: - image.description = obj["content"] - - if obj.get("license", None) is not None: - # I think we might need some validation here - image.license = obj["license"] - + if not image.unserialize(obj): + error = {"error": "Invalid 'image' with id '{0}'".format(obj_id)} + return json_response(error, status=400) image.save() + activity = { "verb": "update", "object": image.serialize(request), diff --git a/mediagoblin/init/celery/__init__.py b/mediagoblin/init/celery/__init__.py index 214d00c3..2f2c40d3 100644 --- a/mediagoblin/init/celery/__init__.py +++ b/mediagoblin/init/celery/__init__.py @@ -62,7 +62,7 @@ def get_celery_settings_dict(app_config, global_config, # Garbage collection periodic task frequency = app_config.get('garbage_collection', 60) if frequency: - frequency = int(app_config['garbage_collection']) + frequency = int(frequency) celery_settings['CELERYBEAT_SCHEDULE'] = { 'garbage-collection': { 'task': 'mediagoblin.federation.task.garbage_collection', |