{"action":"created","issue":{"url":"https://api.github.com/repos/jupyter/nbgrader/issues/530","repository_url":"https://api.github.com/repos/jupyter/nbgrader","labels_url":"https://api.github.com/repos/jupyter/nbgrader/issues/530/labels{/name}","comments_url":"https://api.github.com/repos/jupyter/nbgrader/issues/530/comments","events_url":"https://api.github.com/repos/jupyter/nbgrader/issues/530/events","html_url":"https://github.com/jupyter/nbgrader/issues/530","id":169001198,"number":530,"title":"LTI/Canvas Integration","user":{"login":"huwf","id":7873749,"avatar_url":"https://avatars.githubusercontent.com/u/7873749?v=3","gravatar_id":"","url":"https://api.github.com/users/huwf","html_url":"https://github.com/huwf","followers_url":"https://api.github.com/users/huwf/followers","following_url":"https://api.github.com/users/huwf/following{/other_user}","gists_url":"https://api.github.com/users/huwf/gists{/gist_id}","starred_url":"https://api.github.com/users/huwf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/huwf/subscriptions","organizations_url":"https://api.github.com/users/huwf/orgs","repos_url":"https://api.github.com/users/huwf/repos","events_url":"https://api.github.com/users/huwf/events{/privacy}","received_events_url":"https://api.github.com/users/huwf/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/jupyter/nbgrader/labels/enhancement","name":"enhancement","color":"84b6eb"}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":{"url":"https://api.github.com/repos/jupyter/nbgrader/milestones/2","html_url":"https://github.com/jupyter/nbgrader/milestones/Wishlist","labels_url":"https://api.github.com/repos/jupyter/nbgrader/milestones/2/labels","id":1047535,"number":2,"title":"Wishlist","description":"","creator":{"login":"jhamrick","id":83444,"avatar_url":"https://avatars.githubusercontent.com/u/83444?v=3","gravatar_id":"","url":"https://api.github.com/users/jhamrick","html_url":"https://github.com/jhamrick","followers_url":"https://api.github.com/users/jhamrick/followers","following_url":"https://api.github.com/users/jhamrick/following{/other_user}","gists_url":"https://api.github.com/users/jhamrick/gists{/gist_id}","starred_url":"https://api.github.com/users/jhamrick/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jhamrick/subscriptions","organizations_url":"https://api.github.com/users/jhamrick/orgs","repos_url":"https://api.github.com/users/jhamrick/repos","events_url":"https://api.github.com/users/jhamrick/events{/privacy}","received_events_url":"https://api.github.com/users/jhamrick/received_events","type":"User","site_admin":false},"open_issues":14,"closed_issues":0,"state":"open","created_at":"2015-03-31T18:36:28Z","updated_at":"2016-08-20T14:10:24Z","due_on":null,"closed_at":null},"comments":4,"created_at":"2016-08-02T22:10:45Z","updated_at":"2016-08-21T21:32:19Z","closed_at":null,"body":"I think I remember reading that this might be a plan at some point but I can't immediately find the link again.  It is something I need to do for my current project, and I plan to contribute some code for it anyway, just wondered whether any work had been done already or whether there were other plans.\r\n\r\nFrom what I can see, we would need to:\r\n* Read the `lis_outcome_service_url` and `lis_result_sourcedid` from the initial LTI authentication\r\n* Get the grade as a float 0.0 - 1.0 and place in an XML document\r\n* Sign the request with OAUth 1.0\r\n* `POST` the XML back to the lis_result_sourcedid value\r\n\r\nThe Coursera document seems to describe it quite well https://building.coursera.org/app-platform/lti/\r\n\r\nI have already made a bare bones version of a custom LTI authenticator which uses `OAuthLib`, so I guess I would need to link that so that it saves in the NBGrader database.  A final point is that Canvas have extensions to LTI, so that would be a natural subclass of a simple LTI one.  I imagine calling it with `nbgrader post`, but have no particular ties to that.\r\n\r\nIn my deployment, we're not planning to manually grade any assignments, so I'm planning to run a cron job every minute to search for new submissions, and then collect/autograde/feedback and post them.  If I ever get it working I'll put the code up on GitHub :)\r\n\r\nI'm guessing this might be related to #436 ?\r\n"},"comment":{"url":"https://api.github.com/repos/jupyter/nbgrader/issues/comments/241283491","html_url":"https://github.com/jupyter/nbgrader/issues/530#issuecomment-241283491","issue_url":"https://api.github.com/repos/jupyter/nbgrader/issues/530","id":241283491,"user":{"login":"jhamrick","id":83444,"avatar_url":"https://avatars.githubusercontent.com/u/83444?v=3","gravatar_id":"","url":"https://api.github.com/users/jhamrick","html_url":"https://github.com/jhamrick","followers_url":"https://api.github.com/users/jhamrick/followers","following_url":"https://api.github.com/users/jhamrick/following{/other_user}","gists_url":"https://api.github.com/users/jhamrick/gists{/gist_id}","starred_url":"https://api.github.com/users/jhamrick/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jhamrick/subscriptions","organizations_url":"https://api.github.com/users/jhamrick/orgs","repos_url":"https://api.github.com/users/jhamrick/repos","events_url":"https://api.github.com/users/jhamrick/events{/privacy}","received_events_url":"https://api.github.com/users/jhamrick/received_events","type":"User","site_admin":false},"created_at":"2016-08-21T21:32:19Z","updated_at":"2016-08-21T21:32:19Z","body":"Ok, I have opened #536 which (I think) should make it fairly straightforward to export to other formats by defining your own export plugin. Let me know if you have any questions about it or if it doesn't quite work with what you're planning here (I will go ahead and merge that PR once the tests pass, but I'm happy to make changes if they're needed)."}}
{"actor":{"display_login":"jhamrick"}}