diff options
author | Cédric Bonhomme <cedric@cedricbonhomme.org> | 2020-02-26 11:27:31 +0100 |
---|---|---|
committer | Cédric Bonhomme <cedric@cedricbonhomme.org> | 2020-02-26 11:27:31 +0100 |
commit | 62b3afeeedfe054345f86093e2d243e956c1e3c9 (patch) | |
tree | bbd58f5c8c07f5d87b1c1cca73fa1d5af6178f48 /newspipe/web/views/api/v2/article.py | |
parent | Updated Python dependencies. (diff) | |
download | newspipe-62b3afeeedfe054345f86093e2d243e956c1e3c9.tar.gz newspipe-62b3afeeedfe054345f86093e2d243e956c1e3c9.tar.bz2 newspipe-62b3afeeedfe054345f86093e2d243e956c1e3c9.zip |
The project is now using Poetry.
Diffstat (limited to 'newspipe/web/views/api/v2/article.py')
-rw-r--r-- | newspipe/web/views/api/v2/article.py | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/newspipe/web/views/api/v2/article.py b/newspipe/web/views/api/v2/article.py new file mode 100644 index 00000000..2be286c6 --- /dev/null +++ b/newspipe/web/views/api/v2/article.py @@ -0,0 +1,53 @@ +from conf import API_ROOT +import dateutil.parser +from datetime import datetime +from flask import current_app +from flask_restful import Api + +from web.views.common import api_permission +from web.controllers import ArticleController +from web.views.api.v2.common import (PyAggAbstractResource, + PyAggResourceNew, PyAggResourceExisting, PyAggResourceMulti) + + +class ArticleNewAPI(PyAggResourceNew): + controller_cls = ArticleController + + +class ArticleAPI(PyAggResourceExisting): + controller_cls = ArticleController + + +class ArticlesAPI(PyAggResourceMulti): + controller_cls = ArticleController + + +class ArticlesChallenge(PyAggAbstractResource): + controller_cls = ArticleController + attrs = {'ids': {'type': list, 'default': []}} + + @api_permission.require(http_exception=403) + def get(self): + 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']: + 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.controller.challenge(parsed_args['ids'])) + return result or None, 200 if result else 204 + +api = Api(current_app, prefix=API_ROOT) + +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') |