|
4 | 4 | Generates code in various languages from JSON schema analysis. |
5 | 5 | """ |
6 | 6 |
|
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, |
10 | 19 | Schema, |
11 | 20 | Field, |
12 | 21 | FieldType, |
13 | 22 | convert_analyzer_output, |
14 | 23 | extract_all_schemas, |
| 24 | + GeneratorConfig, |
| 25 | + load_config, |
| 26 | + NameSanitizer, |
| 27 | + NamingCase, |
| 28 | + TemplateEngine, |
| 29 | + TemplateError, |
| 30 | + create_template_engine, |
15 | 31 | ) |
16 | | -from .core.config import GeneratorConfig, ConfigManager, load_config |
17 | 32 |
|
18 | | -# Initialize registry with available generators |
| 33 | +# Initialize global registry |
19 | 34 | registry = GeneratorRegistry() |
20 | 35 |
|
| 36 | + |
21 | 37 | # 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 |
24 | 46 |
|
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() |
28 | 57 |
|
29 | 58 | # Version info |
30 | 59 | __version__ = "0.1.0" |
31 | 60 |
|
32 | 61 |
|
33 | | -# Convenience functions |
34 | 62 | def generate_from_analysis( |
35 | 63 | analyzer_result, language="go", config=None, root_name="Root" |
36 | | -): |
| 64 | +) -> GenerationResult: |
37 | 65 | """ |
38 | 66 | Generate code from analyzer output. |
39 | 67 |
|
40 | 68 | Args: |
41 | 69 | analyzer_result: Output from json_explorer.analyzer.analyze_json() |
42 | 70 | language: Target language name |
43 | | - config: Generator configuration dict or path |
| 71 | + config: GeneratorConfig instance, dict, or path to config file |
44 | 72 | root_name: Name for root schema |
45 | 73 |
|
46 | 74 | Returns: |
47 | | - GenerationResult with generated code |
| 75 | + GenerationResult with generated code and metadata |
48 | 76 | """ |
49 | 77 | # Convert analyzer result to schema |
50 | 78 | root_schema = convert_analyzer_output(analyzer_result, root_name) |
51 | 79 | all_schemas = extract_all_schemas(root_schema) |
52 | 80 |
|
53 | | - # Get generator |
| 81 | + # Get generator instance |
54 | 82 | generator = get_generator(language, config) |
55 | 83 |
|
56 | 84 | # Generate code |
57 | 85 | return generate_code(generator, all_schemas, root_name) |
58 | 86 |
|
59 | 87 |
|
60 | | -def quick_generate(json_data, language="go", **options): |
| 88 | +def quick_generate(json_data, language="go", **options) -> str: |
61 | 89 | """ |
62 | 90 | Quick code generation from JSON data. |
63 | 91 |
|
64 | 92 | Args: |
65 | 93 | json_data: JSON data (dict/list/str) |
66 | 94 | language: Target language |
67 | | - **options: Generator options |
| 95 | + **options: Generator configuration options |
68 | 96 |
|
69 | 97 | Returns: |
70 | 98 | Generated code string |
| 99 | +
|
| 100 | + Raises: |
| 101 | + GeneratorError: If generation fails |
71 | 102 | """ |
72 | 103 | from json_explorer.analyzer import analyze_json |
| 104 | + import json as json_module |
73 | 105 |
|
74 | 106 | # Convert string to dict if needed |
75 | 107 | 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}") |
79 | 112 |
|
80 | 113 | # 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}") |
82 | 118 |
|
83 | 119 | # Generate code |
84 | 120 | result = generate_from_analysis(analysis, language, options) |
85 | 121 |
|
86 | 122 | if result.success: |
87 | 123 | return result.code |
88 | 124 | 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) |
90 | 140 |
|
91 | 141 |
|
92 | 142 | # Export main interfaces |
93 | 143 | __all__ = [ |
| 144 | + # Registry |
94 | 145 | "GeneratorRegistry", |
| 146 | + "get_generator", |
| 147 | + "list_supported_languages", |
| 148 | + "register_generator", |
| 149 | + "registry", |
| 150 | + "get_language_info", |
| 151 | + # Core interfaces |
95 | 152 | "CodeGenerator", |
| 153 | + "GeneratorError", |
96 | 154 | "GenerationResult", |
| 155 | + "generate_code", |
| 156 | + # Schema system |
97 | 157 | "Schema", |
98 | 158 | "Field", |
99 | 159 | "FieldType", |
| 160 | + "convert_analyzer_output", |
| 161 | + "extract_all_schemas", |
| 162 | + # Configuration |
100 | 163 | "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 |
101 | 174 | "generate_from_analysis", |
102 | 175 | "quick_generate", |
103 | | - "get_generator", |
104 | | - "list_supported_languages", |
105 | | - "registry", |
106 | 176 | ] |
0 commit comments