Added /api/entries view
authorJoar Wandborg <git@wandborg.com>
Sat, 15 Sep 2012 13:25:26 +0000 (15:25 +0200)
committerJoar Wandborg <git@wandborg.com>
Sat, 15 Sep 2012 13:25:26 +0000 (15:25 +0200)
mediagoblin/plugins/api/__init__.py
mediagoblin/plugins/api/tools.py
mediagoblin/plugins/api/views.py
mediagoblin/plugins/oauth/__init__.py

index f3526aa18eb70ef275cc03d5ff7ac4c8603e99bb..9d4b58df430fee4dd1aef426ca292a404f18255a 100644 (file)
@@ -33,7 +33,9 @@ def setup_plugin():
 
     routes = [
         Route('mediagoblin.plugins.api.test', '/api/test',
-            controller='mediagoblin.plugins.api.views:api_test')]
+            controller='mediagoblin.plugins.api.views:api_test'),
+        Route('mediagoblin.plugins.api.entries', '/api/entries',
+            controller='mediagoblin.plugins.api.views:get_entries')]
 
     pluginapi.register_routes(routes)
 
index a8873b06d5fd4f8f9bc733ccaa24b61baba9b6a8..4d3062749001eb7ec34c71fe4aa6376deec8fbe6 100644 (file)
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 import logging
+import json
 
 from functools import wraps
-from webob import exc
+from webob import exc, Response
 
+from mediagoblin import mg_globals
 from mediagoblin.tools.pluginapi import PluginManager
+from mediagoblin.storage.filestorage import BasicFileStorage
 
 _log = logging.getLogger(__name__)
 
 
+class Auth(object):
+    '''
+    An object with two significant methods, 'trigger' and 'run'.
+
+    Using a similar object to this, plugins can register specific
+    authentication logic, for example the GET param 'access_token' for OAuth.
+
+    - trigger: Analyze the 'request' argument, return True if you think you
+      can handle the request, otherwise return False
+    - run: The authentication logic, set the request.user object to the user
+      you intend to authenticate and return True, otherwise return False.
+
+    If run() returns False, an HTTP 403 Forbidden error will be shown.
+
+    You may also display custom errors, just raise them within the run()
+    method.
+    '''
+    def trigger(self, request):
+        raise NotImplemented()
+
+    def __call__(self, request, *args, **kw):
+        raise NotImplemented()
+
+
+def json_response(serializable):
+    response = Response(json.dumps(serializable))
+    response.headers['Content-Type'] = 'application/json'
+    return response
+
+
+def get_entry_serializable(entry):
+    return {
+            'user': entry.get_uploader.username,
+            'user_id': entry.get_uploader.id,
+            'id': entry.id,
+            'created': entry.created.isoformat(),
+            'title': entry.title,
+            'license': entry.license,
+            'description': entry.description,
+            'description_html': entry.description_html,
+            'media_type': entry.media_type,
+            'media_files': get_media_file_paths(entry.media_files)}
+
+
+def get_media_file_paths(media_files):
+    if isinstance(mg_globals.public_store, BasicFileStorage):
+        pass  # TODO
+
+    media_urls = {}
+
+    for key, val in media_files.items():
+        media_urls[key] = mg_globals.public_store.file_url(val)
+
+    return media_urls
+
+
 def api_auth(controller):
     @wraps(controller)
     def wrapper(request, *args, **kw):
index 7d6ef572e783ab2b5e852f6ed213e6f9286b66d2..49c16ee6c19d7579b1e1f78cc1538d60dd9cafb2 100644 (file)
@@ -17,7 +17,8 @@
 import json
 from webob import exc, Response
 
-from mediagoblin.plugins.api.tools import api_auth
+from mediagoblin.plugins.api.tools import api_auth, get_entry_serializable, \
+        json_response
 
 
 @api_auth
@@ -30,3 +31,16 @@ def api_test(request):
             'email': request.user.email}
 
     return Response(json.dumps(user_data))
+
+
+def get_entries(request):
+    entries = request.db.MediaEntry.query
+
+    entries = entries.filter_by(state=u'processed')
+
+    entries_serializable = []
+
+    for entry in entries:
+        entries_serializable.append(get_entry_serializable(entry))
+
+    return json_response(entries_serializable)
index 04aa78153041d1edf08956d3344fac76fd02e9bb..9591972853995727df361231a12dc48897892fa9 100644 (file)
@@ -23,6 +23,7 @@ from webob import exc
 from mediagoblin.tools import pluginapi
 from mediagoblin.tools.response import render_to_response
 from mediagoblin.plugins.oauth.models import OAuthToken
+from mediagoblin.plugins.api.tools import Auth
 
 _log = logging.getLogger(__name__)
 
@@ -45,26 +46,7 @@ def setup_plugin():
     pluginapi.register_template_path(os.path.join(PLUGIN_DIR, 'templates'))
 
 
-class OAuthAuth(object):
-    '''
-    An object with two significant methods, 'trigger' and 'run'.
-
-    Using a similar object to this, plugins can register specific
-    authentication logic, for example the GET param 'access_token' for OAuth.
-
-    - trigger: Analyze the 'request' argument, return True if you think you
-      can handle the request, otherwise return False
-    - run: The authentication logic, set the request.user object to the user
-      you intend to authenticate and return True, otherwise return False.
-
-    If run() returns False, an HTTP 403 Forbidden error will be shown.
-
-    You may also display custom errors, just raise them within the run()
-    method.
-    '''
-    def __init__(self):
-        pass
-
+class OAuthAuth(Auth):
     def trigger(self, request):
         return True