def test_get_institution_url(self, m): correct_url = "https://my.canvas.edu" # strip trailing slash self.assertEqual(get_institution_url("https://my.canvas.edu/"), correct_url) # strip trailing slash but keep path self.assertEqual( get_institution_url("https://my.canvas.edu/test/2/"), correct_url + "/test/2", ) # strip whitespace self.assertEqual(get_institution_url(" https://my.canvas.edu "), correct_url) # strip whitespace and trailing slash self.assertEqual(get_institution_url(" https://my.canvas.edu/ "), correct_url)
def __init__(self, base_url, access_token): """ :param base_url: The base URL of the Canvas instance's API. :type base_url: str :param access_token: The API key to authenticate requests with. :type access_token: str """ new_url = get_institution_url(base_url) if 'api/v1' in base_url: warnings.warn( "`base_url` no longer requires an API version be specified. " "Rewriting `base_url` to {}".format(new_url), DeprecationWarning) if 'http://' in base_url: warnings.warn( "Canvas may respond unexpectedly when making requests to HTTP " "URLs. If possible, please use HTTPS.", UserWarning) if not base_url.strip(): warnings.warn( "Canvas needs a valid URL, please provide a non-blank `base_url`.", UserWarning) if '://' not in base_url: warnings.warn( "An invalid `base_url` for the Canvas API Instance was used. " "Please provide a valid HTTP or HTTPS URL if possible.", UserWarning) base_url = new_url + '/api/v1/' self.__requester = Requester(base_url, access_token)
def get_course_stream(course_id: int, base_url, access_token, **kwargs): """ Parameters ---------- course_id : `int` Course id base_url : `str` Base URL of the Canvas instance's API access_token : `str` API key to authenticate requests with Returns ------- `dict` JSON response for course activity stream """ access_token = access_token.strip() base_url = get_institution_url(base_url) requester = Requester(base_url, access_token) response = requester.request( "GET", "courses/{}/activity_stream".format(course_id), _kwargs=combine_kwargs(**kwargs) ) return response.json()
def __init__(self, base_url, access_token): """ :param base_url: The base URL of the Canvas instance's API. :type base_url: str :param access_token: The API key to authenticate requests with. :type access_token: str """ new_url = get_institution_url(base_url) if 'api/v1' in base_url: warnings.warn( "`base_url` no longer requires an API version be specified. " "Rewriting `base_url` to {}".format(new_url), DeprecationWarning) base_url = new_url + '/api/v1/' self.__requester = Requester(base_url, access_token)
def register_uris(requirements, requests_mocker): """ Given a list of required fixtures and an requests_mocker object, register each fixture as a uri with the mocker. :param base_url: str :param requirements: dict :param requests_mocker: requests_mock.mocker.Mocker """ for fixture, objects in requirements.items(): try: with open("tests/fixtures/{}.json".format(fixture)) as file: data = json.loads(file.read()) except IOError: raise ValueError( "Fixture {}.json contains invalid JSON.".format(fixture)) if not isinstance(objects, list): raise TypeError("{} is not a list.".format(objects)) for obj_name in objects: obj = data.get(obj_name) if obj is None: raise ValueError("{} does not exist in {}.json".format( obj_name.__repr__(), fixture)) method = requests_mock.ANY if obj["method"] == "ANY" else obj[ "method"] if obj["endpoint"] == "ANY": url = requests_mock.ANY else: url = (get_institution_url(settings.BASE_URL) + "/api/v1/" + obj["endpoint"]) try: requests_mocker.register_uri( method, url, json=obj.get("data"), status_code=obj.get("status_code", 200), headers=obj.get("headers", {}), ) except Exception as e: print(e)
def get_course_url(course_id: str, base_url) -> str: """ Parameters ---------- course_id : `str` Course id base_url : `str` Base URL of the Canvas instance's API Returns ------- `str` URL of course page """ base_url = get_institution_url(base_url) return "{}/courses/{}".format(base_url, course_id)
def __init__(self, base_url, access_token): """ :param base_url: The base URL of the Canvas instance's API. :type base_url: str :param access_token: The API key to authenticate requests with. :type access_token: str """ new_url = get_institution_url(base_url) if "api/v1" in base_url: warnings.warn( "`base_url` no longer requires an API version be specified. " "Rewriting `base_url` to {}".format(new_url), DeprecationWarning, ) if "http://" in base_url: warnings.warn( "Canvas may respond unexpectedly when making requests to HTTP " "URLs. If possible, please use HTTPS.", UserWarning, ) if not base_url.strip(): warnings.warn( "Canvas needs a valid URL, please provide a non-blank `base_url`.", UserWarning, ) if "://" not in base_url: warnings.warn( "An invalid `base_url` for the Canvas API Instance was used. " "Please provide a valid HTTP or HTTPS URL if possible.", UserWarning, ) # Ensure that the user-supplied access token contains no leading or # trailing spaces that may cause issues when communicating with # the API. access_token = access_token.strip() base_url = new_url + "/api/v1/" self.__requester = Requester(base_url, access_token)
def register_uris(requirements, requests_mocker): """ Given a list of required fixtures and an requests_mocker object, register each fixture as a uri with the mocker. :param base_url: str :param requirements: dict :param requests_mocker: requests_mock.mocker.Mocker """ for fixture, objects in requirements.items(): try: with open('tests/fixtures/{}.json'.format(fixture)) as file: data = json.loads(file.read()) except IOError: raise ValueError( 'Fixture {}.json contains invalid JSON.'.format(fixture)) if not isinstance(objects, list): raise TypeError('{} is not a list.'.format(objects)) for obj_name in objects: obj = data.get(obj_name) if obj is None: raise ValueError('{} does not exist in {}.json'.format( obj_name.__repr__(), fixture)) method = requests_mock.ANY if obj['method'] == 'ANY' else obj[ 'method'] if obj['endpoint'] == 'ANY': url = requests_mock.ANY else: url = get_institution_url( settings.BASE_URL) + '/api/v1/' + obj['endpoint'] try: requests_mocker.register_uri(method, url, json=obj.get('data'), status_code=obj.get( 'status_code', 200), headers=obj.get('headers', {})) except Exception as e: print(e)
def test_get_institution_url(self, m): correct_url = 'https://my.canvas.edu' self.assertEqual(get_institution_url('https://my.canvas.edu/'), correct_url) self.assertEqual(get_institution_url('https://my.canvas.edu/api/v1'), correct_url) self.assertEqual(get_institution_url('https://my.canvas.edu/api/v1/'), correct_url) self.assertEqual(get_institution_url('https://my.canvas.edu/test/2/'), correct_url + '/test/2') self.assertEqual( get_institution_url('https://my.canvas.edu/test/2/api/v1'), correct_url + '/test/2') self.assertEqual( get_institution_url('https://my.canvas.edu/test/2/api/v1/'), correct_url + '/test/2')
def __init__(self, base_url, access_token): """ :param base_url: The base URL of the Canvas instance's API. :type base_url: str :param access_token: The API key to authenticate requests with. :type access_token: str """ if "api/v1" in base_url: raise ValueError( "`base_url` should not specify an API version. Remove trailing /api/v1/" ) if "http://" in base_url: warnings.warn( "Canvas may respond unexpectedly when making requests to HTTP " "URLs. If possible, please use HTTPS.", UserWarning, ) if not base_url.strip(): warnings.warn( "Canvas needs a valid URL, please provide a non-blank `base_url`.", UserWarning, ) if "://" not in base_url: warnings.warn( "An invalid `base_url` for the Canvas API Instance was used. " "Please provide a valid HTTP or HTTPS URL if possible.", UserWarning, ) # Ensure that the user-supplied access token and base_url contain no leading or # trailing spaces that might cause issues when communicating with the API. access_token = access_token.strip() base_url = get_institution_url(base_url) self.__requester = Requester(base_url, access_token)
def test_get_institution_url(self, m): correct_url = "https://my.canvas.edu" self.assertEqual(get_institution_url("https://my.canvas.edu/"), correct_url) self.assertEqual(get_institution_url("https://my.canvas.edu/api/v1"), correct_url) self.assertEqual(get_institution_url("https://my.canvas.edu/api/v1/"), correct_url) self.assertEqual( get_institution_url("https://my.canvas.edu/test/2/"), correct_url + "/test/2", ) self.assertEqual( get_institution_url("https://my.canvas.edu/test/2/api/v1"), correct_url + "/test/2", ) self.assertEqual( get_institution_url("https://my.canvas.edu/test/2/api/v1/"), correct_url + "/test/2", )