from .drug import Drug
from .shelf import Shelf
from .api import Drug_Label_Client
[docs]
def make_drugs(api_key, field_list: list, criteria_list: list, exact: bool=False, limit: int=1):
"""
OVERVIEW:
Function designed to streamline new drug construction. Takes in user's API key, list
of desired search fields, list of specific criteria for each field, whether exact match
is to be used, and limit of search results
PARAMETERS:
field_list (list): list of strings containing appropriate fields for drug search of openFDA
criteria_list (list): list of strings containing specific search terms for inputted fields
exact (bool): checking if exact match should be used or not
limit (int): number of drugs that should be enabled in a drug search
RETURN VALUE:
drugs (list): list of drug(s) that were generated by this function
USAGE EXAMPLE:
>>> make_drugs(api_key, ["brand_name"],["Advil"],exact=True, limit=3)
>>> # above code builds list of 3 drugs named exactly "Advil"
"""
# Checking types of all of the input parameters to ensure no issues
if not isinstance(field_list, list):
raise TypeError("field_list must be a list")
if not isinstance(criteria_list, list):
raise TypeError("criteria_list must be a list")
if len(field_list) != len(criteria_list):
raise ValueError("criteria_list and field_list must be the same length")
if not isinstance(exact, bool):
raise TypeError("exact must be a boolean")
if not isinstance(limit, int):
raise TypeError("limit must be an integer")
# building client using api functions
client = Drug_Label_Client(api_key)
search_items = []
# Build search items using our api call
for i in range(len(field_list)):
search_items.append(client.generic_search(field_list[i], criteria_list[i], exact=exact))
result = client.search_request(search_items, limit=limit) # Use the limit parameter
# finalize drug objects and adding to our return list
drugs = []
if "results" in result and result["results"]:
for drug_data in result["results"]:
drugs.append(Drug(result["meta"], drug_data))
return drugs