blob: 09bdb4e4c3b851af863db09ac0cbbc621665fe9d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
from datetime import datetime
import dateutil.parser
from flask import current_app
from flask_restful import Api
from newspipe.bootstrap import application
from newspipe.controllers import ArticleController
from newspipe.web.views.api.v2.common import PyAggAbstractResource
from newspipe.web.views.api.v2.common import PyAggResourceExisting
from newspipe.web.views.api.v2.common import PyAggResourceMulti
from newspipe.web.views.api.v2.common import PyAggResourceNew
from newspipe.web.views.common import api_permission
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=application.config["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"
)
|