Add unseralize for API objects

This commit is contained in:
Jessica Tallon 2014-07-16 17:59:03 +01:00
parent 0679545f19
commit d8f55f2b41
4 changed files with 49 additions and 37 deletions

View File

@ -76,7 +76,7 @@ case "$selfname" in
lazycelery.sh) lazycelery.sh)
MEDIAGOBLIN_CONFIG="${ini_file}" \ MEDIAGOBLIN_CONFIG="${ini_file}" \
CELERY_CONFIG_MODULE=mediagoblin.init.celery.from_celery \ CELERY_CONFIG_MODULE=mediagoblin.init.celery.from_celery \
$starter "$@" $starter -B "$@"
;; ;;
*) exit 1 ;; *) exit 1 ;;
esac esac

View File

@ -499,6 +499,19 @@ class MediaEntry(Base, MediaEntryMixin):
return context 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): class FileKeynames(Base):
""" """
keywords for various places. keywords for various places.
@ -658,6 +671,24 @@ class MediaComment(Base, MediaCommentMixin):
return context 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): class Collection(Base, CollectionMixin):
"""An 'album' or 'set' of media by a user. """An 'album' or 'set' of media by a user.

View File

@ -55,8 +55,8 @@ def user(request):
"nickname": user.username, "nickname": user.username,
"updated": user.created.isoformat(), "updated": user.created.isoformat(),
"published": user.created.isoformat(), "published": user.created.isoformat(),
"profile": user_profile "profile": user_profile,
} }
return json_response(data) return json_response(data)
@ -120,12 +120,8 @@ def feed(request):
if obj.get("objectType", None) == "comment": if obj.get("objectType", None) == "comment":
# post a comment # post a comment
media = int(data["object"]["inReplyTo"]["id"]) comment = MediaComment(author=request.user.id)
comment = MediaComment( comment.unserialize(data["object"])
media_entry=media,
author=request.user.id,
content=data["object"]["content"]
)
comment.save() comment.save()
data = {"verb": "post", "object": comment.serialize(request)} data = {"verb": "post", "object": comment.serialize(request)}
return json_response(data) return json_response(data)
@ -139,17 +135,9 @@ def feed(request):
return json_response(error, status=404) return json_response(error, status=404)
media = media.first() media = media.first()
obj = data["object"] if not media.unserialize(data["object"]):
error = {"error": "Invalid 'image' with id '{0}'".format(obj_id)}
if "displayName" in obj: return json_response(error, status=400)
media.title = obj["displayName"]
if "content" in obj:
media.description = obj["content"]
if "license" in obj:
media.license = obj["license"]
media.save() media.save()
media.media_manager.api_add_to_feed(request, media) media.media_manager.api_add_to_feed(request, media)
@ -195,13 +183,14 @@ def feed(request):
if comment is None: if comment is None:
error = {"error": "No such 'comment' with id '{0}'.".format(obj_id)} error = {"error": "No such 'comment' with id '{0}'.".format(obj_id)}
return json_response(error, status=400) return json_response(error, status=400)
comment = comment[0]
# TODO: refactor this out to update/setting method on MediaComment comment = comment[0]
if obj.get("content", None) is not None: if not comment.unserialize(data["object"]):
comment.content = obj["content"] error = {"error": "Invalid 'comment' with id '{0}'".format(obj_id)}
return json_response(error, status=400)
comment.save() comment.save()
activity = { activity = {
"verb": "update", "verb": "update",
"object": comment.serialize(request), "object": comment.serialize(request),
@ -215,19 +204,11 @@ def feed(request):
return json_response(error, status=400) return json_response(error, status=400)
image = image[0] image = image[0]
if not image.unserialize(obj):
# TODO: refactor this out to update/setting method on MediaEntry error = {"error": "Invalid 'image' with id '{0}'".format(obj_id)}
if obj.get("displayName", None) is not None: return json_response(error, status=400)
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"]
image.save() image.save()
activity = { activity = {
"verb": "update", "verb": "update",
"object": image.serialize(request), "object": image.serialize(request),

View File

@ -62,7 +62,7 @@ def get_celery_settings_dict(app_config, global_config,
# Garbage collection periodic task # Garbage collection periodic task
frequency = app_config.get('garbage_collection', 60) frequency = app_config.get('garbage_collection', 60)
if frequency: if frequency:
frequency = int(app_config['garbage_collection']) frequency = int(frequency)
celery_settings['CELERYBEAT_SCHEDULE'] = { celery_settings['CELERYBEAT_SCHEDULE'] = {
'garbage-collection': { 'garbage-collection': {
'task': 'mediagoblin.federation.task.garbage_collection', 'task': 'mediagoblin.federation.task.garbage_collection',