43 lines
1.1 KiB
Python
43 lines
1.1 KiB
Python
"""JSONSchema spec readers module."""
|
|
|
|
from pathlib import Path
|
|
from typing import Any
|
|
from typing import Hashable
|
|
from typing import Mapping
|
|
from typing import Tuple
|
|
|
|
from jsonschema_path.handlers import all_urls_handler
|
|
from jsonschema_path.handlers import file_handler
|
|
from jsonschema_path.handlers.protocols import SupportsRead
|
|
|
|
|
|
class BaseReader:
|
|
def read(self) -> Tuple[Mapping[Hashable, Any], str]:
|
|
raise NotImplementedError
|
|
|
|
|
|
class FileReader(BaseReader):
|
|
def __init__(self, fileobj: SupportsRead):
|
|
self.fileobj = fileobj
|
|
|
|
def read(self) -> Tuple[Mapping[Hashable, Any], str]:
|
|
return file_handler(self.fileobj), ""
|
|
|
|
|
|
class PathReader(BaseReader):
|
|
def __init__(self, path: Path):
|
|
self.path = path
|
|
|
|
def read(self) -> Tuple[Mapping[Hashable, Any], str]:
|
|
if not self.path.is_file():
|
|
raise OSError(f"No such file: {self.path}")
|
|
|
|
uri = self.path.as_uri()
|
|
return all_urls_handler(uri), uri
|
|
|
|
|
|
class FilePathReader(PathReader):
|
|
def __init__(self, file_path: str):
|
|
path = Path(file_path).absolute()
|
|
super().__init__(path)
|