Skip to content

Commit 3846dfb

Browse files
committed
python 3.10+
1 parent 6a9d19c commit 3846dfb

23 files changed

Lines changed: 3692 additions & 2372 deletions

json_explorer/codegen/__init__.py

Lines changed: 109 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,89 +1,137 @@
11
"""
2-
JSON Explorer Code Generation Module
2+
JSON Explorer Code Generation Module.
33
44
Generates code in various languages from JSON schema analysis.
5+
6+
Example:
7+
>>> from json_explorer.codegen import quick_generate
8+
>>> code = quick_generate({"name": "John", "age": 30}, language="python")
9+
>>> print(code)
510
"""
611

7-
# Import registry functions (this will trigger auto-registration)
8-
from .registry import (
9-
GeneratorRegistry,
10-
get_generator,
11-
list_supported_languages,
12-
register_generator,
13-
get_language_info,
14-
list_all_language_info,
15-
is_language_supported,
16-
get_registry,
17-
)
12+
import logging
13+
14+
# Configure module-level logger
15+
logger = logging.getLogger(__name__)
1816

1917
# Import core interfaces
2018
from .core import (
2119
CodeGenerator,
22-
GeneratorError,
23-
GenerationResult,
24-
generate_code,
25-
Schema,
2620
Field,
2721
FieldType,
22+
GenerationResult,
23+
GeneratorConfig,
24+
GeneratorError,
25+
NameTracker,
26+
Schema,
27+
TemplateError,
28+
TemplateManager,
2829
convert_analyzer_output,
30+
create_template_env,
2931
extract_all_schemas,
30-
GeneratorConfig,
32+
generate_code,
3133
load_config,
32-
NameSanitizer,
33-
NamingCase,
34-
TemplateEngine,
35-
TemplateError,
36-
create_template_engine,
34+
sanitize_name,
3735
)
3836

39-
# Version info
40-
__version__ = "0.1.0"
37+
# Import registry functions
38+
from .registry import (
39+
create_generator,
40+
get_aliases,
41+
get_generator,
42+
get_generator_class,
43+
get_language_info,
44+
is_language_supported,
45+
is_supported,
46+
list_all_language_info,
47+
list_languages,
48+
list_supported_languages,
49+
register,
50+
)
51+
52+
# Version
53+
__version__ = "0.2.0"
54+
55+
56+
# ============================================================================
57+
# High-Level API Functions
58+
# ============================================================================
4159

4260

4361
def generate_from_analysis(
44-
analyzer_result, language="go", config=None, root_name="Root"
62+
analyzer_result: dict,
63+
language: str = "go",
64+
config: GeneratorConfig | dict | str | None = None,
65+
root_name: str = "Root",
4566
) -> GenerationResult:
4667
"""
4768
Generate code from analyzer output.
4869
4970
Args:
5071
analyzer_result: Output from json_explorer.analyzer.analyze_json()
51-
language: Target language name
52-
config: GeneratorConfig instance, dict, or path to config file
72+
language: Target language name (e.g., 'go', 'python')
73+
config: Configuration (GeneratorConfig, dict, or file path)
5374
root_name: Name for root schema
5475
5576
Returns:
5677
GenerationResult with generated code and metadata
78+
79+
Example:
80+
>>> from json_explorer.analyzer import analyze_json
81+
>>> analysis = analyze_json({"name": "John", "age": 30})
82+
>>> result = generate_from_analysis(analysis, "python")
83+
>>> print(result.code)
5784
"""
85+
logger.info(f"Generating {language} code from analyzer result")
86+
5887
# Convert analyzer result to schema
5988
root_schema = convert_analyzer_output(analyzer_result, root_name)
6089
all_schemas = extract_all_schemas(root_schema)
6190

91+
logger.debug(f"Converted to {len(all_schemas)} schemas")
92+
6293
# Get generator instance
6394
generator = get_generator(language, config)
6495

6596
# Generate code
6697
return generate_code(generator, all_schemas, root_name)
6798

6899

69-
def quick_generate(json_data, language="go", **options) -> str:
100+
def quick_generate(
101+
json_data: dict | list | str,
102+
language: str = "go",
103+
**options,
104+
) -> str:
70105
"""
71106
Quick code generation from JSON data.
72107
108+
This is the simplest way to generate code from JSON.
109+
It handles analysis automatically.
110+
73111
Args:
74-
json_data: JSON data (dict/list/str)
75-
language: Target language
112+
json_data: JSON data (dict, list, or JSON string)
113+
language: Target language (e.g., 'go', 'python')
76114
**options: Generator configuration options
77115
78116
Returns:
79117
Generated code string
80118
81119
Raises:
82120
GeneratorError: If generation fails
121+
122+
Example:
123+
>>> code = quick_generate(
124+
... {"user_id": 1, "name": "Alice"},
125+
... language="python",
126+
... style="dataclass",
127+
... )
128+
>>> print(code)
83129
"""
84130
from json_explorer.analyzer import analyze_json
85131
import json as json_module
86132

133+
logger.info(f"Quick generate: {language}")
134+
87135
# Convert string to dict if needed
88136
if isinstance(json_data, str):
89137
try:
@@ -101,12 +149,13 @@ def quick_generate(json_data, language="go", **options) -> str:
101149
result = generate_from_analysis(analysis, language, options)
102150

103151
if result.success:
152+
logger.info("Quick generation completed successfully")
104153
return result.code
105154
else:
106155
raise GeneratorError(f"Code generation failed: {result.error_message}")
107156

108157

109-
def create_config(language="go", **kwargs) -> GeneratorConfig:
158+
def create_config(language: str = "go", **kwargs) -> GeneratorConfig:
110159
"""
111160
Create a GeneratorConfig for the specified language.
112161
@@ -116,21 +165,41 @@ def create_config(language="go", **kwargs) -> GeneratorConfig:
116165
117166
Returns:
118167
GeneratorConfig instance
168+
169+
Example:
170+
>>> config = create_config(
171+
... "python",
172+
... package_name="models",
173+
... style="pydantic",
174+
... )
119175
"""
120176
return load_config(custom_config=kwargs)
121177

122178

123-
# Export main interfaces
179+
# ============================================================================
180+
# Public API
181+
# ============================================================================
182+
183+
124184
__all__ = [
185+
# Version
186+
"__version__",
187+
# High-level API
188+
"generate_from_analysis",
189+
"quick_generate",
190+
"create_config",
125191
# Registry
126-
"GeneratorRegistry",
192+
"register",
127193
"get_generator",
194+
"create_generator",
195+
"get_generator_class",
196+
"list_languages",
128197
"list_supported_languages",
129-
"register_generator",
198+
"is_supported",
199+
"is_language_supported",
200+
"get_aliases",
130201
"get_language_info",
131202
"list_all_language_info",
132-
"is_language_supported",
133-
"get_registry",
134203
# Core interfaces
135204
"CodeGenerator",
136205
"GeneratorError",
@@ -145,15 +214,11 @@ def create_config(language="go", **kwargs) -> GeneratorConfig:
145214
# Configuration
146215
"GeneratorConfig",
147216
"load_config",
148-
"create_config",
149217
# Naming utilities
150-
"NameSanitizer",
151-
"NamingCase",
218+
"NameTracker",
219+
"sanitize_name",
152220
# Template system
153-
"TemplateEngine",
221+
"TemplateManager",
154222
"TemplateError",
155-
"create_template_engine",
156-
# High-level API
157-
"generate_from_analysis",
158-
"quick_generate",
223+
"create_template_env",
159224
]

0 commit comments

Comments
 (0)