Skip to main content

testcell prevents your testing cells from affecting the global namespace

Project description

testcell

TL;DR: %%testcell prevents your testing cells from affecting the global namespace.

The Python cell magic %%testcell executes a cell without polluting the notebook’s global variables. This is useful whenever you want to test your code without having any of the local variables escape that cell.

What’s happening under the hood is that your cell code, before being executed, is wrapped in a temporary function that will be deleted after execution. To give you the feeling of “seamless integration” the last line is optionally wrapped with a display statement if needed.

WARNING: this don’t protect you from the side effects of your code like deleting a file or mutating the state of a global variable.

Install

pip install testcell

How to use

just import it with import testcell and then use the %%testcell cell magic.

%%testcell
a = "'a' is not polluting global scope"
a
"'a' is not polluting global scope"
assert 'a' not in locals()

What is happening under the hood is that %%testcell wraps your cell’s code with a function, execute it and then deletes it. Adding the verbose keywork will print which code will be executed.

%%testcell verbose
a = "'a' is not polluting global scope"
a
### BEGIN
def _test_cell_():
    #| echo: false
    a = "'a' is not polluting global scope"
    display(a)
try:
    _test_cell_()
finally:
    del _test_cell_
### END

"'a' is not polluting global scope"

If you’re just interested in seeing what will be executed, but actually not executing it, you ca use dryrun option:

%%testcell dryrun
a = "'a' is not polluting global scope"
a
### BEGIN
def _test_cell_():
    #| echo: false
    a = "'a' is not polluting global scope"
    display(a)
try:
    _test_cell_()
finally:
    del _test_cell_
### END

On top of wrapping your cell’s code, it will optinally add a display(...) call on your last cell’s row, trying to emulate what a real cell usually does. If you explicitly add a semicolon ; in the end, this output will be suppressed.

%%testcell verbose
a = "'a' is not polluting global scope"
a;
### BEGIN
def _test_cell_():
    #| echo: false
    a = "'a' is not polluting global scope"
    a;
try:
    _test_cell_()
finally:
    del _test_cell_
### END

There are more cases where display(...) is avoided: * display: if this is already present on the last line. * print: even in this case no print is preserved and no other display call is added. * # comment...#: these are preserved

%%testcell verbose
a = "'a' is not polluting global scope"
print(a)
### BEGIN
def _test_cell_():
    #| echo: false
    a = "'a' is not polluting global scope"
    print(a)
try:
    _test_cell_()
finally:
    del _test_cell_
### END
'a' is not polluting global scope

IMPORTANT: this is just wrapping your cell and so it’s still running on your main kernel. If you modify variables that has been created outside of this cell (aka: if you have side effects) this will not protect you.

TODO:

  • Install as a plugin to enable it by default like other cell’s magic.
  • Eval possibility to run code on a new kernel to reduce even more possible side effects.

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

testcell-0.0.1.tar.gz (9.7 kB view details)

Uploaded Source

Built Distribution

testcell-0.0.1-py3-none-any.whl (9.0 kB view details)

Uploaded Python 3

File details

Details for the file testcell-0.0.1.tar.gz.

File metadata

  • Download URL: testcell-0.0.1.tar.gz
  • Upload date:
  • Size: 9.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.8

File hashes

Hashes for testcell-0.0.1.tar.gz
Algorithm Hash digest
SHA256 34a97bdbdc0a6574ab213b0065b0c95c1d5aa50154918f480fe7b0d9f01b6385
MD5 bb22c6a5c005bdbbe9496ed3d47acd65
BLAKE2b-256 ce53ea94b8adb6a767325a39cd20b35ab115c297a9554675945099a9997a6859

See more details on using hashes here.

File details

Details for the file testcell-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: testcell-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 9.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.8

File hashes

Hashes for testcell-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c4f12317211d3a3b53f6799ed8bf1ea3ceee7248593f4f1b06ce0c43850dad92
MD5 d9f53b41fe231f80e1e0fab46d9bca22
BLAKE2b-256 6f684a23d64c3608afb8b46bcec082da37f7fa42e2fc24f0ae7104a0a8659d43

See more details on using hashes here.

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