Auto-load Python modules from an online folder without manual updates
Project description
extirpation
A Python plugin-style library that auto-loads encryption modules from an online/ folder.
Highlights
- Drop-in modules: add a
.pyfile toonline/and it loads automatically. - Recursive discovery for nested module folders.
- Structured load reports with per-module errors.
- Built-in CLI for discovery, diagnostics, capability signatures, version checks, and direct function invocation.
- GitHub Actions CI + automated PyPI publishing on GitHub Release.
Install
pip install extirpation
For local development:
pip install -e .[dev]
Python API
from extirpation import (
list_online_modules,
load_online_modules,
load_online_modules_with_report,
setup,
)
print(list_online_modules("online"))
modules = load_online_modules("online")
print(modules["caesar"].caesar_encrypt("HELLO", shift=3))
report = load_online_modules_with_report("online", recursive=True)
print(report.modules.keys())
print(report.errors)
setup_result = setup("online")
print(len(setup_result.copied), len(setup_result.skipped))
CLI
List modules:
extirpation --online-dir online list
List modules as JSON:
extirpation --online-dir online list --json
Generate JSON load report:
extirpation --online-dir online --recursive --workers 4 report
Use cache for faster repeated inspection commands:
extirpation --online-dir online --cache catalog
Use cache for module listing too:
extirpation --online-dir online --cache list --json
Print installed version:
extirpation version
Invoke a function directly:
extirpation --online-dir online invoke --module caesar --function caesar_encrypt --kwargs "{\"plaintext\":\"HELLO\",\"shift\":3}"
Run a simple encrypt/decrypt flow without knowing exact function names:
extirpation --online-dir online transform --module caesar --mode encrypt --text "HELLO" --params "{\"shift\":3}"
Invoke multiple functions in one call:
extirpation --online-dir online invoke-batch --calls "[{\"module\":\"caesar\",\"function\":\"caesar_encrypt\",\"kwargs\":{\"plaintext\":\"ABC\",\"shift\":3}}]"
Continue batch execution even when one call fails (default), or stop immediately:
extirpation --online-dir online invoke-batch --stop-on-error --calls "[...]"
Show aggregate stats:
extirpation --online-dir online stats
Run a quick health check:
extirpation --online-dir online doctor
Fail CI when health issues are found:
extirpation --online-dir online doctor --fail-on-issues
Clear in-memory cache:
extirpation clear-cache
Benchmark load performance:
extirpation --online-dir online --cache --workers 4 benchmark --iterations 5
Search catalog for matching modules/functions:
extirpation --online-dir online find --query caesar
Inspect one module:
extirpation --online-dir online inspect --module caesar
Validate module contracts:
extirpation --online-dir online validate
Scaffold a new module template:
extirpation --online-dir online scaffold my_new_cipher
Provision bundled modules into your target folder:
extirpation --online-dir online setup
If you're installed from PyPI, setup now provisions modules from package-bundled files.
Export catalog to Markdown:
extirpation --online-dir online export-catalog --format markdown --output docs/catalog.md
Included modules
online/quagmire_iv.pyonline/enigma.py(full Enigma simulation)online/vigenere.pyonline/autokey.pyonline/beaufort.pyonline/caesar.pyonline/baconian.pyonline/binary_cipher.pyonline/atbash.pyonline/affine.pyonline/columnar_transposition.pyonline/xor_cipher.pyonline/rail_fence.pyonline/rot47.pyonline/morse.pyonline/polybius.pyonline/bifid.pyonline/gronsfeld.pyonline/porta.pyonline/trithemius.pyonline/scytale.pyonline/keyword_substitution.pyonline/running_key.pyonline/route_cipher.pyonline/a1z26.pyonline/one_time_pad.pyonline/tap_code.pyonline/reverse_cipher.pyonline/caesar_box.pyonline/base64_cipher.pyonline/pig_latin.pyonline/playfair.pyonline/vernam.pyonline/spiral_route.pyonline/paired_caesar.pyonline/caesar_progressive.pyonline/mirror_chunks.pyonline/hex_cipher.pyonline/rot5.pyonline/rot13.pyonline/reverse_words.pyonline/leetspeak.pyonline/word_caesar.pyonline/rot18.pyonline/chunk_swap.pyonline/vowel_shift.pyonline/hill_cipher.pyonline/double_transposition.pyonline/substitution_monoalpha.pyonline/polyalpha_cycle.pyonline/permutation_blocks.pyonline/fibonacci_shift.pyonline/trinary_cipher.pyonline/zigzag_words.pyonline/caesar_prime.pyonline/base32_cipher.pyonline/keyword_caesar.py
Automated PyPI publishing from GitHub Releases
This repo includes .github/workflows/publish-pypi.yml that publishes automatically when a GitHub Release is published.
One-time setup in PyPI
- Create the project (
extirpation) on PyPI (or use an existing one). - In PyPI, configure Trusted Publishing and add this GitHub repo/workflow.
- In GitHub, ensure the
publishjob can run withid-token: write(already configured).
Release flow
- Merge to your default branch.
- Create and publish a GitHub Release (for example tag
v2.6.1). - GitHub Actions runs tests (
ci.yml), builds distributions, validates them, and publishes to PyPI.
Local packaging checks
python -m build
python -m twine check dist/*
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file extirpation-2.6.1.tar.gz.
File metadata
- Download URL: extirpation-2.6.1.tar.gz
- Upload date:
- Size: 33.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b6c13ae80b68e40ae67aba1b10e9df9bb06c7a652893373db4f9f70cc468edb5
|
|
| MD5 |
e4682d182ce43d1c07d952a682f3e7a5
|
|
| BLAKE2b-256 |
964b3061196ec9a946ef0bf2b5af662b0502f00af40d2bd15ae30868d9c0646d
|
Provenance
The following attestation bundles were made for extirpation-2.6.1.tar.gz:
Publisher:
publish-pypi.yml on burning-calamity/extirpation
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
extirpation-2.6.1.tar.gz -
Subject digest:
b6c13ae80b68e40ae67aba1b10e9df9bb06c7a652893373db4f9f70cc468edb5 - Sigstore transparency entry: 1298523375
- Sigstore integration time:
-
Permalink:
burning-calamity/extirpation@339f4770121ac16c036822731a7548e5fa97d5f3 -
Branch / Tag:
refs/tags/pleaseworkpart2 - Owner: https://github.com/burning-calamity
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@339f4770121ac16c036822731a7548e5fa97d5f3 -
Trigger Event:
release
-
Statement type:
File details
Details for the file extirpation-2.6.1-py3-none-any.whl.
File metadata
- Download URL: extirpation-2.6.1-py3-none-any.whl
- Upload date:
- Size: 49.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
62fafb43597b37c7ff957949c2caad33fc85daa36d0f2ec8f8ac137fb091b669
|
|
| MD5 |
d7fa879e3f2c6aab1bddd4170c6f885d
|
|
| BLAKE2b-256 |
83070d4d453057bae9ed0349e304e85caaf4dcaf665d1c696deb1bfcbf90b1b2
|
Provenance
The following attestation bundles were made for extirpation-2.6.1-py3-none-any.whl:
Publisher:
publish-pypi.yml on burning-calamity/extirpation
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
extirpation-2.6.1-py3-none-any.whl -
Subject digest:
62fafb43597b37c7ff957949c2caad33fc85daa36d0f2ec8f8ac137fb091b669 - Sigstore transparency entry: 1298523488
- Sigstore integration time:
-
Permalink:
burning-calamity/extirpation@339f4770121ac16c036822731a7548e5fa97d5f3 -
Branch / Tag:
refs/tags/pleaseworkpart2 - Owner: https://github.com/burning-calamity
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@339f4770121ac16c036822731a7548e5fa97d5f3 -
Trigger Event:
release
-
Statement type: