|
17 | 17 | from .parser import GeneratorData, import_string_from_reference
|
18 | 18 | from .parser.errors import GeneratorError
|
19 | 19 | from .utils import snake_case
|
| 20 | +from .resolver.schema_resolver import SchemaResolver |
20 | 21 |
|
21 | 22 | if sys.version_info.minor < 8: # version did not exist before 3.8, need to use a backport
|
22 | 23 | from importlib_metadata import version
|
@@ -288,20 +289,19 @@ def update_existing_client(
|
288 | 289 |
|
289 | 290 |
|
290 | 291 | def _get_document(*, url: Optional[str], path: Optional[Path]) -> Union[Dict[str, Any], GeneratorError]:
|
291 |
| - yaml_bytes: bytes |
292 | 292 | if url is not None and path is not None:
|
293 | 293 | return GeneratorError(header="Provide URL or Path, not both.")
|
294 |
| - if url is not None: |
295 |
| - try: |
296 |
| - response = httpx.get(url) |
297 |
| - yaml_bytes = response.content |
298 |
| - except (httpx.HTTPError, httpcore.NetworkError): |
299 |
| - return GeneratorError(header="Could not get OpenAPI document from provided URL") |
300 |
| - elif path is not None: |
301 |
| - yaml_bytes = path.read_bytes() |
302 |
| - else: |
| 294 | + |
| 295 | + if url is None and path is None: |
303 | 296 | return GeneratorError(header="No URL or Path provided")
|
| 297 | + |
| 298 | + source: Union[str, Path] = url if url is not None else path |
304 | 299 | try:
|
305 |
| - return yaml.safe_load(yaml_bytes) |
306 |
| - except yaml.YAMLError: |
| 300 | + resolver = SchemaResolver(source) |
| 301 | + result = resolver.resolve() |
| 302 | + if len(result.errors) > 0: |
| 303 | + return GeneratorError(header=errors.join('; ')) |
| 304 | + except Exception as e: |
307 | 305 | return GeneratorError(header="Invalid YAML from provided source")
|
| 306 | + |
| 307 | + return result.schema |
0 commit comments