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.2.tar.gz (9.9 kB view details)

Uploaded Source

Built Distribution

testcell-0.0.2-py3-none-any.whl (9.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: testcell-0.0.2.tar.gz
  • Upload date:
  • Size: 9.9 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.2.tar.gz
Algorithm Hash digest
SHA256 eca81d7f2819eb0c14671b2bc8d5aecdfb17e2611e2e4811f116c6246a947024
MD5 5cd544ae0e436308a8077fb3b305d83d
BLAKE2b-256 795220ebebebc4797e1ad37430c83b0448697b8624d92ba0d1c9f72dd5152a27

See more details on using hashes here.

File details

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

File metadata

  • Download URL: testcell-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 9.2 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 299fbf977de74c4da9e3a43560212497992c9c836ac93ad3fbde39085cf8456c
MD5 dfa780de81b28cdfabc7a4eb425616f3
BLAKE2b-256 6e11ab0d0158b54b3207f03fbe9e9f36dda8f4df778f520eeb1499ff20df0a47

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