mirror of
https://github.com/alerta/alerta.git
synced 2025-04-15 10:04:18 +00:00
Fix deprecation warning for flask json_encoder (#1812)
* 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:
parent
09dc961885
commit
8e4262c5d6
2 changed files with 24 additions and 4 deletions
|
@ -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)
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Add table
Reference in a new issue