11"""
2- JSON Explorer Code Generation Module
2+ JSON Explorer Code Generation Module.
33
44Generates 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
2018from .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
4361def 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