WeBWorK Main Forum

Using wwdb: command line vs. web interface

Using wwdb: command line vs. web interface

by Brian Camp -
Number of replies: 5
Hi Everyone,

The following is not a pressing issue as I have a particular (slow) way that I use to accomplish my ends already. But I would like to be able to do more at the command line. It seems that the documentation on the wiki doesn't seem to address my questions. Here is some documentation about wwdb from this site:

Here are my two questions. I'll provide some background after the questions.

1. Is it possible to use wwdb to add users from a .lst file into a course that already exists?

2. Is it possible to use wwdb to export a single user from an existing class (not remove them) and then import them (with their password+permissions) into a different course that already exists? I think the issue here is how to only export/import one user when there may be several in the class.

(I mention wwdb as I think it is the command-line tool to use, but it may be possible that I am looking for the wrong command).

Our server runs webwork 2.3 (not updated yet - will probably be another quarter before I tackle that). Currently, I do much of the administration of our webwork server using the web interface. For example, I create all of the classes at the web interface. I know that it would probably be easier to use wwdb at the command line but I have not yet gotten comfortable with the permission issues this can result in (i.e.have had some problems in the past).

Usually the classes are created first with only administrators in the class. Then I export a database from an old class and use this database to import homework sets and a professor into a class. Usually this means that I then have to go back and delete the students from the old course as they end up getting imported with the professor. Question #2 would help with this scenario as only a particular person could then be extracted from a class and then inserted into another class.

After the classes have been created, I then get a big data file with all of the user information. I grep this at the command line and parse it into the various .lst files needed and then use mv to push each file to the correct template directory. Now it becomes tedious. At this point, I log into each class individually and import the students in the .lst file into the class. Question #1 would greatly simplify this if there is a way to use wwdb (or some other command) to import a .lst file into a class without having to log into the class and use the "classlist editor". For a small number of classes this probably does not pose much of a problem. For about 20 or more classes however, this starts to become tedious.

Any thoughts? I hope I have described my situation adequately. If any of you have a few spare moments to throw at this one, I would appreciate it.

Brian Camp
Louisiana Tech University
In reply to Brian Camp

Re: Using wwdb: command line vs. web interface

by Gavin LaRose -
Hi Brian,

I'm actually not familiar with wwdb, but for what it's worth here is my lengthy exposition on the subject.

I think you've articulated the difficulties that large installations and users of WeBWorK eventually have. For comparison, this semester we're running about 80 different WeBWorK classes here at the University of Michigan, including 50 different sections of our calculus I class. Because students add, drop and switch between sections during the first several weeks of class something other than the GUI is needed. I accomplish this here in two ways.

For some of the classes that we run, all sections of the course are grouped into a single WeBWorK course. For these, I have a script that goes through the current course roster data (which I can grab from an administrative database) and compares it with the existing course list. It then generates .lst files of students who need to be added, dropped, and have their section information changed. I then manually upload these with the classlist editor, using the "replace" option as necessary to make changes to existing students.

For our classes with huge numbers of WeBWorK courses (e.g., calculus I, where every section of the course is a different WeBWorK course), I have a script to manage the courses: it can build all of the courses from the administrative roster data, put the correct students in the courses, copy set definition files from a template course and assign them to the students in each section, etc. It also has a function that goes through the roster data from the administrative database, compares that with the existing WeBWorK class rosters, and then adds and drops students from each section to bring the WeBWorK courses in sync with that data.

These scripts are somewhat site specific, but I'd be happy to share and help modify them if they sound like something that would be useful for you (or anyone else).

In reply to Brian Camp

Re: Using wwdb: command line vs. web interface

by Arnold Pizer -
Hi Brian,

You might also want to contact John Jones at Arizona State ("John Jones" <jj@asu.edu>) who has experience using WeBWorK with a large number of courses. John has some scripts on the web (http://hobbes.la.asu.edu/webwork-stuff/) but I don't know if he has others that he used to construct courses.

It would be nice to put together a collection of documentation, how-to's, sample scripts, etc. for people administering large WeBWorK installations. There are quite a few very large schools using WeBWorK (Indiana, Ohio State, Utah, Irvine Santa Barbara come to mind quickly) but I don't think there has been much sharing of ideas among them. Maybe this thread will lead to some resources that can be made available to all.


In reply to Brian Camp

Re: Using wwdb: command line vs. web interface

by Robert Byerly -
Hi Brian,

Here at Texas Tech we have about 3500 students in 60 sections using WeBWorK this semester, so I am interested in automating things too.

I set up courses using a script that calls wwdb and just adds administrators and the instructor to each WeBWorK course. (It also adjusts file permissions, adds to the class to the local database used in the next step, and sends an e-mail to the instructor informing her of the URL for the course and her login information). My solution for class lists is this: I have a script that downloads class information from the registrar's database, puts it in the appropriate .lst format and copies it into the appropriate templates directory. During the first week of class (add-drop period) this is run several times a day through a cron job. It is then up to the individual instructor to periodically go to the classlist editor and click on "import from file ...", and to assign any existing homework to any new students that get added (as well as notifying the new students that they have homework). This is a minor additional administrative burden for each instructor.

I don't know if other institutions have this problem, but we seem to have a lot of students who get temporarily dropped from a class list (usually because of a late tuition payment) but who are re-instated on the next copy of the class list. If students were automatically dropped from the WeBWorK course if they didnt' show up on a class list, any existing homework data would be lost as well. For this and other reasons I'm cautious about over-automating. Some things (such as dropping students and assigning homework to students) should perhaps be left to the individual instructor's judgment.

I would like a better automated system for (optionally) setting up homework assignments for each course. Many of our instructors prefer to set up their own, and they are free to do so, but some would prefer "canned" assignments.

Bob Byerly

In reply to Robert Byerly

Re: Using wwdb: command line vs. web interface

by Peter Staab -
As this thread took place 9 months ago, I was curious if anyone had any additional documentation on doing this. Here at Fitchburg State College, we only have a handful of classes on Webwork, but would like to automate to minimize errors and would also hate to duplicate work already done.

I haven't been able to access John Jones webpage listed above (this may answer some of my questions.)

Peter Staab
In reply to Peter Staab

Re: Using wwdb: command line vs. web interface

by Nathan Wallach -
This is an old thread, but I could not find anything about a script to import classlist files into an existing course.

So, I hacked up and am testing a new script for importing a classlist file into an existing course. At present, it borrows code from lib/WeBWorK/ContentGenerator/Instructor/UserList2.pm but in the long run, the core code should be moved to a new module file in lib/WeBWorK/Utils and the called from the script and the UserList2.pm files.

Note: It is currently set up to add users which do not exist, but to skip (and not replace) users which already exist in the course.

I have done some initial testing when the script is put in webwork2/bin and run using syntax like:

./importClassList.pl courseName path_to/classlist.lst

Any feedback would be welcome.