Skip to content

Assignment list (only show assignments to students in the course) [using jupyterhub] #733

Closed

Description

Hi,

First of all thank you for the great extention!

I have been looking around, however, I am unable to figure out how the assignment list is populated for each student on their own notebook server and how it can figure out which courses the students belong to (that is, if they exist in the gradebook database / config file for the specific course).

In fact, in my case using nbgrader version 0.4.0 and jupyterhub version 0.7.2 the assignment list shows all released assignments to any user that is logged in on the hub, regardless if they are in the database or config file for the course. I should note the course database and config is only visible to the course owner and root on the system (using chmod 0700 as course owner).

In the jupyterhub log I get the error every so often aswell:

10:08:41.253 - error: [ConfigProxy] Proxy error:  Error: socket hang up
    at createHangUpError (_http_client.js:252:15)
    at Socket.socketCloseListener (_http_client.js:284:23)
    at emitOne (events.js:101:20)
    at Socket.emit (events.js:188:7)
    at TCP._handle.close [as _onclose] (net.js:493:12)
10:08:41.253 - error: [ConfigProxy] 503 GET /user/nabr/assignments?course_id=SummerSchool&_=1490774917163

Which I think might be related, since it is some kind HTTP get.
In this case the course is called SummerSchool and my user [course owner] is nabr. I should note the error does not show up with other users, only the course owner. I suspect it wants to give the list of students in the courses to the hub somehow?

The nbgrader config for the course is:

c = get_config()
c.NbGrader.course_id = "SummerSchool"

c.FormgradeApp.authenticator_class = u'nbgrader.auth.hubauth.HubAuth'
c.FormgradeApp.ip = '127.0.0.1'
c.FormgradeApp.port = 5006 #Make sure port matches with the set port on jupyterHub service

c.HubAuth.grader_group = u'SummerSchool-graders'

# Update this list with other assignments you want
c.NbGrader.db_assignments = [dict(name="SummerSchool_CT"),dict(name="SummerSchool_other")]

# Change the students in this list with that actual students in
# your course or add the to the database later.
c.NbGrader.db_students = [
]

The relevant part of the jupyterhub config is

#For formgrader
c.JupyterHub.load_groups = {
        'SummerSchool-graders': ['nabr']
}


#Services
c.JupyterHub.services = [
        #SummerSchool
    {
        'name': 'formgrader-SummerSchool',
        'admin': True,
        'command': ['nbgrader', 'formgrade'],
        'url': 'http://127.0.0.1:5006',
        'cwd': '/home/nabr/SummerSchool/'
    },
]

Everything else seems to work great, including the formgrader.

Hope you can explain this mystery to me :)

Best regards
Nicolai

Update:

If i pass the url
/user/nabr/assignments?course_id=SummerSchool
to jupyterhub i do in fact get the results returned:

{"success": true, "value": [{"course_id": "SummerSchool", "assignment_id": "SummerSchool_CT", "status": "released", ,"path": [I_Removed_these_paths]}

However, this is also the case for students that are not present in the database / config file.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions