diff options
Diffstat (limited to 'pysite/views/api/bot')
-rw-r--r-- | pysite/views/api/bot/clean.py | 48 | ||||
-rw-r--r-- | pysite/views/api/bot/off_topic_names.py | 47 |
2 files changed, 84 insertions, 11 deletions
diff --git a/pysite/views/api/bot/clean.py b/pysite/views/api/bot/clean.py new file mode 100644 index 00000000..82d1e735 --- /dev/null +++ b/pysite/views/api/bot/clean.py @@ -0,0 +1,48 @@ +from flask import jsonify +from schema import Schema + +from pysite.base_route import APIView +from pysite.constants import ValidationTypes +from pysite.decorators import api_key, api_params +from pysite.mixins import DBMixin + +POST_SCHEMA = Schema({ + 'log_data': [ + { + "author": str, + "user_id": str, + "content": str, + "role_id": str, + "timestamp": str, + "embeds": object, + "attachments": [str], + } + ] +}) + + +class CleanView(APIView, DBMixin): + path = '/bot/clean' + name = 'bot.clean' + table_name = 'clean_logs' + + @api_key + @api_params(schema=POST_SCHEMA, validation_type=ValidationTypes.json) + def post(self, data): + """ + Receive some log_data from a bulk deletion, + and store it in the database. + + Returns an ID which can be used to get the data + from the /bot/clean_logs/<id> endpoint. + """ + + # Insert and return the id to use for GET + insert = self.db.insert( + self.table_name, + { + "log_data": data["log_data"] + } + ) + + return jsonify({"log_id": insert['generated_keys'][0]}) diff --git a/pysite/views/api/bot/off_topic_names.py b/pysite/views/api/bot/off_topic_names.py index f353ab02..1c75428e 100644 --- a/pysite/views/api/bot/off_topic_names.py +++ b/pysite/views/api/bot/off_topic_names.py @@ -9,18 +9,24 @@ from pysite.decorators import api_key, api_params from pysite.mixins import DBMixin -POST_SCHEMA = Schema({ - 'name': And( - str, - len, - lambda name: all(c.isalnum() or c == '-' for c in name), - str.islower, - lambda name: len(name) <= 96, - error=( - "The channel name must be a non-blank string consisting only of" - " lowercase regular characters and '-' with a maximum length of 96" - ) +OFF_TOPIC_NAME = And( + str, + len, + lambda name: all(c.isalnum() or c == '-' for c in name), + str.islower, + lambda name: len(name) <= 96, + error=( + "The channel name must be a non-blank string consisting only of" + " lowercase regular characters and '-' with a maximum length of 96" ) +) + +DELETE_SCHEMA = Schema({ + 'name': OFF_TOPIC_NAME +}) + +POST_SCHEMA = Schema({ + 'name': OFF_TOPIC_NAME }) @@ -30,6 +36,25 @@ class OffTopicNamesView(APIView, DBMixin): table_name = "off_topic_names" @api_key + @api_params(schema=DELETE_SCHEMA, validation_type=ValidationTypes.params) + def delete(self, params): + """ + Removes a single off-topic name from the database. + Returns the result of the deletion call. + + API key must be provided as header. + Name to delete must be provided as the `name` query argument. + """ + + result = self.db.delete( + self.table_name, + params['name'], + return_changes=True + ) + + return jsonify(result) + + @api_key def get(self): """ Fetch all known off-topic channel names from the database. |