[lib][responses] add ORJSONResponse and update HJSONResponse
This commit is contained in:
parent
39d455b682
commit
d6075de2eb
@ -1,14 +1,12 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# builtins
|
# builtins
|
||||||
import numbers
|
import orjson
|
||||||
import csv
|
|
||||||
from datetime import date
|
|
||||||
from io import TextIOBase, StringIO
|
|
||||||
from half_orm.null import NULL
|
from half_orm.null import NULL
|
||||||
|
|
||||||
# asgi framework
|
# asgi framework
|
||||||
from starlette.responses import PlainTextResponse, Response, JSONResponse
|
from starlette.responses import PlainTextResponse, Response, JSONResponse
|
||||||
|
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'InternalServerErrorResponse',
|
'InternalServerErrorResponse',
|
||||||
'NotFoundResponse',
|
'NotFoundResponse',
|
||||||
@ -44,26 +42,12 @@ class UnauthorizedResponse(Response):
|
|||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(status_code = 401)
|
super().__init__(status_code = 401)
|
||||||
|
|
||||||
class HJSONResponse(JSONResponse):
|
|
||||||
def __init__(self, obj):
|
|
||||||
obj = self.__serialize(obj)
|
|
||||||
super().__init__(
|
|
||||||
content=obj,
|
|
||||||
status_code = 200)
|
|
||||||
|
|
||||||
def __serialize(self, obj):
|
class ORJSONResponse(JSONResponse):
|
||||||
if isinstance(obj, dict):
|
def render(self, content: typ.Any) -> bytes:
|
||||||
robj = dict()
|
return orjson.dumps(content)
|
||||||
for key, value in obj.items():
|
|
||||||
robj[key] = self.__serialize(value)
|
|
||||||
return robj
|
class HJSONResponse(ORJSONResponse):
|
||||||
if isinstance(obj, list):
|
def render(self, content: typ.Generator):
|
||||||
robj = []
|
return super().render([ elt for elt in content ])
|
||||||
for value in obj:
|
|
||||||
robj.append(self.__serialize(value))
|
|
||||||
return robj
|
|
||||||
if isinstance(obj, numbers.Number) or isinstance(obj, str):
|
|
||||||
return obj
|
|
||||||
if obj == NULL:
|
|
||||||
return None
|
|
||||||
return str(obj)
|
|
||||||
|
Loading…
Reference in New Issue
Block a user