aboutsummaryrefslogtreecommitdiffstats
path: root/pysite/views/api
diff options
context:
space:
mode:
Diffstat (limited to 'pysite/views/api')
-rw-r--r--pysite/views/api/bot/__init__.py0
-rw-r--r--pysite/views/api/bot/tag.py66
-rw-r--r--pysite/views/api/healthcheck.py4
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"