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,
)
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)
CLI
List modules:
extirpation --online-dir online list
Generate JSON load report:
extirpation --online-dir online --recursive report
Print installed version:
extirpation version
Invoke a function directly:
extirpation --online-dir online invoke --module caesar --function caesar_encrypt --kwargs "{\"plaintext\":\"HELLO\",\"shift\":3}"
Show aggregate stats:
extirpation --online-dir online stats
Search catalog for matching modules/functions:
extirpation --online-dir online find --query caesar
Validate module contracts:
extirpation --online-dir online validate
Scaffold a new module template:
extirpation --online-dir online scaffold my_new_cipher
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.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
v1.7.0). - 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-1.7.0.tar.gz.
File metadata
- Download URL: extirpation-1.7.0.tar.gz
- Upload date:
- Size: 12.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
309031426a66fc885e0dd9970c6e1b687feb8e84b1f0f181c0cab77771c2efd2
|
|
| MD5 |
374f69ac033e40d3b62c8cb0f41ceb0a
|
|
| BLAKE2b-256 |
dc2ec6f91a42d206e24ebfd1cd8f73015e369d16bf840a552fa5f16ab1efe19f
|
Provenance
The following attestation bundles were made for extirpation-1.7.0.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-1.7.0.tar.gz -
Subject digest:
309031426a66fc885e0dd9970c6e1b687feb8e84b1f0f181c0cab77771c2efd2 - Sigstore transparency entry: 1297769980
- Sigstore integration time:
-
Permalink:
burning-calamity/extirpation@307d53140e34ad51204ea8096a897c79a62c2133 -
Branch / Tag:
refs/tags/unstable_betas - Owner: https://github.com/burning-calamity
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@307d53140e34ad51204ea8096a897c79a62c2133 -
Trigger Event:
release
-
Statement type:
File details
Details for the file extirpation-1.7.0-py3-none-any.whl.
File metadata
- Download URL: extirpation-1.7.0-py3-none-any.whl
- Upload date:
- Size: 8.8 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 |
1c4de2925aab24c80f3ac805612339c54ecf893b38f7a09c807f49cd7c7182d1
|
|
| MD5 |
f429606b08b4cd56de5f77c6271a9435
|
|
| BLAKE2b-256 |
94dd7685205742ec9e2f219e2a0d843fbc2604cf355e9a90e444a5a9f37eac13
|
Provenance
The following attestation bundles were made for extirpation-1.7.0-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-1.7.0-py3-none-any.whl -
Subject digest:
1c4de2925aab24c80f3ac805612339c54ecf893b38f7a09c807f49cd7c7182d1 - Sigstore transparency entry: 1297770051
- Sigstore integration time:
-
Permalink:
burning-calamity/extirpation@307d53140e34ad51204ea8096a897c79a62c2133 -
Branch / Tag:
refs/tags/unstable_betas - Owner: https://github.com/burning-calamity
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@307d53140e34ad51204ea8096a897c79a62c2133 -
Trigger Event:
release
-
Statement type: