0
0
Fork 0
mirror of https://github.com/alerta/alerta.git synced 2025-04-15 10:04:18 +00:00

Fix deprecation warning for flask json_encoder ()

* Fix deprecation warning for flask json_encoder

* binary bitwise or operator not supported in type hints in 3.8

---------

Co-authored-by: Are Schjetne <are.schjetne@basefarm-orange.com>
This commit is contained in:
Are Schjetne 2023-03-02 09:03:28 +01:00 committed by GitHub
parent 09dc961885
commit 8e4262c5d6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 4 deletions
alerta

View file

@ -74,8 +74,9 @@ def create_app(config_override: Dict[str, Any] = None, environment: str = None)
plugins.register(app)
custom_webhooks.register(app)
from alerta.utils.format import CustomJSONEncoder
app.json_encoder = CustomJSONEncoder
from alerta.utils.format import AlertaJsonProvider
app.json_provider_class = AlertaJsonProvider
app.json = AlertaJsonProvider(app)
from alerta.views import api
app.register_blueprint(api)

View file

@ -1,12 +1,29 @@
import datetime
import json
import traceback
from typing import Any, Optional
from decimal import Decimal
from typing import Any, Optional, Union
from flask import json
from flask.json.provider import JSONProvider
dt = datetime.datetime
class AlertaJsonProvider(JSONProvider):
"""JSON Provider for Flask app to use CustomJSONEncoder."""
ensure_ascii: bool = True
sort_keys: bool = True
def dumps(self, obj, **kwargs):
kwargs.setdefault('ensure_ascii', self.ensure_ascii)
kwargs.setdefault('sort_keys', self.sort_keys)
return json.dumps(obj, **kwargs, cls=CustomJSONEncoder)
def loads(self, s: Union[str, bytes], **kwargs):
return json.loads(s, **kwargs)
class CustomJSONEncoder(json.JSONEncoder):
def default(self, o: Any) -> Any: # pylint: disable=method-hidden
from alerta.models.alert import Alert, History
@ -23,6 +40,8 @@ class CustomJSONEncoder(json.JSONEncoder):
return DateTime.iso8601(o)
elif isinstance(o, datetime.timedelta):
return int(o.total_seconds())
elif isinstance(o, Decimal):
return str(o)
elif isinstance(o, (Alert, History)):
return o.serialize
elif isinstance(o, Exception):