updated modelgen tool
This commit is contained in:
@@ -16,10 +16,11 @@ Output formats:
|
||||
- prisma: Prisma schema
|
||||
|
||||
Usage:
|
||||
python -m modelgen --help
|
||||
python -m modelgen from-config -c config.json -o models.py
|
||||
python -m modelgen from-schema -o models/ --targets pydantic,typescript
|
||||
python -m modelgen extract --source /path/to/django --targets pydantic
|
||||
python -m soleprint.station.tools.modelgen --help
|
||||
python -m soleprint.station.tools.modelgen from-config -c config.json -o models.py
|
||||
python -m soleprint.station.tools.modelgen from-schema -o models/ --targets pydantic,typescript
|
||||
python -m soleprint.station.tools.modelgen extract --source /path/to/django --targets pydantic
|
||||
python -m soleprint.station.tools.modelgen generate --config schema/modelgen.json
|
||||
"""
|
||||
|
||||
import argparse
|
||||
@@ -177,6 +178,47 @@ def cmd_extract(args):
|
||||
print("Done!")
|
||||
|
||||
|
||||
def cmd_generate(args):
|
||||
"""Generate all targets from a JSON config file."""
|
||||
import json
|
||||
from .loader import load_schema
|
||||
|
||||
config_path = Path(args.config)
|
||||
if not config_path.exists():
|
||||
print(f"Error: Config file not found: {config_path}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
with open(config_path) as f:
|
||||
config = json.load(f)
|
||||
|
||||
# Resolve paths relative to current working directory
|
||||
schema_path = Path(config["schema"])
|
||||
if not schema_path.exists():
|
||||
print(f"Error: Schema folder not found: {schema_path}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
print(f"Loading schema: {schema_path}")
|
||||
|
||||
for target_conf in config["targets"]:
|
||||
target = target_conf["target"]
|
||||
output = Path(target_conf["output"])
|
||||
include = set(target_conf.get("include", []))
|
||||
name_map = target_conf.get("name_map", {})
|
||||
|
||||
if target not in GENERATORS:
|
||||
print(f"Warning: Unknown target '{target}', skipping", file=sys.stderr)
|
||||
continue
|
||||
|
||||
# Load schema with this target's include filter
|
||||
schema = load_schema(schema_path, include=include or None)
|
||||
|
||||
generator = GENERATORS[target](name_map=name_map)
|
||||
print(f"Generating {target} to: {output}")
|
||||
generator.generate(schema, output)
|
||||
|
||||
print("Done!")
|
||||
|
||||
|
||||
def cmd_list_formats(args):
|
||||
"""List available output formats."""
|
||||
print("Available output formats:")
|
||||
@@ -295,6 +337,21 @@ def main():
|
||||
)
|
||||
extract_parser.set_defaults(func=cmd_extract)
|
||||
|
||||
|
||||
# generate command (config-driven multi-target)
|
||||
gen_parser = subparsers.add_parser(
|
||||
"generate",
|
||||
help="Generate all targets from a JSON config file",
|
||||
)
|
||||
gen_parser.add_argument(
|
||||
"--config",
|
||||
"-c",
|
||||
type=str,
|
||||
required=True,
|
||||
help="Path to generation config file (e.g., schema/modelgen.json)",
|
||||
)
|
||||
gen_parser.set_defaults(func=cmd_generate)
|
||||
|
||||
# list-formats command
|
||||
formats_parser = subparsers.add_parser(
|
||||
"list-formats",
|
||||
|
||||
Reference in New Issue
Block a user