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 | |
| parent | 0679545f192d8d45a4d98c65bf731e236d73b418 (diff) | |
| download | mediagoblin-d8f55f2b412507d4c75ebd249a824fdaee66c6dd.tar.lz mediagoblin-d8f55f2b412507d4c75ebd249a824fdaee66c6dd.tar.xz mediagoblin-d8f55f2b412507d4c75ebd249a824fdaee66c6dd.zip | |
Add unseralize for API objects
| -rwxr-xr-x | lazystarter.sh | 2 | ||||
| -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 | 
4 files changed, 49 insertions, 37 deletions
| diff --git a/lazystarter.sh b/lazystarter.sh index d3770194..41994015 100755 --- a/lazystarter.sh +++ b/lazystarter.sh @@ -76,7 +76,7 @@ case "$selfname" in      lazycelery.sh)          MEDIAGOBLIN_CONFIG="${ini_file}" \              CELERY_CONFIG_MODULE=mediagoblin.init.celery.from_celery \ -            $starter "$@" +            $starter -B "$@"          ;;      *) exit 1 ;;  esac 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', | 
