-
Saulo Roberto Vitorino Dornelas authored
from flask import jsonify, request
from flask_restful import Resource
from ...db.database_handler import DatabaseHandler
from ...db.db_utils import RequestValidator, RequestTransformer, KeysTransformer
import json
class BaseAPI(Resource):
def __init__(self, table, pool, db_handler=None):
if table:
self._table = table
self._db_handler = db_handler if db_handler else DatabaseHandler(self._table, pool)
self._request_validator = RequestValidator(self._table)
self._request_transformer = RequestTransformer(self._table)
self._keys_transformer = KeysTransformer(self._table)
def get(self, codigo=None):
if codigo and codigo.isnumeric():
res = self._db_handler.get({ 'codigo': codigo })
return self._modify_res(res, 'GET')
res = self._db_handler.get(None)
return self._modify_res(res, 'GET')
def post(self):
res = self._post_put()
return self._modify_res(res, 'POST')
def put(self, codigo):
req = request.get_json(force=True)
req['codigo'] = codigo
res = self._post_put()
return self._modify_res(res, 'PUT')
def delete(self, codigo):
res = self._db_handler.delete(codigo)
return self._modify_res(res, 'DELETE')
def _modify_req_body(self, body):
return body
def _modify_res(self, res, method=None):
return res
def _post_put(self, json_body=None):
json_body = request.get_json(force=True) if not json_body else json_body
json_body = self._treat_json(json_body)
if not self._request_validator.validate(json_body):
return {'mensagem': 'Corpo de requisição inválido'}, 400
json_body = self._request_transformer.transform(json_body)
return self._db_handler.post(json_body)
def _treat_json(self, json_body):
json_body = self._modify_req_body(json_body)
json_body = self._keys_transformer.transform_keys(json_body, mode='snake')
json_body = json_body if isinstance(json_body, dict) else json.loads(json_body)
return json_body