"""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)