11from __future__ import annotations
22
33import io
4+ import json
5+ import sys
46import typing as t
57
68import ruamel .yaml
79
810from ..cachedownloader import CacheDownloader
9- from ..parsers import ParserSet
11+ from ..parsers import ParseError , ParserSet
1012from ..utils import filename2path
1113from .errors import SchemaParseError
1214
@@ -30,7 +32,7 @@ def __init__(self, filename: str) -> None:
3032 self .filename = str (self .path )
3133 self .parsers = ParserSet ()
3234
33- def get_retrieval_uri (self ) -> str :
35+ def get_retrieval_uri (self ) -> str | None :
3436 return self .path .as_uri ()
3537
3638 def _read_impl (self ) -> t .Any :
@@ -40,6 +42,20 @@ def read_schema(self) -> dict:
4042 return _run_load_callback (self .filename , self ._read_impl )
4143
4244
45+ class StdinSchemaReader :
46+ def __init__ (self ) -> None :
47+ self .parsers = ParserSet ()
48+
49+ def get_retrieval_uri (self ) -> str | None :
50+ return None
51+
52+ def read_schema (self ) -> dict :
53+ try :
54+ return json .load (sys .stdin )
55+ except ValueError as e :
56+ raise ParseError ("Failed to parse JSON from stdin" ) from e
57+
58+
4359class HttpSchemaReader :
4460 def __init__ (
4561 self ,
@@ -64,7 +80,7 @@ def _parse(self, schema_bytes: bytes) -> t.Any:
6480 )
6581 return self ._parsed_schema
6682
67- def get_retrieval_uri (self ) -> str :
83+ def get_retrieval_uri (self ) -> str | None :
6884 return self .url
6985
7086 def _read_impl (self ) -> t .Any :
0 commit comments