11"""WITS Data: indicators and tariffs"""
22
33import logging
4+ import warnings
5+
46import requests
57import pandas as pd
68import world_trade_data .defaults
@@ -33,7 +35,7 @@ def get_tariff_reported(reporter,
3335 year = world_trade_data .defaults .DEFAULT_YEAR ,
3436 name_or_id = 'name' ):
3537 """Tariffs (reported)"""
36- return _get_data (reporter , partner , product , year ,
38+ return _get_data (reporter , partner , product , year , is_tariff = True ,
3739 datatype = 'reported' , datasource = 'trn' , name_or_id = name_or_id )
3840
3941
@@ -43,7 +45,7 @@ def get_tariff_estimated(reporter,
4345 year = world_trade_data .defaults .DEFAULT_YEAR ,
4446 name_or_id = 'name' ):
4547 """Tariffs (estimated)"""
46- return _get_data (reporter , partner , product , year ,
48+ return _get_data (reporter , partner , product , year , is_tariff = True ,
4749 datatype = 'aveestimated' , datasource = 'trn' , name_or_id = name_or_id )
4850
4951
@@ -59,7 +61,7 @@ def get_indicator(indicator,
5961 indicator = indicator , datasource = datasource , name_or_id = name_or_id )
6062
6163
62- def _get_data (reporter , partner , product , year , datasource , name_or_id , ** kwargs ):
64+ def _get_data (reporter , partner , product , year , datasource , name_or_id , is_tariff = False , ** kwargs ):
6365 args = {'reporter' : reporter ,
6466 'partner' : partner ,
6567 'product' : product ,
@@ -83,16 +85,22 @@ def _get_data(reporter, partner, product, year, datasource, name_or_id, **kwargs
8385 .format ('/' .join (list_args )))
8486 response .raise_for_status ()
8587 data = response .json ()
86- return _wits_data_to_df (data , name_or_id = name_or_id )
88+ df = _wits_data_to_df (data , name_or_id = name_or_id , is_tariff = is_tariff )
89+ if is_tariff and not len (df ):
90+ warnings .warn ("""Did you know? The reporter-partner combination only yields results
91+ if the two countries have a preferential trade agreement (PTA).
92+ Otherwise, all other tariffs to all non-PTA countries
93+ are found if one enters "000" in partner.""" )
94+ return df
8795
8896
89- def _wits_data_to_df (data , value_name = 'Value' , name_or_id = 'id' ):
97+ def _wits_data_to_df (data , value_name = 'Value' , is_tariff = False , name_or_id = 'id' ):
9098 observation = data ['structure' ]['attributes' ]['observation' ]
9199 levels = data ['structure' ]['dimensions' ]['series' ]
92100 obs_levels = data ['structure' ]['dimensions' ]['observation' ]
93101 series = data ['dataSets' ][0 ]['series' ]
94102
95- index_names = [l ['name' ] for l in levels ] + [l ['name' ] for l in obs_levels ]
103+ index_names = [level ['name' ] for level in levels ] + [obs_level ['name' ] for obs_level in obs_levels ]
96104 column_names = [value_name ] + [o ['name' ] for o in observation ]
97105
98106 all_observations = {value_name : []}
@@ -106,7 +114,7 @@ def _wits_data_to_df(data, value_name='Value', name_or_id='id'):
106114
107115 # When loading tariffs, product is at depth 3, but levels say it's at depth 4
108116 # - So we invert the two levels
109- if value_name == 'Rate' :
117+ if is_tariff :
110118 loc [2 ], loc [3 ] = loc [3 ], loc [2 ]
111119
112120 observations = series [i ]['observations' ]
0 commit comments