|
1 |
| -__all__ = ["Class", "Schemas", "parse_reference_path", "update_schemas_with_data"] |
| 1 | +__all__ = ["Class", "Schemas", "parse_reference_path", "update_schemas_with"] |
2 | 2 |
|
3 | 3 | from typing import TYPE_CHECKING, Dict, List, NewType, Union, cast
|
4 | 4 | from urllib.parse import urlparse
|
@@ -61,7 +61,30 @@ class Schemas:
|
61 | 61 | errors: List[ParseError] = attr.ib(factory=list)
|
62 | 62 |
|
63 | 63 |
|
64 |
| -def update_schemas_with_data( |
| 64 | +def update_schemas_with( |
| 65 | + *, ref_path: _ReferencePath, data: Union[oai.Reference, oai.Schema], schemas: Schemas, config: Config |
| 66 | +) -> Union[Schemas, PropertyError]: |
| 67 | + if isinstance(data, oai.Reference): |
| 68 | + return _update_schemas_with_reference(ref_path=ref_path, data=data, schemas=schemas, config=config) |
| 69 | + else: |
| 70 | + return _update_schemas_with_data(ref_path=ref_path, data=data, schemas=schemas, config=config) |
| 71 | + |
| 72 | + |
| 73 | +def _update_schemas_with_reference( |
| 74 | + *, ref_path: _ReferencePath, data: oai.Reference, schemas: Schemas, config: Config |
| 75 | +) -> Union[Schemas, PropertyError]: |
| 76 | + reference_pointer = parse_reference_path(data.ref) |
| 77 | + if isinstance(reference_pointer, ParseError): |
| 78 | + return PropertyError(detail=reference_pointer.detail, data=data) |
| 79 | + |
| 80 | + resolved_reference = schemas.classes_by_reference.get(reference_pointer) |
| 81 | + if resolved_reference: |
| 82 | + return attr.evolve(schemas, classes_by_reference={ref_path: resolved_reference, **schemas.classes_by_reference}) |
| 83 | + else: |
| 84 | + return PropertyError(f"Reference {ref_path} could not be resolved", data=data) |
| 85 | + |
| 86 | + |
| 87 | +def _update_schemas_with_data( |
65 | 88 | *, ref_path: _ReferencePath, data: oai.Schema, schemas: Schemas, config: Config
|
66 | 89 | ) -> Union[Schemas, PropertyError]:
|
67 | 90 | from . import property_from_data
|
|
0 commit comments