@@ -96,12 +96,14 @@ def _get_gsp_list(self):
9696 """Fetch the GSP list from the API and convert to Pandas DataFrame."""
9797 url = f"{ self .base_url } /gsp_list"
9898 response = self ._fetch_url (url )
99+ self ._validate_api_response (response , expected_keys = ("data" , "meta" ))
99100 return pd .DataFrame (response ["data" ], columns = response ["meta" ])
100101
101102 def _get_pes_list (self ):
102103 """Fetch the PES list from the API and convert to Pandas DataFrame."""
103104 url = f"{ self .base_url } /pes_list"
104105 response = self ._fetch_url (url )
106+ self ._validate_api_response (response , expected_keys = ("data" , "meta" ))
105107 return pd .DataFrame (response ["data" ], columns = response ["meta" ])
106108
107109 def _get_deployment_releases (self ):
@@ -230,6 +232,7 @@ def latest(self,
230232 extra_fields = extra_fields , period = period )
231233 params = self ._compile_params (extra_fields , period = period )
232234 response = self ._query_api (entity_type , entity_id , params )
235+ self ._validate_api_response (response , expected_keys = ("data" , "meta" ))
233236 if response ["data" ]:
234237 data , meta = response ["data" ], response ["meta" ]
235238 data = tuple (data [0 ])
@@ -446,12 +449,22 @@ def _between(self, start, end, entity_type="gsp", entity_id=0, extra_fields="",
446449 request_end = min (end , request_start + max_range )
447450 params = self ._compile_params (extra_fields , request_start , request_end , period )
448451 response = self ._query_api (entity_type , entity_id , params )
452+ self ._validate_api_response (response , expected_keys = ("data" , "meta" ))
449453 data += response ["data" ]
450454 request_start += max_range + timedelta (minutes = period )
451455 if dataframe :
452456 return self ._convert_tuple_to_df (data , response ["meta" ]), response ["meta" ]
453457 return data , response ["meta" ]
454458
459+ @staticmethod
460+ def _validate_api_response (response , expected_keys ):
461+ """Check that a JSON API response contains the expected keys."""
462+ if any (key not in response .keys () for key in expected_keys ):
463+ raise PVLiveException (
464+ "The API's JSON response did not contain the required fields. Expected keys: "
465+ f"{ expected_keys } , available keys: { response .keys ()} "
466+ )
467+
455468 def _compile_params (self , extra_fields = "" , start = None , end = None , period = 30 ):
456469 """Compile parameters into a Python dict, formatting where necessary."""
457470 params = {}
0 commit comments