Skip to main content

A restricted configurable Python kernel for exams

Project description

Exam Kernel

PyPi License Documentation Status Ruff Code style: black

A wrapper for the IPython kernel that sanitizes the input before execution.

A more in depth explanation can be found in the docs.

This kernel blocks all magic commands including !.

The libraries a user can use can be restricted by blocking or allowing certain imports. The module importlib is blocked by default.

Installation

pip install exam_kernel
python -m exam_kernel.install --sys-prefix

Configuration

You can configure the kernel via the ipython_config.py. This file is usually located under ~/.ipython.

1. Initialization Code

This is the code that will be executed every time the kernel is initialized and set via the configuration option IPKernelApp.exec_lines.

Example config:

# sample ipython_config.py

c = get_config()

c.IPKernelApp.exec_lines = ['import math', 'import random']

In this example the libraries math and random are imported every time the kernel is initialized, making them available to the user right away.

2. Allowed Imports

If you want to allow the user to only use certain libraries, you can specify them using the allowed_imports configuration option. All other libraries will be blocked by default if this option is set.

Example config:

# sample ipython_config.py

c = get_config()

c.ExamKernel.allowed_imports = ['math', 'numpy', 'scipy']

In this example the student can only import the libraries math, numpy and scipy. If the user tries to import any other library (e.g. matplotlib), he or she will see the following message:

---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-5-041c468338fc> in <module>
----> 1 raise ModuleNotFoundError('No module named matplotlib or matplotlib blocked by kernel.')

ModuleNotFoundError: No module named matplotlib or matplotlib blocked by kernel.

3. Blocked Imports

If you want to block the user from importing certain libraries, but let them use all others, you can use the blocked_imports configuration option.

If the allowed_import option is used, the blocked imports will take no effect.

Example config:

# sample ipython_config.py

c = get_config()

c.ExamKernel.blocked_imports = ['math', 'numpy', 'scipy']

In this example the student can not import the libraries math, numpy and scipy. If the user tries to import a blocked library (e.g. math), he or she will see the following message:

---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-5-041c468338fc> in <module>
----> 1 raise ModuleNotFoundError('No module named math or math blocked by kernel.')

ModuleNotFoundError: No module named math or math blocked by kernel.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

exam_kernel-0.2.0.tar.gz (9.1 kB view hashes)

Uploaded Source

Built Distribution

exam_kernel-0.2.0-py3-none-any.whl (6.6 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page