def fetchByID(id, firstName=None, lastName=None): ''' Fetches one joke with specified id Args: id (int): identifier of the joke in icndb. firstName, lastName (both str): names that are used to change the name of the main character when fetching a Joke. Returns: instance of a icndb.Joke class Raises: icndb.joke_extractor.JokeNotRetrieved: if id is bigger than result of fetchNumberOfJokes TypeError: if id is not an integer ValueError: if id is less than 0. ''' checkNumber(id) if id > fetchNumberOfJokes(): raise Builder.JokeNotRetrieved("Identifier is too big.") url = "{}/jokes/{}".format(__baseURL__, id) queryParameters = processNames(firstName, lastName) if queryParameters: url += "?{}".format(urllib.parse.urlencode(queryParameters)) return Builder.buildJokes(_requestJokes(url))
def fetchRandom(number=1, firstName=None, lastName=None, limitTo=None, exclude=None): ''' Fetches arbitrary number of random jokes. Args: number (int, default=1): number of jokes to fetch. Must be positive integer. firstName, lastName (both str): names that are used to change the name of the main character when fetching a Joke. limitTo (None or list of str): list of categories which joke should be taken from. exclude (None or list of str): list of categories which joke should NOT be taken from. Returns: Instance of icndb.Joke class. If parameter number > 1, returns list of Jokes. Raises: TypeError: if number is not an integer ValueError: if number is non-positive. ''' checkNumber(number) # raise an Exception if number is invalid url = "{}/jokes/random/{}".format(__baseURL__, number if number > 1 else '') queryParameters = limitCategories(processNames(firstName, lastName), limitTo, exclude) if queryParameters: url = "{}?{}".format(url, urllib.parse.urlencode(queryParameters)) return Builder.buildJokes(_requestJokes(url))