mjooln
Environmentally Friendly File Handling
mjooln is a small, dependency-free Python toolbox for file and folder
handling. Two ideas make it more than a pathlib wrapper:
Atom— a identifier that is unique, sortable, human-readable, and can be found inside arbitrary text just by scanning for its shape.Store— a folder with a persistent identity, so you can find it by name from anywhere on disk without remembering its path.
Install
pip install mjooln
Optional extras:
pip install mjooln[encryption] # AES file encryption
pip install mjooln[yaml] # YAML read/write for File
Quickstart
Atom: identifiers that sort, search, and read like sentences
from mjooln import Atom
a = Atom("sensor")
str(a)
# '20260722T191721u217069Z___sensor___39A238F6_83FE_40DB_BDA5_FABDE915016A'
a.way # 'sensor'
a.time # datetime(2026, 7, 22, 19, 17, 21, ..., tzinfo=timezone.utc)
Atoms sort chronologically as plain strings, and can be found inside arbitrary text -- handy for scanning file names:
Atom.find_one(f"my_file_{a}.json.gz") # == a
Store: a folder you can find by name, from anywhere
from mjooln import Store
store = Store.make("~/projects/my_data")
store.file("readme.txt").write("hello")
# ... later, from anywhere, without knowing the path:
same_store = Store.get("my_data")
[f.name for f in same_store.list()]
# ['readme.txt']
Store is a subclass of Folder, so it behaves like one -- list(),
file(), walk(), etc. all work directly on it.
Folder and File: everyday file handling
from mjooln import Folder
fo = Folder("~/projects/my_data")
fi = fo.file("data.json")
fi.write_json({"hello": "world"})
fi.read_json()
# {'hello': 'world'}
fi = fi.compress() # data.json.gz
fi.checksum() # sha256 hex digest
Modules
core—Atom,Atoms,Toml, settings, exceptionsfilesystem—Path,Folder,File,Store,Serializer,Compressorencryption—Crypt(optional,pip install mjooln[encryption])
See docs/PRINCIPLES.md for the design rationale
behind the project.
License
Apache-2.0. See LICENSE.
Release files for mjooln 0.11.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mjooln-0.11.1.tar.gz | 25.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mjooln-0.11.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 60.3 kB
Release files / mjooln-0.11.1.tar.gz
| Download URL | mjooln-0.11.1.tar.gz |
|---|---|
| Size | 25.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
39bd9cd25050160cc895a7750bce65982eca1c69f0ebc130ab84f90a8dd687d2
|
|
BLAKE2b-256 checksum How to use checksums |
a2a866e4ac628678873160273a78beb0652b0f11fb6fdfff11879e745c8fc5dc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.31 {"installer":{"name":"uv","version":"0.11.31","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / mjooln-0.11.1-py3-none-any.whl
| Download URL | mjooln-0.11.1-py3-none-any.whl |
|---|---|
| Size | 34.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cd2f66a2c7bb4f2e9b4c865f59e013bb1de6e8cc3045d9156385f5b4f2a25826
|
|
BLAKE2b-256 checksum How to use checksums |
0c76dfcc68cb54b12ba492e4352788ef8b74b108ac119504ca8388e212582479
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.31 {"installer":{"name":"uv","version":"0.11.31","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|