An LTI that allows a user to easily change due dates for multiple assignments simultaneously.
Clone the repository
# clone via SSH
git clone [email protected]:ucfopen/due-date-changer.git# clone via HTTPS
git clone https://github.com/ucfopen/due-date-changer.gitSwitch into the new directory
cd due-date-changerCreate the config file from the template
cp config.py.template config.pyFill in the config file
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
DEBUG = False
SECRET_KEY = 'JbwLnLgsfxDInozQudc6IFPe0eYecW8f'
ALLOWED_CANVAS_DOMAINS = ['example.com', 'example.edu']
CANVAS_URL = 'https://example.instructure.com'
API_KEY = 'p@$$w0rd'
PYLTI_CONFIG = {
'consumers': {
'consumer_key': {
'secret': b'shared_secret'
}
},
'roles': {
'staff': [
'urn:lti:instrole:ims/lis/Administrator',
'Instructor',
'ContentDeveloper',
'urn:lti:role:ims/lis/TeachingAssistant'
]
}
}
TIME_ZONE = 'US/Eastern'
LOCAL_TIME_FORMAT = '%m/%d/%Y %I:%M %p'
LOG_FILE = 'due_date_changer.log'
LOG_FORMAT = '%(asctime)s [%(levelname)s] {%(filename)s:%(lineno)d} %(message)s'
LOG_LEVEL = 'DEBUG'
LOG_MAX_BYTES = 1024 * 1024 * 5 # 5 MB
LOG_BACKUP_COUNT = 1Create a virtual environment
virtualenv -p python2.7 envSource the environment
source env/bin/activateAlternatively, use the setup script
source setup.shInstall required packages
-
If you want to be able to run tests:
pip install -r test_requirements.txt
-
Otherwise,
pip install -r requirements.txt
If you haven't already, activate the virtual environment and set up Flask environment variables.
source env/bin/activate
export FLASK_APP=lti.py
export FLASK_DEBUG=1Alternatively, use the setup script
source setup.shRun the Flask development server.
flask run --with-threadsCheck the status page at /status (http://127.0.0.1:5000/status by default) to see if everything is
working properly.
Note: for the status page to work, the app must be run with threading enabled.
Due Date Changer is tested to run NGINX and uWSGI, but can also work on Apache and mod_wsgi.
nginx.conf
In your nginx.conf file, place these lines under the server{} section with the appropriate changes
location /due_date_changer/static {
alias /path/to/due_date_changer/static/;
}
location /due_date_changer {
root html;
include uwsgi_params;
uwsgi_param UWSGI_SCHEME https; # Set to https is behind load balancer, else http
uwsgi_param SCRIPT_NAME /due_date_changer;
uwsgi_modifier1 30;
uwsgi_pass 127.0.0.1:9000; #set to any number above 9000 that isn't in use.
uwsgi_read_timeout 300;
uwsgi_connect_timeout 300;
uwsgi_send_timeout 300;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host example.com; #Add your domain here.
}/etc/uwsgi/sites-enabled/due_date_changer.ini
[uwsgi]
# uwsgi process runs as user:group
uid = nginx
gid = nginx
# Number of worker processes
processes = 6
chdir = /path/to/due_date_changer/
venv = /path/to/due_date_changer/env
socket = 127.0.0.1:9000 #Same Socket number as above
# Respawn slow processes
harakiri=60
harakiri-verbose=True
master=True
# name of wsgi file in the chdir dir above without the .py extension
wsgi-file = wsgi.py
# Background the process (and allow it to log!)
daemonize = /var/log/uwsgi/app.log
# Reload the uwsgi process if the wsgi file is touched
touch-reload = /path/to/due_date_changer/wsgi.py
#testing saveSnapshot fix
buffer-size=16384
#post-buffering=1
#stats
stats = /tmp/wsgi.py.socketNeed help? Have an idea? Just want to say hi? Come join us on the UCF Open Slack Channel and join the #due-date-changer channel!
