1
1
from __future__ import annotations
2
2
3
3
import io
4
+ import json
5
+ import sys
4
6
import typing as t
5
7
6
8
import ruamel .yaml
7
9
8
10
from ..cachedownloader import CacheDownloader
9
- from ..parsers import ParserSet
11
+ from ..parsers import ParseError , ParserSet
10
12
from ..utils import filename2path
11
13
from .errors import SchemaParseError
12
14
@@ -30,7 +32,7 @@ def __init__(self, filename: str) -> None:
30
32
self .filename = str (self .path )
31
33
self .parsers = ParserSet ()
32
34
33
- def get_retrieval_uri (self ) -> str :
35
+ def get_retrieval_uri (self ) -> str | None :
34
36
return self .path .as_uri ()
35
37
36
38
def _read_impl (self ) -> t .Any :
@@ -40,6 +42,20 @@ def read_schema(self) -> dict:
40
42
return _run_load_callback (self .filename , self ._read_impl )
41
43
42
44
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
+
43
59
class HttpSchemaReader :
44
60
def __init__ (
45
61
self ,
@@ -64,7 +80,7 @@ def _parse(self, schema_bytes: bytes) -> t.Any:
64
80
)
65
81
return self ._parsed_schema
66
82
67
- def get_retrieval_uri (self ) -> str :
83
+ def get_retrieval_uri (self ) -> str | None :
68
84
return self .url
69
85
70
86
def _read_impl (self ) -> t .Any :
0 commit comments