Metadata-Version: 2.1
Name: INGInious
Version: 0.10.0
Summary: An intelligent grader that allows secured and automated testing of code made by students.
Author-email: INGInious contributors <inginious@info.ucl.ac.be>
License: AGPL 3
Project-URL: Homepage, https://inginious.org/
Project-URL: Documentation, https://docs.inginious.org
Project-URL: Repository, https://github.com/INGInious/INGInious
Project-URL: Issues, https://github.com/INGInious/INGInious/issues
Keywords: autograder,programming,training,learning,education,mooc,autograding,evaluation,grading,exercise,interview,assessment,lti,learn-to-code,programming-exercise,e-assessment,technical-coding-interview,coding-interviews,inginious
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: JavaScript
Classifier: Framework :: Flask
Classifier: Framework :: Pytest
Classifier: Framework :: Setuptools Plugin
Classifier: Framework :: Sphinx
Classifier: Framework :: AsyncIO
Classifier: Intended Audience :: Education
Classifier: License :: OSI Approved :: GNU Affero General Public License v3
Classifier: Topic :: Education
Classifier: Topic :: Education :: Computer Aided Instruction (CAI)
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Software Development
Classifier: Operating System :: POSIX :: Linux
Requires-Python: >=3.9
Description-Content-Type: text/x-rst
License-File: LICENSE
Requires-Dist: docker==7.1.0
Requires-Dist: docutils==0.21.2
Requires-Dist: Flask==3.0.2
Requires-Dist: Flask-Mail==0.10.0
Requires-Dist: itsdangerous==2.2.0
Requires-Dist: Jinja2==3.1.5
Requires-Dist: lti==0.9.5
Requires-Dist: PyLTI1p3==2.0.0
Requires-Dist: MarkupSafe==3.0.2
Requires-Dist: mongoengine==0.29.1
Requires-Dist: msgpack==1.2.1
Requires-Dist: natsort==8.4.0
Requires-Dist: psutil==6.1.1
Requires-Dist: pymongo==4.11
Requires-Dist: python-dotenv==1.1.1
Requires-Dist: pytidylib==0.3.2
Requires-Dist: PyYAML==6.0.2
Requires-Dist: pyzmq==27.1.0
Requires-Dist: requests==2.31.0
Requires-Dist: requests-oauthlib==2.0.0
Requires-Dist: sh==2.2.1
Requires-Dist: watchdog==6.0.0
Requires-Dist: Werkzeug==3.0.1
Requires-Dist: WsgiDAV==4.3.3
Requires-Dist: zipstream==1.1.4
Requires-Dist: pytidylib==0.3.2
Requires-Dist: argon2-cffi==23.1.0
Requires-Dist: tzlocal==5.3.1
Provides-Extra: ldap
Requires-Dist: ldap3==2.9.1; extra == "ldap"
Provides-Extra: saml2
Requires-Dist: python3-saml==1.16.0; extra == "saml2"
Provides-Extra: test
Requires-Dist: pytest==8.3.4; extra == "test"
Requires-Dist: coverage==7.6.9; extra == "test"
Provides-Extra: doc
Requires-Dist: ipython==8.12.3; extra == "doc"
Requires-Dist: sphinx==7.4.7; extra == "doc"
Requires-Dist: sphinx-autodoc-typehints==2.3.0; extra == "doc"
Requires-Dist: sphinx-rtd-theme==3.0.0; extra == "doc"
Requires-Dist: sphinx-tabs==3.4.5; extra == "doc"

INGInious
=========

.. image:: https://app.codacy.com/project/badge/Grade/a555b98bda7444d8afcd06963178193d
   :alt: Codacy Badge
   :target: https://app.codacy.com/gh/INGInious/INGInious/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade
.. image:: https://app.codacy.com/project/badge/Coverage/a555b98bda7444d8afcd06963178193d
   :alt: Codacy coverage Badge
   :target: https://app.codacy.com/gh/INGInious/INGInious/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_Coverage
.. image:: https://github.com/INGInious/INGInious/actions/workflows/ci.yml/badge.svg
   :target: https://github.com/INGInious/INGInious/actions
.. image:: https://readthedocs.org/projects/inginious/badge/?version=latest
   :target: https://readthedocs.org/projects/inginious/?badge=latest
.. image:: https://weblate.info.ucl.ac.be/widgets/inginious/-/frontend/svg-badge.svg
   :target: https://weblate.info.ucl.ac.be/engage/inginious/?utm_source=widget

INGInious is an intelligent grader that allows secured and automated testing of code made by students.

It is written in Python and uses Docker_ to run student's code inside a secured environment.

