aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xlazystarter.sh2
-rw-r--r--mediagoblin/db/models.py31
-rw-r--r--mediagoblin/federation/views.py51
-rw-r--r--mediagoblin/init/celery/__init__.py2
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',