Utilities for the Justin project
Project description
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]"
Modules
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.
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.
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.
joins
SQL-style join operations over arbitrary iterables: inner, left, right, full_outer.
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.
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.
transfer
TransferSpeedMeter tracks a rolling transfer speed over recent history. TransferTimeEstimator estimates remaining time given current speed and remaining size.
data
DataSize and DataSpeed with human-readable formatting (B/KB/MB/GB and per-second variants).
time_formatter
format_time(delta) — formats a timedelta as a human-readable string ("X h", "Y m", "Z s").
singleton
Singleton abstract base class. Subclasses get a single cached instance via .instance().
json_migration
JsonMigrator applies versioned migrations to JSON objects in order, updating the stored version key after each step.
cli
Lightweight argparse wrapper: App, Command, Action, Parameter. Supports multi-action commands and typed parameters.
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>
Project details
Release history Release notifications | RSS feed
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.1.1.tar.gz.
File metadata
- Download URL: justin_utils-0.1.1.tar.gz
- Upload date:
- Size: 19.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5ad4e349a0e17588f33ee8a3c9bb41730ec6d6473d62e5ca0800ab0c3d2d659b
|
|
| MD5 |
31675239c24790a5f2b91390e6a05cf3
|
|
| BLAKE2b-256 |
79da1912234193a559f388160ba8795e897794e95dcef0f3d65d245e85b8d500
|
Provenance
The following attestation bundles were made for justin_utils-0.1.1.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.1.1.tar.gz -
Subject digest:
5ad4e349a0e17588f33ee8a3c9bb41730ec6d6473d62e5ca0800ab0c3d2d659b - Sigstore transparency entry: 1978592031
- Sigstore integration time:
-
Permalink:
djachenko/justin_utils@fde17145a77ca35cb6fe6ba7c990341657d8c7a1 -
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@fde17145a77ca35cb6fe6ba7c990341657d8c7a1 -
Trigger Event:
push
-
Statement type:
File details
Details for the file justin_utils-0.1.1-py3-none-any.whl.
File metadata
- Download URL: justin_utils-0.1.1-py3-none-any.whl
- Upload date:
- Size: 20.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 |
54073ae54e02d2a712bd3b4a682b65ccf5c08f552e9358d0f2bd28e5c07aa510
|
|
| MD5 |
7f2de12a92ab21d789908a86bcc05ffb
|
|
| BLAKE2b-256 |
3905056910cf6eecfb7fe31c27fb2a37451091311204b8cdf37e6e2243709da8
|
Provenance
The following attestation bundles were made for justin_utils-0.1.1-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.1.1-py3-none-any.whl -
Subject digest:
54073ae54e02d2a712bd3b4a682b65ccf5c08f552e9358d0f2bd28e5c07aa510 - Sigstore transparency entry: 1978592239
- Sigstore integration time:
-
Permalink:
djachenko/justin_utils@fde17145a77ca35cb6fe6ba7c990341657d8c7a1 -
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@fde17145a77ca35cb6fe6ba7c990341657d8c7a1 -
Trigger Event:
push
-
Statement type: