9
9
import httpcore
10
10
import httpx
11
11
import yaml
12
- from jinja2 import Environment , PackageLoader
12
+ from jinja2 import Environment , PackageLoader , ChoiceLoader , FileSystemLoader
13
13
14
14
from openapi_python_client import utils
15
15
@@ -30,8 +30,15 @@ class Project:
30
30
project_name_override : Optional [str ] = None
31
31
package_name_override : Optional [str ] = None
32
32
33
- def __init__ (self , * , openapi : GeneratorData ) -> None :
33
+ def __init__ (self , * , openapi : GeneratorData , custom_template_path : Optional [ str ] = None ) -> None :
34
34
self .openapi : GeneratorData = openapi
35
+
36
+ package_loader = PackageLoader (__package__ )
37
+ if custom_template_path is not None :
38
+ loader = ChoiceLoader ([FileSystemLoader (custom_template_path ), package_loader ,])
39
+ else :
40
+ loader = package_loader
41
+ self .env : Environment = Environment (loader = loader , trim_blocks = True , lstrip_blocks = True )
35
42
self .env : Environment = Environment (loader = PackageLoader (__package__ ), trim_blocks = True , lstrip_blocks = True )
36
43
37
44
self .project_name : str = self .project_name_override or f"{ utils .kebab_case (openapi .title ).lower ()} -client"
@@ -191,37 +198,37 @@ def _build_api(self) -> None:
191
198
module_path .write_text (endpoint_template .render (endpoint = endpoint ))
192
199
193
200
194
- def _get_project_for_url_or_path (url : Optional [str ], path : Optional [Path ]) -> Union [Project , GeneratorError ]:
201
+ def _get_project_for_url_or_path (url : Optional [str ], path : Optional [Path ], custom_template_path : Optional [ str ] = None ) -> Union [Project , GeneratorError ]:
195
202
data_dict = _get_document (url = url , path = path )
196
203
if isinstance (data_dict , GeneratorError ):
197
204
return data_dict
198
205
openapi = GeneratorData .from_dict (data_dict )
199
206
if isinstance (openapi , GeneratorError ):
200
207
return openapi
201
- return Project (openapi = openapi )
208
+ return Project (openapi = openapi , custom_template_path = custom_template_path )
202
209
203
210
204
- def create_new_client (* , url : Optional [str ], path : Optional [Path ]) -> Sequence [GeneratorError ]:
211
+ def create_new_client (* , url : Optional [str ], path : Optional [Path ], custom_template_path : Optional [ str ] = None ) -> Sequence [GeneratorError ]:
205
212
"""
206
213
Generate the client library
207
214
208
215
Returns:
209
216
A list containing any errors encountered when generating.
210
217
"""
211
- project = _get_project_for_url_or_path (url = url , path = path )
218
+ project = _get_project_for_url_or_path (url = url , path = path , custom_template_path = custom_template_path )
212
219
if isinstance (project , GeneratorError ):
213
220
return [project ]
214
221
return project .build ()
215
222
216
223
217
- def update_existing_client (* , url : Optional [str ], path : Optional [Path ]) -> Sequence [GeneratorError ]:
224
+ def update_existing_client (* , url : Optional [str ], path : Optional [Path ], custom_template_path : Optional [ str ] = None ) -> Sequence [GeneratorError ]:
218
225
"""
219
226
Update an existing client library
220
227
221
228
Returns:
222
229
A list containing any errors encountered when generating.
223
230
"""
224
- project = _get_project_for_url_or_path (url = url , path = path )
231
+ project = _get_project_for_url_or_path (url = url , path = path , custom_template_path = custom_template_path )
225
232
if isinstance (project , GeneratorError ):
226
233
return [project ]
227
234
return project .update ()
0 commit comments