justin_utils
Shared utility library for the Justin Python ecosystem. Provides reusable building blocks for filesystem operations, CLI tooling, functional sequences, EXIF handling, and more — designed to be installed as a lightweight dependency across multiple projects.
Requirements
Python 3.11+
Installation
pip install justin_utils
To install only specific modules and their dependencies, use extras:
pip install "justin_utils[filesystem]"
pip install "justin_utils[exif,sources]"
For development:
pip install -e ".[test]"
CLI tools
Two command-line utilities are installed as entry points:
parts — manages numbered folder structures (01.name, 02.name, …):
parts make <count> create N numbered folders
parts renumber renumber existing parts sequentially
parts offset <n> shift all part indices by n
sf — moves files into a named subfolder:
sf <subfolder>
Modules
cli
Lightweight argparse wrapper: App, Command, Action, Parameter. Supports multi-action commands and typed parameters.
data
DataSize and DataSpeed with human-readable formatting (B/KB/MB/GB and per-second variants).
exif
EXIF metadata extraction from image files via Pillow and the exif library. parse_exif auto-selects the parser by file extension. exif_sorted sorts a sequence of paths by date taken.
filesystem
File and Folder wrappers over pathlib.Path with move/copy/rename operations, cross-drive detection, and recursive tree handling. RelativeFileset preserves relative paths when moving groups of files.
joins
SQL-style join operations over arbitrary iterables: inner, left, right, full_outer.
json_migration
JsonMigrator applies versioned migrations to JSON objects in order, updating the stored version key after each step.
pylinq
Lazy Sequence wrapper with a LINQ-style API: filter, map, flat_map, group_by, distinct, take, skip, reduce, any, and terminal operations like to_list, to_dict, to_set.
singleton
Singleton abstract base class. Subclasses get a single cached instance via .instance().
sources
Photo source abstraction: groups raw files (NEF, RAF, ARW) with their XMP sidecar metadata, and JPEG/TIFF/DNG/HEIC files with embedded metadata. parse_sources returns a flat list of Source objects ready for sorting or moving.
time_formatter
format_time(delta) — formats a timedelta as a human-readable string ("X h", "Y m", "Z s").
transfer
TransferSpeedMeter tracks a rolling transfer speed over recent history. TransferTimeEstimator estimates remaining time given current speed and remaining size.
util
General-purpose functions: sequence operations (distinct, flatten_lazy, group_by, stride, first), date/time parsing, BFS traversal, user prompts (ask_for_permission, ask_for_choice), and keydefaultdict — a dict subclass with a key-dependent default factory.
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 justin_utils-0.3.0.tar.gz.
File metadata
- Download URL: justin_utils-0.3.0.tar.gz
- Upload date:
- Size: 31.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
788cee2f4b538c2fb38d9df1741b5c3b14f054b209f2ac8731230716d913968c
|
|
| MD5 |
40f3b9d156180e348cf9840a39e521db
|
|
| BLAKE2b-256 |
8476c1821912fe965bf4bebba19e1f6222855ac3b30b1f4074ebbfa25bb03909
|
Provenance
The following attestation bundles were made for justin_utils-0.3.0.tar.gz:
Publisher:
release.yml on djachenko/justin_utils
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
justin_utils-0.3.0.tar.gz -
Subject digest:
788cee2f4b538c2fb38d9df1741b5c3b14f054b209f2ac8731230716d913968c - Sigstore transparency entry: 2278871181
- Sigstore integration time:
-
Permalink:
djachenko/justin_utils@d2f8f95fced1fbd2de1d9b1a8a743a1501b663a2 -
Branch / Tag:
refs/heads/master - Owner: https://github.com/djachenko
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d2f8f95fced1fbd2de1d9b1a8a743a1501b663a2 -
Trigger Event:
push
-
Statement type:
File details
Details for the file justin_utils-0.3.0-py3-none-any.whl.
File metadata
- Download URL: justin_utils-0.3.0-py3-none-any.whl
- Upload date:
- Size: 22.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b20897bc0036ef263424d30609cede499ff2e204c92c96422ffc523da1b7531b
|
|
| MD5 |
85713e6a802631f75bec00f0f0488e37
|
|
| BLAKE2b-256 |
bdb22e74ad06b7a3e53a475d7895f96ee15478e3a42804a64c370a78a48280fc
|
Provenance
The following attestation bundles were made for justin_utils-0.3.0-py3-none-any.whl:
Publisher:
release.yml on djachenko/justin_utils
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
justin_utils-0.3.0-py3-none-any.whl -
Subject digest:
b20897bc0036ef263424d30609cede499ff2e204c92c96422ffc523da1b7531b - Sigstore transparency entry: 2278871198
- Sigstore integration time:
-
Permalink:
djachenko/justin_utils@d2f8f95fced1fbd2de1d9b1a8a743a1501b663a2 -
Branch / Tag:
refs/heads/master - Owner: https://github.com/djachenko
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d2f8f95fced1fbd2de1d9b1a8a743a1501b663a2 -
Trigger Event:
push
-
Statement type: