|
2 | 2 | import warnings
|
3 | 3 | from dataclasses import dataclass, field
|
4 | 4 | from datetime import datetime, timedelta
|
| 5 | +import logging |
5 | 6 | from typing import List, Optional, Tuple, Union
|
6 | 7 |
|
7 | 8 | import pandas as pd
|
8 | 9 | import requests
|
9 | 10 | from dotenv import load_dotenv
|
| 11 | +from requests.exceptions import JSONDecodeError |
10 | 12 |
|
11 | 13 | try:
|
12 | 14 | from pandas.errors import SettingWithCopyWarning
|
|
17 | 19 |
|
18 | 20 | load_dotenv()
|
19 | 21 |
|
| 22 | +logging.basicConfig( |
| 23 | + level=logging.INFO, format="%(asctime)s - %(message)s", datefmt="%d-%b-%y %H:%M:%S" |
| 24 | +) |
| 25 | + |
| 26 | + |
20 | 27 |
|
21 | 28 | def get_json_response(url: str, headers: dict) -> pd.DataFrame:
|
22 | 29 | """
|
23 | 30 | Helper function to get JSON response from API.
|
24 | 31 | """
|
25 | 32 | response = requests.get(url, headers=headers)
|
26 | 33 | response.raise_for_status()
|
27 |
| - json_response = response.json() |
| 34 | + try: |
| 35 | + json_response = response.json() |
| 36 | + except JSONDecodeError as e: |
| 37 | + logging.error(f"Response: {response.text}") |
| 38 | + raise ValueError(f"Error decoding JSON response ({e}). Data might be incomplete or missing. Chunking your request might help.") from e |
28 | 39 | return pd.DataFrame(json_response["response"]["data"])
|
29 | 40 |
|
30 | 41 |
|
@@ -154,8 +165,8 @@ def get_series_via_route(
|
154 | 165 |
|
155 | 166 | if facet == "series":
|
156 | 167 | df = base_df[["period", "value", "series-description", "series"]]
|
157 |
| - elif facet == "seriesId": |
158 |
| - df = base_df[["period", "value", "seriesDescription", "seriesId"]] |
| 168 | + else: |
| 169 | + df = base_df[["period", "value", "seriesDescription", facet]] |
159 | 170 |
|
160 | 171 | df.reset_index(drop=True, inplace=True)
|
161 | 172 | df.rename(columns={df.columns[1]: df[df.columns[2]][0]}, inplace=True)
|
|
0 commit comments