Skip to content

Commit e84b009

Browse files
committed
Make JSON Schema generation compatible with CLI
1 parent bf18026 commit e84b009

1 file changed

Lines changed: 20 additions & 5 deletions

File tree

generate_or_validate_json_schemas.py

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,14 @@
1414
from typing import Any, Iterator, Literal, cast
1515

1616
import click
17+
from bo4e_cli.io.version_file import create_version_file
18+
from bo4e_cli.models.version import Version
1719
from pydantic import BaseModel, TypeAdapter
1820
from pydantic.json_schema import GenerateJsonSchema as _GenerateJsonSchema
1921
from pydantic.json_schema import JsonSchemaValue
2022
from pydantic_core import core_schema
2123

22-
from bo4e import ZusatzAttribut
24+
from bo4e import ZusatzAttribut, __gh_version__
2325

2426
logging.basicConfig(level=logging.INFO, stream=sys.stdout)
2527
_logger = logging.getLogger(__name__)
@@ -148,6 +150,15 @@ def generate_schema(file_path: Path, schema_json_dict: dict[str, Any]) -> None:
148150
json_schema_file.write("\n")
149151

150152

153+
def generate_version_file(file_path: Path, version: str) -> None:
154+
"""
155+
Generate a version file with the given version
156+
"""
157+
with open(file_path, "w+", encoding="utf-8") as version_file:
158+
version_file.write(version)
159+
_logger.info("Generated version file at %s with content %s", file_path, version)
160+
161+
151162
def replace_refs(
152163
schema_json_dict: dict[str, Any], namespace: dict[str, tuple[str, str, PARSABLE_CLASS_TYPE]], target_version: str
153164
) -> None:
@@ -200,11 +211,12 @@ def traverse_dict(obj: dict[str, Any]) -> None:
200211
required=False,
201212
type=click.STRING,
202213
envvar="TARGET_VERSION",
203-
default="v0.0.0",
214+
default=None,
204215
)
205-
def generate_or_validate_json_schemas(mode: Literal["validate", "generate"], target_version: str) -> None:
216+
def generate_or_validate_json_schemas(mode: Literal["validate", "generate"], target_version: str | None) -> None:
206217
"""generate json schemas for all BOs and COMs"""
207-
_logger.info("Mode: %s, target version: %s", mode, target_version)
218+
version = Version.from_str(target_version or __gh_version__)
219+
_logger.info("Mode: %s, target version: %s", mode, version)
208220
packages = ["bo", "com", "enum"]
209221

210222
if mode == "generate":
@@ -224,7 +236,7 @@ def generate_or_validate_json_schemas(mode: Literal["validate", "generate"], tar
224236
file_path = output_directory / pkg / (name + ".json")
225237

226238
schema_json_dict = get_schema_json_dict(cls)
227-
replace_refs(schema_json_dict, namespace, target_version)
239+
replace_refs(schema_json_dict, namespace, str(version))
228240

229241
if mode == "validate":
230242
validate_schema(file_path, schema_json_dict, name)
@@ -233,6 +245,9 @@ def generate_or_validate_json_schemas(mode: Literal["validate", "generate"], tar
233245
_logger.info("Generated schema for %s", name)
234246
else:
235247
raise ValueError(f"Unknown mode '{mode}'")
248+
if mode == "generate":
249+
create_version_file(output_directory, version)
250+
_logger.info("Generated version file at %s with version %s", output_directory / ".version", version)
236251

237252

238253
if __name__ == "__main__":

0 commit comments

Comments
 (0)