diff --git a/aw_server/rest.py b/aw_server/rest.py index 20c2d302..80d5287f 100644 --- a/aw_server/rest.py +++ b/aw_server/rest.py @@ -5,6 +5,7 @@ from threading import Lock from typing import Dict +import flask.json.provider import iso8601 from aw_core import schema from aw_core.models import Event @@ -54,10 +55,7 @@ def decorator(*args, **kwargs): # TODO: Clean up JSONEncoder code? # Move to server.py -class CustomJSONEncoder(json.JSONEncoder): - def __init__(self, *args, **kwargs): - super().__init__() - +class CustomJSONProvider(flask.json.provider.DefaultJSONProvider): def default(self, obj, *args, **kwargs): try: if isinstance(obj, datetime): @@ -66,15 +64,7 @@ def default(self, obj, *args, **kwargs): return obj.total_seconds() except TypeError: pass - return json.JSONEncoder.default(self, obj) - - -class AnyJson(fields.Raw): - def format(self, value): - if type(value) == dict: - return value - else: - return json.loads(value) + return super().default(obj) # Loads event and bucket schema from JSONSchema in aw_core diff --git a/aw_server/server.py b/aw_server/server.py index 821fb8e8..83766c06 100644 --- a/aw_server/server.py +++ b/aw_server/server.py @@ -26,7 +26,13 @@ class AWFlask(Flask): - def __init__(self, name, *args, **kwargs): + def __init__(self, name, testing: bool, *args, **kwargs): + self.json_provider_class = rest.CustomJSONProvider + + # Only pretty-print JSON if in testing mode (because of performance) + self.json_provider_class.compact = not testing + + # Initialize Flask Flask.__init__(self, name, *args, **kwargs) # Is set on later initialization @@ -36,23 +42,17 @@ def __init__(self, name, *args, **kwargs): def create_app( host: str, testing=True, storage_method=None, cors_origins=[], custom_static=dict() ) -> AWFlask: - app = AWFlask("aw-server", static_folder=static_folder, static_url_path="") - - if storage_method is None: - storage_method = aw_datastore.get_storage_methods()["memory"] - - # Only pretty-print JSON if in testing mode (because of performance) - app.config["JSONIFY_PRETTYPRINT_REGULAR"] = testing + app = AWFlask("aw-server", testing, static_folder=static_folder, static_url_path="") with app.app_context(): _config_cors(cors_origins, testing) - app.json_encoder = rest.CustomJSONEncoder - app.register_blueprint(root) app.register_blueprint(rest.blueprint) app.register_blueprint(get_custom_static_blueprint(custom_static)) + if storage_method is None: + storage_method = aw_datastore.get_storage_methods()["memory"] db = Datastore(storage_method, testing=testing) app.api = ServerAPI(db=db, testing=testing)