7
7
from jinja2 import Environment , PackageLoader
8
8
9
9
from .log import logger
10
- from .config import Config
11
10
from .source import get_source
11
+ from .config import Config , RestConfig , WebhookConfig
12
12
from .parser import (
13
13
OpenAPIData ,
14
14
WebhookData ,
39
39
def load_config () -> Config :
40
40
pyproject = tomli .loads (Path ("./pyproject.toml" ).read_text ())
41
41
config_dict : Dict [str , Any ] = pyproject .get ("tool" , {}).get ("codegen" , {})
42
- config_dict = {
43
- k .replace ("--" , "" ).replace ("-" , "_" ): v for k , v in config_dict .items ()
44
- }
42
+
45
43
return Config .parse_obj (config_dict )
46
44
47
45
48
- def build_rest_api (data : OpenAPIData , config : Config ):
46
+ def build_rest_api (data : OpenAPIData , rest : RestConfig ):
49
47
logger .info ("Start generating rest api codes..." )
50
48
51
- client_path = Path (config . client_output )
49
+ client_path = Path (rest . output_dir )
52
50
shutil .rmtree (client_path )
53
51
client_path .mkdir (parents = True , exist_ok = True )
54
52
@@ -74,7 +72,7 @@ def build_rest_api(data: OpenAPIData, config: Config):
74
72
tag_path = client_path / f"{ tag } .py"
75
73
tag_path .write_text (
76
74
client_template .render (
77
- tag = tag , endpoints = endpoints , rest_api_version = config . rest_api_version
75
+ tag = tag , endpoints = endpoints , rest_api_version = rest . version
78
76
)
79
77
)
80
78
logger .info (f"Successfully built endpoints for tag { tag } !" )
@@ -92,21 +90,21 @@ def build_rest_api(data: OpenAPIData, config: Config):
92
90
logger .info ("Successfully generated rest api codes!" )
93
91
94
92
95
- def build_webhook (data : WebhookData , config : Config ):
93
+ def build_webhook (data : WebhookData , webhook : WebhookConfig ):
96
94
logger .info ("Start generating webhook codes..." )
97
95
98
96
# build models
99
97
logger .info ("Building webhook models..." )
100
98
models_template = env .get_template ("models/webhooks.py.jinja" )
101
- models_path = Path (config . webhooks_output )
99
+ models_path = Path (webhook . output )
102
100
models_path .parent .mkdir (parents = True , exist_ok = True )
103
101
models_path .write_text (models_template .render (models = data .models ))
104
102
logger .info ("Successfully built webhook models!" )
105
103
106
104
# build types
107
105
logger .info ("Building webhook types..." )
108
106
types_template = env .get_template ("models/webhook_types.py.jinja" )
109
- types_path = Path (config . webhook_types_output )
107
+ types_path = Path (webhook . types_output )
110
108
types_path .parent .mkdir (parents = True , exist_ok = True )
111
109
types_path .write_text (
112
110
types_template .render (
@@ -133,30 +131,31 @@ def build():
133
131
config = load_config ()
134
132
logger .info (f"Loaded config: { config !r} " )
135
133
136
- logger .info ("Start getting OpenAPI source..." )
137
- source = get_source (httpx .URL (config .rest_description_source ))
138
- logger .info (f"Getting schema from { source .uri } succeeded!" )
139
-
140
- logger .info ("Start parsing OpenAPI spec..." )
141
- _patch_openapi_spec (source .root )
142
- parsed_data = parse_openapi_spec (source , config )
143
- logger .info (
144
- "Successfully parsed OpenAPI spec: "
145
- f"{ len (parsed_data .schemas )} schemas, { len (parsed_data .endpoints )} endpoints"
146
- )
134
+ for versioned_rest in config .rest :
135
+ logger .info (f"Start getting OpenAPI source for { versioned_rest .version } ..." )
136
+ source = get_source (httpx .URL (versioned_rest .description_source ))
137
+ logger .info (f"Getting schema from { source .uri } succeeded!" )
138
+
139
+ logger .info (f"Start parsing OpenAPI spec for { versioned_rest .version } ..." )
140
+ _patch_openapi_spec (source .root )
141
+ parsed_data = parse_openapi_spec (source , versioned_rest , config )
142
+ logger .info (
143
+ f"Successfully parsed OpenAPI spec { versioned_rest .version } : "
144
+ f"{ len (parsed_data .schemas )} schemas, { len (parsed_data .endpoints )} endpoints"
145
+ )
147
146
148
- build_rest_api (parsed_data , config )
147
+ build_rest_api (parsed_data , versioned_rest )
149
148
150
- del parsed_data
149
+ del parsed_data
151
150
152
151
logger .info ("Start getting Webhook source..." )
153
- source = get_source (httpx .URL (config .webhook_schema_source ))
152
+ source = get_source (httpx .URL (config .webhook . schema_source ))
154
153
logger .info (f"Getting schema from { source .uri } succeeded!" )
155
154
156
155
logger .info ("Start parsing Webhook spec..." )
157
- parsed_data = parse_webhook_schema (source , config )
156
+ parsed_data = parse_webhook_schema (source , config . webhook , config )
158
157
logger .info (
159
158
f"Successfully parsed Webhook spec: { len (parsed_data .definitions )} schemas"
160
159
)
161
160
162
- build_webhook (parsed_data , config )
161
+ build_webhook (parsed_data , config . webhook )
0 commit comments