{"id":13596715,"url":"https://github.com/ucfopen/quiz-extensions","last_synced_at":"2025-04-30T15:25:43.044Z","repository":{"id":33000899,"uuid":"133419540","full_name":"ucfopen/quiz-extensions","owner":"ucfopen","description":"A self-service LTI for faculty to easily extend time for multiple users for all quizzes at once.","archived":false,"fork":false,"pushed_at":"2024-02-28T20:08:22.000Z","size":257,"stargazers_count":16,"open_issues_count":22,"forks_count":5,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-04-19T04:42:04.136Z","etag":null,"topics":["a11y","accessibility","canvas","canvas-lms","edtech","education","hacktoberfest","instructure","lti"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ucfopen.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-05-14T20:47:21.000Z","updated_at":"2024-02-29T20:34:45.000Z","dependencies_parsed_at":"2024-08-01T16:42:03.800Z","dependency_job_id":"51c465bb-c48e-4c62-86b2-af7bde6be1cf","html_url":"https://github.com/ucfopen/quiz-extensions","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ucfopen%2Fquiz-extensions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ucfopen%2Fquiz-extensions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ucfopen%2Fquiz-extensions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ucfopen%2Fquiz-extensions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ucfopen","download_url":"https://codeload.github.com/ucfopen/quiz-extensions/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251730460,"owners_count":21634389,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["a11y","accessibility","canvas","canvas-lms","edtech","education","hacktoberfest","instructure","lti"],"created_at":"2024-08-01T16:02:42.444Z","updated_at":"2025-04-30T15:25:43.015Z","avatar_url":"https://github.com/ucfopen.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"[![Build Status](https://github.com/ucfopen/quiz-extensions/actions/workflows/run-tests.yml/badge.svg)](https://github.com/ucfopen/quiz-extensions/actions/workflows/run-tests.yml/)\n[![Coverage Status](https://codecov.io/gh/ucfopen/quiz-extensions/branch/master/graph/badge.svg?token=7MfeVsKdxc)](https://codecov.io/gh/ucfopen/quiz-extensions)\n[![Join UCF Open Slack Discussions](https://badgen.net/badge/icon/ucfopen?icon=slack\u0026label=slack\u0026color=pink)](https://dl.ucf.edu/join-ucfopen)\n\nA self-service LTI for faculty to easily extend time for multiple users for\nall quizzes at once.\n\n# Table of Contents\n\n- [Installation](#installation)\n  - [Development Installation](#development-installation)\n  - [Production Installation](#production-installation)\n- [Third Party Licenses](#third-party-licenses)\n\n# Installation\n\n## Development Installation\n\n```sh\ngit clone git@github.com:ucfopen/quiz-extensions.git\n```\n\nSwitch into the new directory\n\n```sh\ncd quiz-extensions\n```\n\nCreate the config file from the template\n\n```sh\ncp config.py.template config.py\n```\n\nFill in the config file\n\n```python\nAPI_URL = ''  # Canvas API URL (e.g. 'http://example.com/api/v1/')\nAPI_KEY = ''  # Canvas API Key\n\n# The maximum amount of objects the Canvas API will return per page (usually 100)\nMAX_PER_PAGE = 100\n\n# A secret key used by Flask for signing. KEEP THIS SECRET! (e.g. 'Ro0ibrkb4Z4bZmz1f5g1+/16K19GH/pa')\nSECRET_KEY = ''\n\nLTI_KEY = ''  # Consumer Key\nLTI_SECRET = ''  # Shared Secret\n\nLTI_TOOL_ID = ''  # A unique ID for the tool\n\nSQLALCHEMY_DATABASE_URI = ''  # URI for database. (e.g. 'mysql://root:root@localhost/quiz_extensions')\n\nGOOGLE_ANALYTICS = ''  # The Google Analytics ID to use.\n\nREDIS_URL = ''  # URL for the redis server (e.g. 'redis://localhost:6379')\n```\n\nCreate a virtual environment\n\n```sh\nvirtualenv env\n```\n\nSource the environment\n\n```sh\nsource env/bin/activate\n```\n\nInstall required packages\n\n- If you want to be able to run tests:\n\n  ```sh\n  pip install -r test_requirements.txt\n  ```\n\n- Otherwise,\n\n  ```sh\n  pip install -r requirements.txt\n  ```\n\nSet `FLASK_APP` environment variable\n\n```sh\nexport FLASK_APP=views.py\n```\n\nMigrate database\n\n```sh\nflask db upgrade\n```\n\nRun the server\n\n```sh\nflask run --with-threads\n```\n\nEnsure Redis is running. If not, start it with\n\n```sh\nredis-server --daemonize yes\n```\n\nEnsure RQ Worker is running. If not, start it with\n\n```sh\nrq worker quizext\n```\n\n## Production Installation\n\nThis is for an Ubuntu 16.xx install but should work for other Debian/ubuntu\nbased installs using Apache and mod_wsgi.\n\n```sh\nsudo apt-get update\nsudo apt-get install libapache2-mod-wsgi python-dev apache2 python-setuptools python-pip python-virtualenv libxml2-dev libxslt1-dev zlib1g-dev\n\nsudo a2enmod wsgi\nsudo service apache2 restart\n\ncd /var/www/\n\nsudo git clone git@github.com:ucfopen/quiz-extensions.git\n\ncd quiz-extensions/\n\nsudo virtualenv env\nsource env/bin/activate\n\nsudo env/bin/pip install -r requirements.txt\n\nsudo nano /etc/apache2/sites-available/000-default.conf\n```\n\nPut this inside 000-default.conf after `VirtualHost *:80` And before the ending `\u003c/VirtualHost\u003e`:\n\n```apache\n#QUIZ EXTENSION CODE\nAlias quiz-ext/static /var/www/quiz-extensions/static\n\u003cDirectory /var/www/quiz-extensions/static\u003e\n    Require all granted\n\u003c/Directory\u003e\n\n\u003cDirectory /var/www/quiz-extensions\u003e\n    \u003cFiles wsgi.py\u003e\n        Require all granted\n    \u003c/Files\u003e\n\u003c/Directory\u003e\n\nWSGIDaemonProcess quiz-ext\nWSGIProcessGroup quiz-ext\nWSGIScriptAlias /quiz-ext /var/www/quiz-extensions/wsgi.py\n```\n\nThen:\n\n```sh\nsudo service apache2 reload\n\nsudo cp config.py.template config.py\n\nsudo nano config.py\n```\n\nEdit your config.py and change the variables to match your server:\n\n```python\nDEBUG = False  # Leave False on production\n\nAPI_URL = ''  # Canvas API URL (e.g. 'http://example.com/api/v1/')\nAPI_KEY = ''  # Canvas API Key\n\n# The default number of objects the Canvas API will return per page (usually 10)\nDEFAULT_PER_PAGE = 10\n# The maximum amount of objects the Canvas API will return per page (usually 100)\nMAX_PER_PAGE = 100\n\n# A secret key used by Flask for signing. KEEP THIS SECRET! (e.g. 'Ro0ibrkb4Z4bZmz1f5g1+/16K19GH/pa')\nSECRET_KEY = ''\n\nLTI_KEY = ''  # Consumer Key\nLTI_SECRET = ''  # Shared Secret\n\nLTI_TOOL_ID = ''  # A unique ID for the tool\nLTI_DOMAIN = ''  # Domain hosting the LTI\n\nSQLALCHEMY_DATABASE_URI = ''  # URI for database. (e.g. 'mysql://root:root@localhost/quiz_extensions')\n```\n\nFinally:\n\n```sh\nsudo service apache2 reload\n```\n\n# Third Party Licenses\n\nThis project uses `ims_lti_py` which is [available on GitHub](https://github.com/tophatmonocle/ims_lti_py)\nunder the MIT license.\n\n## Contact Us\n\nNeed help? Have an idea? Just want to say hi? Come join us on the [UCF Open Slack Channel](https://dl.ucf.edu/join-ucfopen) and join the `#quiz-extensions` channel!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fucfopen%2Fquiz-extensions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fucfopen%2Fquiz-extensions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fucfopen%2Fquiz-extensions/lists"}