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.12.0
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.12.0.tar.gz | 34.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mjooln-0.12.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 79.5 kB
Release files / mjooln-0.12.0.tar.gz
| Download URL | mjooln-0.12.0.tar.gz |
|---|---|
| Size | 34.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
57db7a337861d7f30c7c4567a0fcf32a7e514d336d650451cf0e367ea88b512e
|
|
BLAKE2b-256 checksum How to use checksums |
9f45d12181297e4b61c6661288c38927b282666b0c1f246126811cb805979e03
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.4 {"installer":{"name":"uv","version":"0.12.4","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.12.0-py3-none-any.whl
| Download URL | mjooln-0.12.0-py3-none-any.whl |
|---|---|
| Size | 45.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8aab189e22462617efe4724b5c164a9141287cf7f660439c1dbde6de8caa669a
|
|
BLAKE2b-256 checksum How to use checksums |
e89e1380769dff5547e2a8efea24dc92fd3aeab8f3bba1a2f7618aee1b3eb352
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.4 {"installer":{"name":"uv","version":"0.12.4","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}
|