This guide addresses creating add-on attachments in your website or application. The interactions are similar to creating assignments using the CourseWork API endpoints. Implement this journey to allow users to create add-on attachments from your website or application.
Workflow
At a high level, the attachment creation journey follows this sequence:
- A teacher user opens your website or app. They select a piece of content to assign to their students.
- Check that the user can create add-on attachments.
- If the user can't create add-on attachments, create a CourseWork assignment with the URL to the selected content as a Link Material.
- If the user can create add-on attachments, do the following:
- Create an assignment.
- Create an add-on attachment that links to the selected content and associate it with the new assignment.
- Inform the teacher that the assignment has been created successfully.
Each action is described in the following sections.
Check whether a user can create add-on attachments
You can create add-on attachments on behalf of an eligible user. An eligible user is a user who is a teacher in the course you are trying to create CourseWork assignments in and has the Teaching & Learning or Education Plus Google Workspace for Education edition license assigned to them.
Begin by determining whether the user can create add-on attachments. You can do
so by issuing a request to the userProfiles.checkUserCapability
endpoint
with the CREATE_ADD_ON_ATTACHMENT
capability parameter. Inspect the boolean
allowed
field in the response; a true
value indicates that the user is
eligible to create add-on attachments.
Python
eligibility_response = (
classroom_service.userProfiles()
.checkUserCapability(
userId="me",
capability="CREATE_ADD_ON_ATTACHMENT",
# The previewVersion is necessary while the method is available in the
# Workspace Developer Preview Program.
previewVersion="V1_20240930_PREVIEW",
).execute()
)
is_create_attachment_eligible = (
eligibility_response.get('allowed')
)
print(f'User eligibility for course {course_id}'
f': {is_create_attachment_eligible}.')
Route the user based on their eligibility
Eligibility determines whether you can create add-on attachments for a user.
Ineligible user
If the user can't create add-on attachments, then create a new CourseWork
assignment with the user-selected content URL as a Link
.
Python
if not is_create_attachment_eligible:
coursework = {
'title': 'My CourseWork Assignment with Link Material',
'description': 'Created using the Classroom CourseWork API.',
'workType': 'ASSIGNMENT',
'state': 'DRAFT', # Set to 'PUBLISHED' to assign to students.
'maxPoints': 100,
'materials': [
{'link': {'url': my_content_url}}
]
}
assignment = (
service.courses()
.courseWork()
.create(courseId=course_id, body=coursework)
.execute()
)
print(
f'Link Material assignment created with ID: {assignment.get("id")}'
)
The response contains an assignment in the requested course with the content
attached. Users can click the Link
to open the content in your site in a new
tab.
Figure 1. Teacher view of a draft CourseWork assignment with Link Material.
Eligible user
Do the following if the user can create add-on attachments.
- Create a new
CourseWork
assignment without any attachments. - Create an add-on attachment.
- Set the
AddOnAttachment
'sitemId
to theid
of the newly created assignment. - Ensure that you provide URLs to the user-selected content for each View that you support.
- Set the
Python
if is_create_attachment_eligible:
coursework = {
'title': 'My CourseWork Assignment with Add-on Attachment',
'description': 'Created using the Classroom CourseWork API.',
'workType': 'ASSIGNMENT',
'state': 'DRAFT', # Set to 'PUBLISHED' to assign to students.
'maxPoints': 100,
}
assignment = (
classroom_service.courses()
.courseWork()
.create(courseId=course_id, body=coursework)
.execute()
)
print(
f'Empty assignment created with ID: {assignment.get("id")}'
)
attachment = {
'teacherViewUri': {'uri': teacher_view_url},
'studentViewUri': {'uri': student_view_url},
'studentWorkReviewUri': {'uri': grade_student_work_url},
'title': f'Test Attachment {test_label}',
}
add_on_attachment = (
service.courses()
.courseWork()
.addOnAttachments()
.create(
courseId=course_id,
itemId=assignment.get("id"), # ID of the new assignment.
body=attachment,
)
.execute()
)
print(
f'Add-on attachment created with ID: {add_on_attachment.get("id")}'
)
The add-on appears as an attachment card in Classroom. The URLs specified in the request open in the appropriate iframe for each View.