Skip to content

Commit 1c99d35

Browse files
committed
refactor: error handling for older pandas versions / minor improvements
bump version up to 0.2.5
1 parent 9ddc805 commit 1c99d35

File tree

2 files changed

+31
-27
lines changed

2 files changed

+31
-27
lines changed

myeia/api.py

Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,14 @@
66
import pandas as pd
77
import requests
88
from dotenv import load_dotenv
9-
from pandas.errors import SettingWithCopyWarning
9+
10+
try:
11+
from pandas.errors import SettingWithCopyWarning
12+
except ImportError as e:
13+
raise ImportError("Please upgrade your version of pandas to 1.5.3 or higher.") from e
1014

1115
warnings.simplefilter(action="ignore", category=SettingWithCopyWarning)
16+
1217
load_dotenv()
1318

1419

@@ -32,30 +37,23 @@ def get_series(
3237
Args:
3338
series_id (str): The series ID. For example, "NG.RNGC1.W".
3439
new_name (str): A name you want to give the value column.
40+
3541
Returns:
3642
pd.DataFrame: A DataFrame with the date and value columns.
3743
"""
3844
headers = {"Accept": "*/*"}
3945
url = f"{self.url}seriesid/{series_id}?api_key={self.token}"
40-
response = requests.get(url, headers=headers)
41-
response.raise_for_status()
42-
json_response = response.json()
46+
base_df = self.get_json_response(url, headers)
4347

44-
base_df = pd.DataFrame(json_response["response"]["data"])
45-
46-
if "series-description" in base_df.columns:
47-
series_description = base_df["series-description"][0]
48+
if not new_name:
49+
series_description = base_df["series-description"][0] if "series-description" in base_df.columns else series_id
4850
else:
49-
series_description = series_id
50-
51-
if new_name != "":
5251
series_description = new_name
5352

5453
df = base_df[["period", "value"]]
54+
5555
df.rename(columns={df.columns[0]: "Date", df.columns[1]: series_description}, inplace=True)
56-
df["Date"] = pd.to_datetime(df["Date"])
57-
df.set_index("Date", inplace=True)
58-
return df
56+
return self.format_time_series_data(df)
5957

6058
def get_series_via_route(
6159
self,
@@ -74,6 +72,7 @@ def get_series_via_route(
7472
frequency (str): The frequency of the series. For example, "daily".
7573
facet (str): The facet of the series. For example, "series", "seriesId".
7674
new_name (str): A name you want to give the value column.
75+
7776
Returns:
7877
pd.DataFrame: A DataFrame with the date and value columns.
7978
"""
@@ -84,30 +83,35 @@ def get_series_via_route(
8483
sort = "&sort[0][column]=period&sort[0][direction]=desc"
8584
url = f"{self.url}{api_route}{series}{sort}"
8685

87-
response = requests.get(url, headers=headers)
88-
response.raise_for_status()
89-
json_response = response.json()
90-
91-
base_df = pd.DataFrame(json_response["response"]["data"])
86+
base_df = self.get_json_response(url, headers)
9287

9388
if facet == "series":
9489
df = base_df[["period", "value", "series-description", "series"]]
95-
9690
elif facet == "seriesId":
9791
df = base_df[["period", "value", "seriesDescription", "seriesId"]]
9892

9993
df.reset_index(drop=True, inplace=True)
10094

101-
name = df[df.columns[2]][0]
102-
103-
if new_name != "":
104-
name = new_name
105-
95+
name = new_name if new_name != "" else df[df.columns[2]][0]
10696
df.rename(columns={df.columns[1]: name}, inplace=True)
107-
10897
df = df.iloc[:, :2]
10998

11099
df.rename(columns={df.columns[0]: "Date"}, inplace=True)
100+
return self.format_time_series_data(df)
101+
102+
def format_time_series_data(self, df):
103+
"""
104+
Helper function to format time series data.
105+
"""
111106
df["Date"] = pd.to_datetime(df["Date"])
112107
df.set_index("Date", inplace=True)
113108
return df
109+
110+
def get_json_response(self, url: str, headers: dict):
111+
"""
112+
Helper function to get JSON response from API.
113+
"""
114+
response = requests.get(url, headers=headers)
115+
response.raise_for_status()
116+
json_response = response.json()
117+
return pd.DataFrame(json_response["response"]["data"])

myeia/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = "0.2.4"
1+
__version__ = "0.2.5"

0 commit comments

Comments
 (0)