File: requests.py

package info (click to toggle)
python-jsonschema-path 0.3.4-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 320 kB
  • sloc: python: 950; makefile: 3
file content (35 lines) | stat: -rw-r--r-- 1,054 bytes parent folder | download
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)