diff options
Diffstat (limited to 'pysite/views/api')
| -rw-r--r-- | pysite/views/api/bot/__init__.py | 0 | ||||
| -rw-r--r-- | pysite/views/api/bot/tag.py | 66 | ||||
| -rw-r--r-- | pysite/views/api/healthcheck.py | 4 |
3 files changed, 68 insertions, 2 deletions
diff --git a/pysite/views/api/bot/__init__.py b/pysite/views/api/bot/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/pysite/views/api/bot/__init__.py diff --git a/pysite/views/api/bot/tag.py b/pysite/views/api/bot/tag.py new file mode 100644 index 00000000..acbdbc0c --- /dev/null +++ b/pysite/views/api/bot/tag.py @@ -0,0 +1,66 @@ +# coding=utf-8 + +from flask import g, jsonify, request + +import rethinkdb + +from pysite.base_route import APIView +from pysite.constants import ErrorCodes + + +class TagView(APIView): + path = '/tag' + name = 'tag' + table = 'tag' + + def __init__(self): + # make sure the table exists + with g.db.get_connection() as conn: + try: + rethinkdb.db(g.db.database).table_create(self.table, {'primary_key': 'tag_name'}).run(conn) + except rethinkdb.RqlRuntimeError: + print(f'Table {self.table} exists') + + def get(self): + """ + Indata must be provided as params, + API key must be provided as header + """ + rdb = rethinkdb.table(self.table) + api_key = request.headers.get('X-API-Key') + tag_name = request.args.get('tag_name') + + if self.validate_key(api_key): + if tag_name: + data = rdb.get(tag_name).run(g.db.conn) + data = dict(data) if data else {} + else: + data = rdb.pluck('tag_name').run(g.db.conn) + data = list(data) if data else [] + else: + self.error(ErrorCodes.invalid_api_key) + + return jsonify(data) + + def post(self): + """ Indata must be provided as JSON. """ + rdb = rethinkdb.table(self.table) + indata = request.get_json() + tag_name = indata.get('tag_name') + tag_content = indata.get('tag_content') + tag_category = indata.get('tag_category') + api_key = indata.get('api_key') + + if self.validate_key(api_key): + if tag_name and tag_content: + rdb.insert({ + 'tag_name': tag_name, + 'tag_content': tag_content, + 'tag_category': tag_category + }).run(g.db.conn) + else: + self.error(ErrorCodes.missing_parameters) + else: + self.error(ErrorCodes.invalid_api_key) + + return jsonify({'success': True}) diff --git a/pysite/views/api/healthcheck.py b/pysite/views/api/healthcheck.py index 9d1f681a..2ff5dfb0 100644 --- a/pysite/views/api/healthcheck.py +++ b/pysite/views/api/healthcheck.py @@ -1,10 +1,10 @@ # coding=utf-8 from flask import jsonify -from pysite.base_route import RouteView +from pysite.base_route import APIView -class IndexView(RouteView): +class HealthCheckView(APIView): path = "/healthcheck" name = "healthcheck" |