def get_data(data_get, data_key, output_map, retries_left, argdict):
        """
        Function to use Python Pandas and / or Quandl to download a dataframe
        Insert resulting dataframe into output map
        """
        if retries_left <= 0:
            print(data_key + " Failed to download.")
            return

        """
        Identify type of function to use, insert result into output map
        """
        if "Quandl" in data_get.__module__:
            output_map[data_key] = data_get(data_key, authtoken=argdict["quandl_token"])
            return

        if "pandas.io.data" in data_get.__module__:
            # Verify we are not dealing with options
            if 'get_call_data' not in dir(data_get):
                if ("source" and "begin" and "end") in argdict:
                    try:
                        output_map[data_key] = data_get(data_key, argdict["data_source"], argdict["begin"], argdict["end"])
                        return
                    except:
                        print(data_key + " failed to download. Retrying up to " + retries_left.__str__() + " more times...")
                else:
                    try:
                        output_map[data_key] = data_get(data_key, argdict["data_source"])
                        return
                    except:
                        print(data_key + " failed to download. Retrying up to " + retries_left.__str__() + " more times...")
            # Verify we are dealing with options
            if 'get_call_data' in dir(data_get):
                try:
                    # Note options data will always be pulled from yahoo
                    temp = data_get(data_key, 'yahoo')
                    # For simplicities sake assume user wants all options data
                    output_map[data_key] = temp.get_all_data()
                    return
                except:
                    print(data_key + " options failed to download. Retrying up to " + retries_left.__str__() + " more times...")
                    print("WARNING: If your version of Pandas is not up to date this may fail!")

        """
        Retry at random times progressively slower in case of failures when number of retries remaining gets low
        """
        if (retries_left == 3):
            time.sleep(randrange(0, 4))
        if (retries_left == 2):
            time.sleep(randrange(2, 6))
        if (retries_left == 1):
            time.sleep(randrange(5, 15))
        get_data(data_get, data_key, output_map, (retries_left-1), argdict)