@@ -306,7 +306,7 @@ def __do_series_search(self, url):
306306 data = None
307307 return data , num_results_total
308308
309- def __get_search_results (self , url , limit , order_by , sort_order ):
309+ def __get_search_results (self , url , limit , order_by , sort_order , filter ):
310310 """
311311 helper function for getting search results up to specified limit on the number of results. The Fred HTTP API
312312 truncates to 1000 results per request, so this may issue multiple HTTP requests to obtain more available data.
@@ -321,6 +321,12 @@ def __get_search_results(self, url, limit, order_by, sort_order):
321321 else :
322322 raise ValueError ('%s is not in the valid list of order_by options: %s' % (order_by , str (order_by_options )))
323323
324+ if filter is not None :
325+ if len (filter ) == 2 :
326+ url = url + '&filter_variable=%s&filter_value=%s' % (filter [0 ], filter [1 ])
327+ else :
328+ raise ValueError ('Filter should be a 2 item tuple like (filter_variable, filter_value)' )
329+
324330 sort_order_options = ['asc' , 'desc' ]
325331 if sort_order is not None :
326332 if sort_order in sort_order_options :
@@ -344,7 +350,7 @@ def __get_search_results(self, url, limit, order_by, sort_order):
344350 data = data .append (next_data )
345351 return data .head (max_results_needed )
346352
347- def search (self , text , limit = 1000 , order_by = None , sort_order = None ):
353+ def search (self , text , limit = 1000 , order_by = None , sort_order = None , filter = None ):
348354 """
349355 Do a fulltext search for series in the Fred dataset. Returns information about matching series in a DataFrame.
350356
@@ -360,6 +366,9 @@ def search(self, text, limit=1000, order_by=None, sort_order=None):
360366 'popularity'
361367 sort_order : str, optional
362368 sort the results by ascending or descending order. Valid options are 'asc' or 'desc'
369+ filter : tuple, optional
370+ filters the results. Expects a tuple like (filter_variable, filter_value).
371+ Valid filter_variable values are 'frequency', 'units', and 'seasonal_adjustment'
363372
364373 Returns
365374 -------
@@ -368,10 +377,10 @@ def search(self, text, limit=1000, order_by=None, sort_order=None):
368377 """
369378 url = "%s/series/search?search_text=%s&" % (self .root_url ,
370379 quote_plus (text ))
371- info = self .__get_search_results (url , limit , order_by , sort_order )
380+ info = self .__get_search_results (url , limit , order_by , sort_order , filter )
372381 return info
373382
374- def search_by_release (self , release_id , limit = 0 , order_by = None , sort_order = None ):
383+ def search_by_release (self , release_id , limit = 0 , order_by = None , sort_order = None , filter = None ):
375384 """
376385 Search for series that belongs to a release id. Returns information about matching series in a DataFrame.
377386
@@ -387,19 +396,22 @@ def search_by_release(self, release_id, limit=0, order_by=None, sort_order=None)
387396 'popularity'
388397 sort_order : str, optional
389398 sort the results by ascending or descending order. Valid options are 'asc' or 'desc'
399+ filter : tuple, optional
400+ filters the results. Expects a tuple like (filter_variable, filter_value).
401+ Valid filter_variable values are 'frequency', 'units', and 'seasonal_adjustment'
390402
391403 Returns
392404 -------
393405 info : DataFrame
394406 a DataFrame containing information about the matching Fred series
395407 """
396408 url = "%s/release/series?release_id=%d" % (self .root_url , release_id )
397- info = self .__get_search_results (url , limit , order_by , sort_order )
409+ info = self .__get_search_results (url , limit , order_by , sort_order , filter )
398410 if info is None :
399411 raise ValueError ('No series exists for release id: ' + str (release_id ))
400412 return info
401413
402- def search_by_category (self , category_id , limit = 0 , order_by = None , sort_order = None ):
414+ def search_by_category (self , category_id , limit = 0 , order_by = None , sort_order = None , filter = None ):
403415 """
404416 Search for series that belongs to a category id. Returns information about matching series in a DataFrame.
405417
@@ -415,6 +427,9 @@ def search_by_category(self, category_id, limit=0, order_by=None, sort_order=Non
415427 'popularity'
416428 sort_order : str, optional
417429 sort the results by ascending or descending order. Valid options are 'asc' or 'desc'
430+ filter : tuple, optional
431+ filters the results. Expects a tuple like (filter_variable, filter_value).
432+ Valid filter_variable values are 'frequency', 'units', and 'seasonal_adjustment'
418433
419434 Returns
420435 -------
@@ -423,7 +438,7 @@ def search_by_category(self, category_id, limit=0, order_by=None, sort_order=Non
423438 """
424439 url = "%s/category/series?category_id=%d&" % (self .root_url ,
425440 category_id )
426- info = self .__get_search_results (url , limit , order_by , sort_order )
441+ info = self .__get_search_results (url , limit , order_by , sort_order , filter )
427442 if info is None :
428443 raise ValueError ('No series exists for category id: ' + str (category_id ))
429444 return info
0 commit comments