36 lines
1.0 KiB
Python
36 lines
1.0 KiB
Python
"""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)
|