aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mediagoblin/db/models.py11
-rw-r--r--mediagoblin/federation/routing.py2
-rw-r--r--mediagoblin/federation/views.py6
-rw-r--r--mediagoblin/tests/test_api.py29
4 files changed, 44 insertions, 4 deletions
diff --git a/mediagoblin/db/models.py b/mediagoblin/db/models.py
index 27ca74e0..0507161e 100644
--- a/mediagoblin/db/models.py
+++ b/mediagoblin/db/models.py
@@ -461,6 +461,17 @@ class MediaEntry(Base, MediaEntryMixin):
"pump_io": {
"shared": False,
},
+ "links": {
+ "self": {
+ "href": request.urlgen(
+ "mediagoblin.federation.object",
+ objectType=self.objectType,
+ slug=self.slug,
+ qualified=True
+ ),
+ },
+
+ }
}
if self.title:
diff --git a/mediagoblin/federation/routing.py b/mediagoblin/federation/routing.py
index b9cc4e2e..544edc68 100644
--- a/mediagoblin/federation/routing.py
+++ b/mediagoblin/federation/routing.py
@@ -51,7 +51,7 @@ add_route(
# object endpoints
add_route(
"mediagoblin.federation.object",
- "/api/<string:objectType>/<string:uuid>",
+ "/api/<string:objectType>/<string:slug>",
"mediagoblin.federation.views:object"
)
add_route(
diff --git a/mediagoblin/federation/views.py b/mediagoblin/federation/views.py
index c2b02ec0..af81cbcb 100644
--- a/mediagoblin/federation/views.py
+++ b/mediagoblin/federation/views.py
@@ -275,16 +275,16 @@ def feed(request):
def object(request, raw_obj=False):
""" Lookup for a object type """
object_type = request.matchdict["objectType"]
- uuid = request.matchdict["uuid"]
+ slug = request.matchdict["slug"]
if object_type not in ["image"]:
error = "Unknown type: {0}".format(object_type)
# not sure why this is 404, maybe ask evan. Maybe 400?
return json_response({"error": error}, status=404)
- media = MediaEntry.query.filter_by(slug=uuid).first()
+ media = MediaEntry.query.filter_by(slug=slug).first()
if media is None:
# no media found with that uuid
- error = "Can't find a {0} with ID = {1}".format(object_type, uuid)
+ error = "Can't find a {0} with ID = {1}".format(object_type, slug)
return json_response({"error": error}, status=404)
if raw_obj:
diff --git a/mediagoblin/tests/test_api.py b/mediagoblin/tests/test_api.py
index 38d4c0d5..07c34d04 100644
--- a/mediagoblin/tests/test_api.py
+++ b/mediagoblin/tests/test_api.py
@@ -178,6 +178,35 @@ class TestAPI(object):
# Assert that we've got a 403
assert "403 FORBIDDEN" in excinfo.value.message
+ def test_object_endpoint(self, test_app):
+ """ Tests that object can be looked up at endpoint """
+ # Post an image
+ response, data = self._upload_image(test_app, GOOD_JPG)
+ response, data = self._post_image_to_feed(test_app, data)
+
+ # Now lookup image to check that endpoint works.
+ image = data["object"]
+
+ assert "links" in image
+ assert "self" in image["links"]
+
+ # Get URI and strip testing host off
+ object_uri = image["links"]["self"]["href"]
+ object_uri = object_uri.replace("http://localhost:80", "")
+
+ with mock.patch("mediagoblin.decorators.oauth_required", new_callable=self.mocked_oauth_required):
+ request = test_app.get(object_uri)
+
+ image = json.loads(request.body)
+ entry = MediaEntry.query.filter_by(id=image["id"]).first()
+
+ assert request.status_code == 200
+ assert entry.id == image["id"]
+
+ assert "image" in image
+ assert "fullImage" in image
+ assert "pump_io" in image
+ assert "links" in image
def test_post_comment(self, test_app):
""" Tests that I can post an comment media """