Skip to content

Commit 820b4f7

Browse files
committed
Use orjson with indentation for json schema
1 parent 05602bd commit 820b4f7

4 files changed

Lines changed: 19 additions & 5 deletions

File tree

src/dstack/_internal/core/models/common.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from pydantic_duality import DualBaseModel
99
from typing_extensions import Annotated
1010

11-
from dstack._internal.utils.json_utils import get_orjson_options, orjson_default
11+
from dstack._internal.utils.json_utils import get_orjson_default_options, orjson_default
1212

1313
IncludeExcludeFieldType = Union[int, str]
1414
IncludeExcludeSetType = set[IncludeExcludeFieldType]
@@ -21,7 +21,7 @@
2121
def _orjson_dumps(v: Any, *, default: Any) -> str:
2222
return orjson.dumps(
2323
v,
24-
option=get_orjson_options(),
24+
option=get_orjson_default_options(),
2525
default=orjson_default,
2626
).decode()
2727

src/dstack/_internal/core/models/configurations.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from pathlib import PurePosixPath
55
from typing import Any, Dict, List, Optional, Union
66

7+
import orjson
78
from pydantic import Field, ValidationError, conint, constr, root_validator, validator
89
from typing_extensions import Annotated, Literal
910

@@ -18,6 +19,7 @@
1819
from dstack._internal.core.models.services import AnyModel, OpenAIChatModel
1920
from dstack._internal.core.models.unix import UnixUser
2021
from dstack._internal.core.models.volumes import MountPoint, VolumeConfiguration, parse_mount_point
22+
from dstack._internal.utils.json_utils import get_orjson_default_options, orjson_default
2123

2224
CommandsList = List[str]
2325
ValidPort = conint(gt=0, le=65536)
@@ -566,13 +568,25 @@ def parse_apply_configuration(data: dict) -> AnyApplyConfiguration:
566568
AnyDstackConfiguration = AnyApplyConfiguration
567569

568570

571+
# Custom _orjson_dumps for DstackConfiguration with indentation
572+
def _orjson_dumps(v: Any, *, default: Any) -> str:
573+
return orjson.dumps(
574+
v,
575+
option=get_orjson_default_options() | orjson.OPT_INDENT_2,
576+
default=orjson_default,
577+
).decode()
578+
579+
569580
class DstackConfiguration(CoreModel):
570581
__root__: Annotated[
571582
AnyDstackConfiguration,
572583
Field(discriminator="type"),
573584
]
574585

575586
class Config:
587+
json_loads = orjson.loads
588+
json_dumps = _orjson_dumps
589+
576590
@staticmethod
577591
def schema_extra(schema: Dict[str, Any]):
578592
schema["$schema"] = "http://json-schema.org/draft-07/schema#"

src/dstack/_internal/server/utils/routers.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from dstack._internal.core.errors import ServerClientError, ServerClientErrorCode
88
from dstack._internal.core.models.common import CoreModel
9-
from dstack._internal.utils.json_utils import get_orjson_options, orjson_default
9+
from dstack._internal.utils.json_utils import get_orjson_default_options, orjson_default
1010

1111

1212
class CustomORJSONResponse(Response):
@@ -26,7 +26,7 @@ class CustomORJSONResponse(Response):
2626
def render(self, content: Any) -> bytes:
2727
return orjson.dumps(
2828
content,
29-
option=get_orjson_options(),
29+
option=get_orjson_default_options(),
3030
default=orjson_default,
3131
)
3232

src/dstack/_internal/utils/json_utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,5 @@ def orjson_default(obj):
3232
raise TypeError
3333

3434

35-
def get_orjson_options() -> int:
35+
def get_orjson_default_options() -> int:
3636
return orjson.OPT_NON_STR_KEYS

0 commit comments

Comments
 (0)