Clean up json dumps (#642)

This commit is contained in:
Xiaojing Chen 2023-03-08 06:37:34 +08:00 committed by GitHub
parent e106b7aedf
commit ae5b6426aa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 20 additions and 10 deletions

View File

@ -68,7 +68,7 @@ class Tag(Base):
if not prop.is_local or prop.is_string: if not prop.is_local or prop.is_string:
return str(prop) return str(prop)
if issubclass(prop.type_, str): if issubclass(prop.type_, str):
return json.dumps(prop.full_name, ensure_ascii=False) return utils.json_dumps(prop.full_name)
prop = prop.full_name prop = prop.full_name
# Handle event props. # Handle event props.
@ -88,7 +88,7 @@ class Tag(Base):
elif isinstance(prop, str): elif isinstance(prop, str):
if utils.is_wrapped(prop, "{"): if utils.is_wrapped(prop, "{"):
return prop return prop
return json.dumps(prop, ensure_ascii=False) return utils.json_dumps(prop)
elif isinstance(prop, Figure): elif isinstance(prop, Figure):
prop = json.loads(to_json(prop))["data"] # type: ignore prop = json.loads(to_json(prop))["data"] # type: ignore
@ -103,7 +103,7 @@ class Tag(Base):
} }
# Dump the prop as JSON. # Dump the prop as JSON.
prop = json.dumps(prop, ensure_ascii=False) prop = utils.json_dumps(prop)
# This substitution is necessary to unwrap var values. # This substitution is necessary to unwrap var values.
prop = re.sub('"{', "", prop) prop = re.sub('"{', "", prop)

View File

@ -2,9 +2,9 @@
from __future__ import annotations from __future__ import annotations
import inspect import inspect
import json
from typing import Any, Callable, Dict, List, Set, Tuple from typing import Any, Callable, Dict, List, Set, Tuple
from pynecone import utils
from pynecone.base import Base from pynecone.base import Base
from pynecone.var import BaseVar, Var from pynecone.var import BaseVar, Var
@ -67,7 +67,7 @@ class EventHandler(Base):
# Otherwise, convert to JSON. # Otherwise, convert to JSON.
try: try:
values.append(json.dumps(arg, ensure_ascii=False)) values.append(utils.json_dumps(arg))
except TypeError as e: except TypeError as e:
raise TypeError( raise TypeError(
f"Arguments to event handlers must be Vars or JSON-serializable. Got {arg} of type {type(arg)}." f"Arguments to event handlers must be Vars or JSON-serializable. Got {arg} of type {type(arg)}."

View File

@ -1576,5 +1576,17 @@ def is_backend_variable(name: str) -> bool:
return name.startswith("_") and not name.startswith("__") return name.startswith("_") and not name.startswith("__")
def json_dumps(obj: Any):
"""Serialize ``obj`` to a JSON formatted ``str``, ensure_ascii=False.
Args:
obj: The obj to be fromatted
Returns:
str: The result of the json dumps
"""
return json.dumps(obj, ensure_ascii=False)
# Store this here for performance. # Store this here for performance.
StateBases = get_base_class(StateVar) StateBases = get_base_class(StateVar)

View File

@ -1,8 +1,6 @@
import json
import pytest import pytest
from pynecone import event from pynecone import event, utils
from pynecone.event import Event, EventHandler, EventSpec from pynecone.event import Event, EventHandler, EventSpec
from pynecone.var import Var from pynecone.var import Var
@ -59,8 +57,8 @@ def test_call_event_handler():
assert event_spec.handler == handler assert event_spec.handler == handler
assert event_spec.local_args == () assert event_spec.local_args == ()
assert event_spec.args == ( assert event_spec.args == (
("arg1", json.dumps(first, ensure_ascii=False)), ("arg1", utils.json_dumps(first)),
("arg2", json.dumps(second, ensure_ascii=False)), ("arg2", utils.json_dumps(second)),
) )
handler = EventHandler(fn=test_fn_with_args) handler = EventHandler(fn=test_fn_with_args)