aboutsummaryrefslogtreecommitdiff
path: root/src/web/views/api/article.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/web/views/api/article.py')
-rw-r--r--src/web/views/api/article.py63
1 files changed, 25 insertions, 38 deletions
diff --git a/src/web/views/api/article.py b/src/web/views/api/article.py
index 23c5c495..5971f47d 100644
--- a/src/web/views/api/article.py
+++ b/src/web/views/api/article.py
@@ -1,66 +1,53 @@
-#! /usr/bin/env python
-# -*- coding: utf-8 -
-
-from flask import g
+from conf import API_ROOT
import dateutil.parser
+from datetime import datetime
+from flask import current_app
+from flask.ext.restful import Api
+from web.views.common import api_permission
from web.controllers import ArticleController
-from web.views.api.common import PyAggAbstractResource,\
- PyAggResourceNew, \
- PyAggResourceExisting, \
- PyAggResourceMulti
-
-
-ARTICLE_ATTRS = {'user_id': {'type': int},
- 'feed_id': {'type': int},
- 'category_id': {'type': int},
- 'entry_id': {'type': str},
- 'link': {'type': str},
- 'title': {'type': str},
- 'readed': {'type': bool},
- 'like': {'type': bool},
- 'content': {'type': str},
- 'date': {'type': str},
- 'retrieved_date': {'type': str}}
+from web.views.api.common import (PyAggAbstractResource,
+ PyAggResourceNew, PyAggResourceExisting, PyAggResourceMulti)
class ArticleNewAPI(PyAggResourceNew):
controller_cls = ArticleController
- attrs = ARTICLE_ATTRS
- to_date = ['date', 'retrieved_date']
class ArticleAPI(PyAggResourceExisting):
controller_cls = ArticleController
- attrs = ARTICLE_ATTRS
- to_date = ['date', 'retrieved_date']
class ArticlesAPI(PyAggResourceMulti):
controller_cls = ArticleController
- attrs = ARTICLE_ATTRS
- to_date = ['date', 'retrieved_date']
class ArticlesChallenge(PyAggAbstractResource):
controller_cls = ArticleController
attrs = {'ids': {'type': list, 'default': []}}
- to_date = ['date', 'retrieved_date']
+ @api_permission.require(http_exception=403)
def get(self):
- parsed_args = self.reqparse_args()
+ parsed_args = self.reqparse_args(right='read')
+ # collecting all attrs for casting purpose
+ attrs = self.controller_cls._get_attrs_desc('admin')
for id_dict in parsed_args['ids']:
- for key in self.to_date:
- if key in id_dict:
+ keys_to_ignore = []
+ for key in id_dict:
+ if key not in attrs:
+ keys_to_ignore.append(key)
+ if issubclass(attrs[key]['type'], datetime):
id_dict[key] = dateutil.parser.parse(id_dict[key])
+ for key in keys_to_ignore:
+ del id_dict[key]
- result = list(self.wider_controller.challenge(parsed_args['ids']))
+ result = list(self.controller.challenge(parsed_args['ids']))
return result or None, 200 if result else 204
+api = Api(current_app, prefix=API_ROOT)
-g.api.add_resource(ArticleNewAPI, '/article', endpoint='article_new.json')
-g.api.add_resource(ArticleAPI, '/article/<int:obj_id>',
- endpoint='article.json')
-g.api.add_resource(ArticlesAPI, '/articles', endpoint='articles.json')
-g.api.add_resource(ArticlesChallenge, '/articles/challenge',
- endpoint='articles_challenge.json')
+api.add_resource(ArticleNewAPI, '/article', endpoint='article_new.json')
+api.add_resource(ArticleAPI, '/article/<int:obj_id>', endpoint='article.json')
+api.add_resource(ArticlesAPI, '/articles', endpoint='articles.json')
+api.add_resource(ArticlesChallenge, '/articles/challenge',
+ endpoint='articles_challenge.json')
bgstack15