INGInious provides a backend which manages interaction with Docker and grade code, and a frontend which allows students to submit their code in a simple and beautiful interface. The frontend also includes a simple administration interface that allows teachers to check the progression of their students and to modify exercices in a simple way.

INGInious can be used as an external grader for Moodle or edX. The course `Constraint Programming`_ uses INGInious to correct students' code.

.. _Docker: https://www.docker.com/
.. _Constraint Programming: https://www.edx.org/learn/computer-programming/universite-catholique-de-louvain-constraint-programming

How to install?
---------------

Simply run:

.. code-block::

   $ docker compose up --build

And access https://localhost in your browser.

*The default login and password are* ``superadmin``.

You may alternatively add ``127.0.0.1 inginious.local`` to your ``/etc/hosts`` file and access https://inginious.local in your browser.

The superadmin account is configurable at the database instantiation through 6 environment variables to specify in the `docker-compose.yml` file:

* INGINIOUS_SUPERADMIN_PASSWORD: Sepcifies the superadmin password. **MUST BE ENCODED WITH argon2id.**
* INGINIOUS_SUPERADMIN_USERNAME: Defines the superadmin username. Defaults to `"superadmin"` if not provided.
* INGINIOUS_SUPERADMIN_REALNAME: Defines the superadmin real name. Defaults to `"INGInious superadmin"` if not provided.
* INGINIOUS_SUPERADMIN_EMAIL: Defines the superadmin email address. Defaults to `"superadmin@inginious.org"`.
* INGINIOUS_SUPERADMIN_LANG: Defines the superadmin language. Defaults to `"en"`.
* INIGNIOUS_SUPERADMIN_INDENT: Defines the text indentation (in number of spaces) for the superadmin account. Defaults to `"4"`.

Currently supported **INGINIOUS_SUPERADMIN_LANG** values are:

======= ========
Code    Language
======= ========
`en`    English
`el`    Greek
`es`    Spanish
`fr`    French
`he`    Hebrew
`nl`    Dutch
`nb_NO` Norwegian
`pt`    Portuguese
`vi`    Vietnamese
======= ========

Currently supported **INGINIOUS_SUPERADMIN_INDENT** values are: "2", "3", "4" and "tabs".

.. _Caddyfile documentation: https://caddyserver.com/docs/caddyfile

The INGInious frontend is exposed via the Caddy reverse proxy. A sample configuration file is located at `deploy/Caddyfile`.
Refer to the `Caddyfile documentation`_ for more advanced proxy configuration.

The ``--build`` argument is optional, use it if you want to rebuild locally the core containers.
If you want to simply pull them from the project's registry, this argument is not required.

*Note that you can override the registry and containers version by setting the `REGISTRY` and `VERSION` environment variables.*

Docker-compose will create a ``tasks`` folder if it does not exist already.

You can then add new courses to your fresh INGInious instance by installing them in the ``tasks`` folder.

For example, the INGInious tutorial course is installed with the following commands:

.. code-block::

   $ git clone https://github.com/INGInious/demo-tasks.git
   $ mv demo-tasks/tutorial tasks/

*If you encounter permission errors, you should run the following command:*

.. code-block::

   $ sudo chown -R <your_user>:<your_user_group> tasks

*This can happen when the tasks directory is created by docker-compose.*

Note that the ``configuration.deploy.yaml`` file provided is a sample configuration, the secret key **must** be changed by administrators in production deployments.

.. _env-base: https://github.com/INGInious/INGInious/tree/main/base-containers/base
.. _env-default: https://github.com/INGInious/INGInious/tree/main/base-containers/default

The provided ``docker-compose.yaml`` file builds from sources the basic grading environments `env-base`_ and `env-default`_.
It also pulls from the project's registry a basic ``python3`` grading environment.
These three environments are sufficient for a simple INGInious deployment.

Administrators can add grading environments to their instance either by adding them statically to the ``docker-compose.yaml`` file or by pulling them manually from the container registry.

.. _Manual installation: https://docs.inginious.org/en/latest/admin_doc/install_doc/installation.html

`Manual installation`_ is also possible with pip.

Documentation
-------------

The documentation is available on Read the Docs:

- For the latest published version on PyPI : https://docs.inginious.org/
- For the master (dev) branch (not always up to date) : http://docs.inginious.org/en/latest/index.html

On Linux, run ``make html`` in the directory ``/doc`` to create a html version of the documentation.

Roadmap
-------

INGInious is continuously improved. The various Work In Progress tasks are described in the Roadmap_ of the project.
 
 .. _Roadmap: https://github.com/UCL-INGI/INGInious/wiki/Roadmap
 
Notes on security
-----------------

Docker containers can be used securely with SELinux enabled. Please do not run untrusted code without activating SELinux.

