canvasapi icon indicating copy to clipboard operation
canvasapi copied to clipboard

Add API coverage for LTI resource links

Open jonespm opened this issue 1 year ago • 1 comments

What resource needs additional coverage? Courses lti_resource links, which is a new API which is in beta and will be released soon.

What endpoints need to be covered? Add support for these https://canvas.instructure.com/doc/api/lti_resource_links.html

GET /api/v1/courses/:course_id/lti_resource_links
GET /api/v1/courses/:course_id/lti_resource_links/:id
PUT /api/v1/courses/:course_id/lti_resource_links/:id

jonespm avatar Aug 14 '24 20:08 jonespm

I tested this for the first GET call and looks to work

import json
import argparse
import os
from canvasapi import Canvas
from canvasapi.canvas_object import CanvasObject
from canvasapi.paginated_list import PaginatedList
from canvasapi.util import combine_kwargs
from canvasapi.course import Course

class LTIResourceLink(CanvasObject):
    def __init__(self, requester, attributes):
        # Initialize an LTIResourceLink object.
        super(LTIResourceLink, self).__init__(requester, attributes)

class ExtendedCourse(Course):
    def get_lti_resource_links(self, **kwargs):
        """
        Retrieve LTI resource links for this course as a PaginatedList.

        :return: A PaginatedList of LTI resource links.
        :rtype: :class:`canvasapi.paginated_list.PaginatedList`
        """
        endpoint = f"courses/{self.id}/lti_resource_links"
        
        return PaginatedList(
            LTIResourceLink,
            self._requester,
            "GET",
            endpoint,
            kwargs=combine_kwargs(**kwargs)
        )

API_URL = os.getenv('CANVAS_API_URL')
API_KEY = os.getenv('CANVAS_API_KEY')

if not API_URL or not API_KEY:
    print("Error: Please set the CANVAS_API_URL and CANVAS_API_KEY environment variables.")
    exit(1)

# Step 3: Initialize the Canvas API
canvas = Canvas(API_URL, API_KEY)

# Usage example, set the course_id you want
course_id = 123456
course = ExtendedCourse(canvas._Canvas__requester, {'id': course_id})

lti_resource_links = course.get_lti_resource_links()
for link in lti_resource_links:
    print(link)urce links: {response.status_code}")

jonespm avatar Aug 14 '24 20:08 jonespm

Took a stab at it, would love to get your thoughts!

jsmnhou avatar Dec 03 '24 22:12 jsmnhou