Skip to content

Commit c6735b1

Browse files
committed
refactoring, code comment bug, remove go types and handle them in go config, simplify core
1 parent c97c2bf commit c6735b1

16 files changed

Lines changed: 1485 additions & 1711 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@ venv/
44
__pycache__/
55
*.egg-info/
66
notes/
7+
generated_examples/
78

89
codegen_*_test.py

json_explorer/codegen/__init__.py

Lines changed: 95 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,103 +4,173 @@
44
Generates code in various languages from JSON schema analysis.
55
"""
66

7-
from .registry import GeneratorRegistry, get_generator, list_supported_languages
8-
from .core.generator import CodeGenerator, GenerationResult, generate_code
9-
from .core.schema import (
7+
from .registry import (
8+
GeneratorRegistry,
9+
get_generator,
10+
list_supported_languages,
11+
register_generator,
12+
get_language_info,
13+
)
14+
from .core import (
15+
CodeGenerator,
16+
GeneratorError,
17+
GenerationResult,
18+
generate_code,
1019
Schema,
1120
Field,
1221
FieldType,
1322
convert_analyzer_output,
1423
extract_all_schemas,
24+
GeneratorConfig,
25+
load_config,
26+
NameSanitizer,
27+
NamingCase,
28+
TemplateEngine,
29+
TemplateError,
30+
create_template_engine,
1531
)
16-
from .core.config import GeneratorConfig, ConfigManager, load_config
1732

18-
# Initialize registry with available generators
33+
# Initialize global registry
1934
registry = GeneratorRegistry()
2035

36+
2137
# Auto-register available generators
22-
try:
23-
from .languages.go.generator import GoGenerator
38+
def _register_available_generators():
39+
"""Register all available language generators."""
40+
try:
41+
from .languages.go import GoGenerator
42+
43+
registry.register("go", GoGenerator, aliases=["golang"])
44+
except ImportError:
45+
pass
2446

25-
registry.register("go", GoGenerator)
26-
except ImportError:
27-
pass
47+
# Add more languages here as they become available
48+
# try:
49+
# from .languages.python import PythonGenerator
50+
# registry.register("python", PythonGenerator, aliases=["py"])
51+
# except ImportError:
52+
# pass
53+
54+
55+
# Initialize registry
56+
_register_available_generators()
2857

2958
# Version info
3059
__version__ = "0.1.0"
3160

3261

33-
# Convenience functions
3462
def generate_from_analysis(
3563
analyzer_result, language="go", config=None, root_name="Root"
36-
):
64+
) -> GenerationResult:
3765
"""
3866
Generate code from analyzer output.
3967
4068
Args:
4169
analyzer_result: Output from json_explorer.analyzer.analyze_json()
4270
language: Target language name
43-
config: Generator configuration dict or path
71+
config: GeneratorConfig instance, dict, or path to config file
4472
root_name: Name for root schema
4573
4674
Returns:
47-
GenerationResult with generated code
75+
GenerationResult with generated code and metadata
4876
"""
4977
# Convert analyzer result to schema
5078
root_schema = convert_analyzer_output(analyzer_result, root_name)
5179
all_schemas = extract_all_schemas(root_schema)
5280

53-
# Get generator
81+
# Get generator instance
5482
generator = get_generator(language, config)
5583

5684
# Generate code
5785
return generate_code(generator, all_schemas, root_name)
5886

5987

60-
def quick_generate(json_data, language="go", **options):
88+
def quick_generate(json_data, language="go", **options) -> str:
6189
"""
6290
Quick code generation from JSON data.
6391
6492
Args:
6593
json_data: JSON data (dict/list/str)
6694
language: Target language
67-
**options: Generator options
95+
**options: Generator configuration options
6896
6997
Returns:
7098
Generated code string
99+
100+
Raises:
101+
GeneratorError: If generation fails
71102
"""
72103
from json_explorer.analyzer import analyze_json
104+
import json as json_module
73105

74106
# Convert string to dict if needed
75107
if isinstance(json_data, str):
76-
import json
77-
78-
json_data = json.loads(json_data)
108+
try:
109+
json_data = json_module.loads(json_data)
110+
except json_module.JSONDecodeError as e:
111+
raise GeneratorError(f"Invalid JSON data: {e}")
79112

80113
# Analyze JSON
81-
analysis = analyze_json(json_data)
114+
try:
115+
analysis = analyze_json(json_data)
116+
except Exception as e:
117+
raise GeneratorError(f"JSON analysis failed: {e}")
82118

83119
# Generate code
84120
result = generate_from_analysis(analysis, language, options)
85121

86122
if result.success:
87123
return result.code
88124
else:
89-
raise RuntimeError(f"Code generation failed: {result.error_message}")
125+
raise GeneratorError(f"Code generation failed: {result.error_message}")
126+
127+
128+
def create_config(language="go", **kwargs) -> GeneratorConfig:
129+
"""
130+
Create a GeneratorConfig for the specified language.
131+
132+
Args:
133+
language: Target language
134+
**kwargs: Configuration options
135+
136+
Returns:
137+
GeneratorConfig instance
138+
"""
139+
return load_config(custom_config=kwargs)
90140

91141

92142
# Export main interfaces
93143
__all__ = [
144+
# Registry
94145
"GeneratorRegistry",
146+
"get_generator",
147+
"list_supported_languages",
148+
"register_generator",
149+
"registry",
150+
"get_language_info",
151+
# Core interfaces
95152
"CodeGenerator",
153+
"GeneratorError",
96154
"GenerationResult",
155+
"generate_code",
156+
# Schema system
97157
"Schema",
98158
"Field",
99159
"FieldType",
160+
"convert_analyzer_output",
161+
"extract_all_schemas",
162+
# Configuration
100163
"GeneratorConfig",
164+
"load_config",
165+
"create_config",
166+
# Naming utilities
167+
"NameSanitizer",
168+
"NamingCase",
169+
# Template system
170+
"TemplateEngine",
171+
"TemplateError",
172+
"create_template_engine",
173+
# High-level API
101174
"generate_from_analysis",
102175
"quick_generate",
103-
"get_generator",
104-
"list_supported_languages",
105-
"registry",
106176
]

0 commit comments

Comments
 (0)