Skip to content
Go to file


Failed to load latest commit information.
Latest commit message
Commit time
Jul 1, 2020
Jun 13, 2020
Feb 6, 2020
Apr 30, 2020
Jun 29, 2016
Nov 18, 2016
Sep 14, 2017
Aug 1, 2020
Jun 13, 2020
Mar 29, 2020
Apr 18, 2015
Oct 31, 2019
Jun 19, 2017
May 4, 2020
May 4, 2020
Apr 18, 2015
May 12, 2016
Apr 8, 2016
Apr 18, 2015
Sep 18, 2016
Mar 18, 2020
Mar 29, 2020
May 10, 2017
Nov 27, 2017
Nov 27, 2017
Jun 9, 2020
Apr 24, 2020
Jan 28, 2016
Mar 29, 2020
Apr 18, 2015

Python for Everybody (PY4E)

Course materials for

The Python3 versions of the code is all in code3

If you are interested in the Python for Everybody book see the folders

See the file book3/ for more details.

Setup On Localhost

Here are the steps to set this up on localhost on a Macintosh using MAMP.

Install MAMP (or similar) using

Check out this repo into a top level folder in htdocs

cd /Applications/MAMP/htdocs
git clone

Go into the newly checked out folder and get a copy of Tsugi:

cd py4e
git clone

Create a database in your SQL server:

GRANT ALL ON tsugi.* TO 'ltiuser'@'localhost' IDENTIFIED BY 'ltipassword';
GRANT ALL ON tsugi.* TO 'ltiuser'@'' IDENTIFIED BY 'ltipassword';

Still in the tsugi folder set up config.php:

cp config-dist.php config.php

Edit the config.php file, scroll through and set up all the variables. As you scroll through the file some of the following values are the values I use on my MAMP:

$wwwroot = 'http://localhost:8888/py4e/tsugi';   // Embedded Tsugi localhost


$CFG->pdo = 'mysql:host=;port=8889;dbname=tsugi'; // MAMP
$CFG->dbuser    = 'ltiuser';
$CFG->dbpass    = 'ltipassword';


$CFG->adminpw = 'short';


$CFG->apphome = 'http://localhost:8888/py4e';
$CFG->context_title = "Python for Everybody";
$CFG->lessons = $CFG->dirroot.'/../lessons.json';


$CFG->tool_folders = array("admin", "../tools", "../mod");
$CFG->install_folder = $CFG->dirroot.'./../mod'; // Tsugi as a store


$CFG->servicename = 'PY4E';

(Optional) If you want to use Google Login, go to and create an "OAuth Client ID". Make it a "Web Application", give it a name, put the following into "Authorized JavaScript Origins":


And these into Authorized redirect URIs:


Note: You do not need port numbers for either of these values in your Google configuration.

Google will give you a 'client ID' and 'client secret', add them to config.php as follows:

$CFG->google_client_id = '';
$CFG->google_client_secret = 'R6..snip..29a';

While you are there, you could "Create credentials", select "API key", and name the key "My Google MAP API Key" and put the API key into config.php like the following:

$CFG->google_map_api_key = 'AIza..snip..9e8';

Starting the Application

After the above configuration is done, navigate to your application:


It should complain that you have not created tables and suggest you use the Admin console to do that:


It will demand the $CFG->adminpw from config.php (above) before unlocking the admin console. Run the "Upgrade Database" option and it should create lots of tables in the database and the red warning message about bad database, should go away.

Got into the database and the lti_key table, find the row with the key_key of and put a value in the secret column - anything will do - just don't leave it empty or the internal LTI tools will not launch.

Next use the administrator interface to install the peer-grading tool from the github repository:


Click on "Available Modules" and install

The other two LTI tools are already part of the py4e repo and in wa4e/tools folder.

Using the Application

Navigate to:


You should click around without logging in and see if things work.

Then log in with your Google account and the UI should change. In particular you should see 'Assignments' and in Lessons you should start seeing LTI autograders.

You can’t perform that action at this time.