Esempio n. 1
0
    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)
Esempio n. 2
0
    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)
Esempio n. 3
0
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()
Esempio n. 4
0
    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)
Esempio n. 5
0
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)
Esempio n. 6
0
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)
Esempio n. 7
0
    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)
Esempio n. 8
0
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)
Esempio n. 9
0
    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')
Esempio n. 10
0
    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)
Esempio n. 11
0
    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",
        )