1212from ..parsers import ParserSet
1313from ..utils import is_url_ish
1414from .errors import UnsupportedUrlScheme
15- from .readers import HttpSchemaReader , LocalSchemaReader
15+ from .readers import HttpSchemaReader , LocalSchemaReader , StdinSchemaReader
1616from .resolver import make_reference_registry
1717
1818
@@ -47,7 +47,7 @@ def set_defaults_then_validate(
4747class SchemaLoaderBase :
4848 def get_validator (
4949 self ,
50- path : pathlib .Path ,
50+ path : pathlib .Path | str ,
5151 instance_doc : dict [str , t .Any ],
5252 format_opts : FormatOptions ,
5353 fill_defaults : bool ,
@@ -82,15 +82,22 @@ def __init__(
8282 self ._parsers = ParserSet ()
8383
8484 # setup a schema reader lazily, when needed
85- self ._reader : LocalSchemaReader | HttpSchemaReader | None = None
85+ self ._reader : LocalSchemaReader | HttpSchemaReader | StdinSchemaReader | None = (
86+ None
87+ )
8688
8789 @property
88- def reader (self ) -> LocalSchemaReader | HttpSchemaReader :
90+ def reader (self ) -> LocalSchemaReader | HttpSchemaReader | StdinSchemaReader :
8991 if self ._reader is None :
9092 self ._reader = self ._get_schema_reader ()
9193 return self ._reader
9294
93- def _get_schema_reader (self ) -> LocalSchemaReader | HttpSchemaReader :
95+ def _get_schema_reader (
96+ self ,
97+ ) -> LocalSchemaReader | HttpSchemaReader | StdinSchemaReader :
98+ if self .schemafile == "-" :
99+ return StdinSchemaReader ()
100+
94101 if self .url_info is None or self .url_info .scheme in ("file" , "" ):
95102 return LocalSchemaReader (self .schemafile )
96103
@@ -117,7 +124,7 @@ def get_schema(self) -> dict[str, t.Any]:
117124
118125 def get_validator (
119126 self ,
120- path : pathlib .Path ,
127+ path : pathlib .Path | str ,
121128 instance_doc : dict [str , t .Any ],
122129 format_opts : FormatOptions ,
123130 fill_defaults : bool ,
@@ -189,7 +196,7 @@ def __init__(self, base_uri: str | None = None) -> None:
189196
190197 def get_validator (
191198 self ,
192- path : pathlib .Path ,
199+ path : pathlib .Path | str ,
193200 instance_doc : dict [str , t .Any ],
194201 format_opts : FormatOptions ,
195202 fill_defaults : bool ,
0 commit comments