From 60694f47d02c37e3e54933a0b94cb202926c4b3d Mon Sep 17 00:00:00 2001 From: Gareth Coles Date: Fri, 16 Feb 2018 16:01:00 +0000 Subject: API schema validation decorator #yzuf (#15) * API schema validation decorator * Remove stray comma * Remove unnecessary conditional * Only cast to list when needed to --- pysite/views/api/bot/user.py | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) (limited to 'pysite/views/api/bot/user.py') diff --git a/pysite/views/api/bot/user.py b/pysite/views/api/bot/user.py index aad58e05..5e9dc444 100644 --- a/pysite/views/api/bot/user.py +++ b/pysite/views/api/bot/user.py @@ -1,10 +1,20 @@ # coding=utf-8 -from flask import jsonify, request +from flask import jsonify + +from schema import Schema from pysite.base_route import APIView, DBViewMixin -from pysite.constants import ErrorCodes -from pysite.decorators import valid_api_key +from pysite.constants import ValidationTypes +from pysite.decorators import api_key, api_params + + +SCHEMA = Schema([ + { + "user_id": int, + "role": int + } +]) REQUIRED_KEYS = [ "user_id", @@ -18,24 +28,12 @@ class UserView(APIView, DBViewMixin): table_name = "users" table_primary_key = "user_id" - @valid_api_key - def post(self): - data = request.get_json() - - if not isinstance(data, list): - data = [data] - + @api_key + @api_params(schema=SCHEMA, validation_type=ValidationTypes.json) + def post(self, data): for user in data: - if not all(k in user for k in REQUIRED_KEYS): - print(user) - return self.error(ErrorCodes.missing_parameters) - self.db.insert( - self.table_name, - { - "user_id": user["user_id"], - "role": user["role"], - }, + self.table_name, user, conflict="update", durability="soft" ) -- cgit v1.2.3 From 4e21e698865d52fc6cb8850f0b8b009b61f5b3cf Mon Sep 17 00:00:00 2001 From: Gareth Coles Date: Fri, 16 Feb 2018 16:03:34 +0000 Subject: Simplify user API route and return changes --- pysite/views/api/bot/user.py | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) (limited to 'pysite/views/api/bot/user.py') diff --git a/pysite/views/api/bot/user.py b/pysite/views/api/bot/user.py index 5e9dc444..8c2d8149 100644 --- a/pysite/views/api/bot/user.py +++ b/pysite/views/api/bot/user.py @@ -31,13 +31,9 @@ class UserView(APIView, DBViewMixin): @api_key @api_params(schema=SCHEMA, validation_type=ValidationTypes.json) def post(self, data): - for user in data: - self.db.insert( - self.table_name, user, - conflict="update", - durability="soft" - ) + changes = self.db.insert( + self.table_name, *data, + conflict="update" + ) - self.db.sync(self.table_name) - - return jsonify({"success": True}) + return jsonify(changes) -- cgit v1.2.3