1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
"""JSONSchema spec handlers requests module."""
from contextlib import closing
from io import StringIO
from typing import ContextManager
from typing import Optional
from typing import Union
import requests
from jsonschema_path.handlers.file import BaseFilePathHandler
from jsonschema_path.handlers.file import FileHandler
from jsonschema_path.handlers.protocols import SupportsRead
class UrlRequestsHandler(BaseFilePathHandler):
"""URL (requests) scheme handler."""
def __init__(
self,
*allowed_schemes: str,
file_handler: Optional[FileHandler] = None,
timeout: int = 10,
verify: Optional[Union[bool, str]] = True,
):
super().__init__(*allowed_schemes, file_handler=file_handler)
self.timeout = timeout
self.verify = verify
def _open(self, uri: str) -> ContextManager[SupportsRead]:
response = requests.get(uri, timeout=self.timeout, verify=self.verify)
response.raise_for_status()
data = StringIO(response.text)
return closing(data)
|