-
Notifications
You must be signed in to change notification settings - Fork 22
Expand file tree
/
Copy pathBaseAPI.py
More file actions
58 lines (44 loc) · 1.86 KB
/
Copy pathBaseAPI.py
File metadata and controls
58 lines (44 loc) · 1.86 KB
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
from json.decoder import JSONDecodeError
import sys
from requests import get as requests_get
from requests import ConnectionError as requests_ConnectionError
from requests import Timeout as requests_Timeout
from requests.exceptions import HTTPError as requests_HTTPError
from rich.console import Console
from eodhd.rates import Rate
class BaseAPI:
def __init__(self) -> None:
self._api_url = "https://eodhd.com/api"
self.console = Console()
def _rest_get_method(self, api_key: str, endpoint: str = "", uri: str = "", querystring: str = ""):
"""Generic REST GET"""
if endpoint.strip() == "":
raise ValueError("endpoint is empty!")
try:
resp = requests_get(f"{self._api_url}/{endpoint}/{uri}?api_token={api_key}&fmt=json{querystring}")
Rate().update_from_headers(resp.headers)
if resp.status_code != 200:
try:
if "message" in resp.json():
resp_message = resp.json()["message"]
elif "errors" in resp.json():
self.console.log(resp.json())
sys.exit(1)
else:
resp_message = ""
message = f"({resp.status_code}) {self._api_url} - {resp_message}"
self.console.log(message)
except JSONDecodeError as err:
self.console.log(err)
try:
resp.raise_for_status()
return resp.json()
except ValueError as err:
self.console.log(err)
except requests_ConnectionError as err:
self.console.log(err)
except requests_HTTPError as err:
self.console.log(err)
except requests_Timeout as err:
self.console.log(err)
return {}