sql.table.Column: force default to be server_default, http_server_async.response.Response: return json response when appropriate

This commit is contained in:
Izalia Mae 2021-11-17 07:42:46 -05:00
parent 04e7fc258b
commit 6b45bb1ff6
3 changed files with 18 additions and 1 deletions

View file

@ -62,6 +62,10 @@ class Headers(DotDict):
super().__setitem__(key, HeaderItem(key, value))
def get(self, key, default=None):
return super().get(key.title(), default)
def as_dict(self):
data = {}

View file

@ -155,6 +155,9 @@ class Response:
def set_error(self, message, status=500):
try:
if self.request and 'json' in self.request.headers.getone('accept', ''):
return self.set_json({'error': message, 'code': status}, status=status)
return self.set_template('error.haml',
context = {
'error_message': message,

View file

@ -1,3 +1,5 @@
import json
from sqlalchemy import ForeignKey
from sqlalchemy import (
Column as sqlalchemy_column,
@ -9,6 +11,12 @@ from ..dotdict import DotDict
ptype = type
SqlTypes = {t.lower(): getattr(Types, t) for t in dir(Types) if not t.startswith('_')}
default_types = {
dict: json.dumps,
list: json.dumps,
tuple: json.dumps,
bool: lambda data: "1" if data else "0"
}
class Column(sqlalchemy_column):
@ -34,7 +42,9 @@ class Column(sqlalchemy_column):
except KeyError:
raise KeyError(f'Invalid SQL data type: {type}')
if kwargs.get('default'):
if 'default' in kwargs.keys():
value = kwargs.pop('default')
kwargs['server_default'] = default_types.get(ptype(value), str)(value)
kwargs['nullable'] = False
options = [name, type]