canvasapi
canvasapi copied to clipboard
Parse Nested Objects
Original title was "Canvas.get_assignment_group should turn assignments into Assignment instances"
A call to Course.get_assignment_group
can optionally include full details about the assignments in the group. That is a nice way to reduce round-trips if we already know that the details will be needed.
In version 0.6.0 of canvasapi
, these assignment details are provided as a list
of dict
.
group = course.get_assignment_group(group.id, include='assignments')
for assignment in group.assignments:
print(assignment) # prints each assignment as a dict
I was expecting them to be a list
of Assignment
instances. Each dict
seemingly has all of the details needed to build an Assignment
, and I can do that conversion myself:
group = course.get_assignment_group(group.id, include='assignments')
assignments = [Assignment(group._requester, raw) for raw in group.assignments]
for assignment in assignments:
print(assignment) # prints each assignment as an Assignment
However, accessing group._requester
directly seems like cheating. And I would have expected canvasapi
to take care of such details behind the scenes. Can that be done? Can Course.get_assignment_group
convert each dict
into a proper Assignment
for me? (Obviously it should only do so if assignment details are present; without include='assignments'
, no details are given, so there is nothing to convert.
Still using canvasapi
0.6.0, calling Course.get_assignment_group
with discussion_topic
on the include[]
list returns Assignment
instances have discussion_topic
attributes. The values of these attributes are simple Python dict
instances but should be DiscussionTopic
instances. So this is essentially the same problem, but in a new context. Should I file a new issue for this new context, or do you want to bundle that in with the issue I originally reported here?
I think bundling these issues together makes sense. This is essentially the issue for turning nested objects into actual objects instead of dict
. I'll edit the title to reflect this.