Collection of convenience functions used in Python packages and scripts.
Project description
nclutils
A grab-bag of small convenience helpers I reach for again and again across my Python scripts and packages: filesystem operations, shell execution, string transformations, console output, interactive prompts, and a few odds and ends.
Comprehensive tests are included, but this package is written and maintained for my own use. No guarantees are made about API stability or correctness for your use case.
Quick example
from pathlib import Path
from nclutils import pp
from nclutils.fs import copy_file, find_files
from nclutils.strings import snake_case
pp.info("collecting Python sources")
with pp.step("copying files") as s:
for src in find_files(Path("src"), globs=["*.py"]):
dst = Path("backup") / src.name
copy_file(src, dst)
s.sub(f"copied {src.name}")
pp.success(f"normalized name: {snake_case('Hello World')}")
Installation
Requires Python 3.10 or newer.
# With uv
uv add nclutils
# With pip
pip install nclutils
The package brings in two runtime dependencies: questionary and rich.
Importing
Each module is imported from its submodule. The pretty-printing helpers are namespaced under pp:
from nclutils import pp
pp.info("hello")
pp.success("done")
Other modules follow the same pattern:
from nclutils.fs import copy_file, find_files
from nclutils.network import network_available
from nclutils.questions import choose_one_from_list
from nclutils.sh import run_command, run_interactive, which, CompletedCommand, ShellCommandError
from nclutils.strings import camel_case, deburr
from nclutils.text_processing import replace_in_file
from nclutils.utils import iso_timestamp, unique_id
Individual pp symbols can also be imported directly when that reads better at the call site:
from nclutils.pp import info, success
Modules
The larger modules have their own documentation pages. Smaller modules are listed inline below. Function signatures live with the source; consult docstrings (help(func) or your editor's hover) for authoritative argument details.
| Module | Summary | Docs |
|---|---|---|
nclutils.fs |
Copy, back up, search, and visualize the filesystem. | docs/fs.md |
nclutils.network |
Lightweight network reachability check. | (inline below) |
nclutils.pp |
Rich-based console output, verbosity gates, file logger. | docs/pp.md |
nclutils.questions |
Single- and multi-select prompts via questionary. |
docs/questions.md |
nclutils.sh |
Run commands via subprocess; returns CompletedCommand, raises typed errors (ShellCommandError hierarchy). Includes run_command, run_interactive, which. |
docs/shell_commands.md |
nclutils.strings |
Case conversions, padding, tokenizing, normalization. | docs/strings.md |
nclutils.text_processing |
In-place file edits. | (inline below) |
nclutils.utils |
Timestamps, unique IDs, Python version check. | docs/utils.md |
nclutils.network
network_available(address="8.8.4.4", port=53, timeout=5). ReturnTrueif a TCP connection to the given host and port succeeds withintimeoutseconds.
nclutils.text_processing
replace_in_file(path, replacements, *, use_regex=False). Apply a dict of replacements to a file in place. ReturnsTrueif the file changed.ensure_lines_in_file(path, lines, *, at_top=False). Add lines to a file if they aren't already present. ReturnsTrueif the file changed.
from nclutils.text_processing import ensure_lines_in_file, replace_in_file
replace_in_file("config.toml", {"old": "new"})
# Regex mode (each key is a pattern; matches use re.MULTILINE)
replace_in_file("config.toml", {r"^old": "new"}, use_regex=True)
ensure_lines_in_file(".gitignore", [".env", "*.pyc"])
Diagnostic logging
Internal modules (nclutils.fs, nclutils.text_processing) emit diagnostic messages through the stdlib logging module under their own logger names. By default these are silent. Attach a handler in your application to see them:
import logging
logging.basicConfig(level=logging.WARNING)
# or, narrower:
logging.getLogger("nclutils").setLevel(logging.DEBUG)
This is separate from nclutils.pp, which writes to the console (and optionally a logfile) using its own machinery.
Contributing
See CONTRIBUTING.md for development setup, task runner commands, and the commit workflow.
License
MIT. See LICENSE.
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 nclutils-3.0.0.tar.gz.
File metadata
- Download URL: nclutils-3.0.0.tar.gz
- Upload date:
- Size: 38.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
557ac33872419039c0abba8ffe7e1a886e96076d47350ae5f1135799a9c4b365
|
|
| MD5 |
b649c7976e37843b1dd5c5ca869ddcc4
|
|
| BLAKE2b-256 |
09c14e1c6c9a9c0803d412d83f6a45028d3b4a3db1f4e54f0bea844ec0cb5d7c
|
File details
Details for the file nclutils-3.0.0-py3-none-any.whl.
File metadata
- Download URL: nclutils-3.0.0-py3-none-any.whl
- Upload date:
- Size: 45.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a53103f9e6a79eecc5783847bcbcc0e52cf9b36d8f7d2f4a27cc697a6db45c97
|
|
| MD5 |
de6e8290192a9a68f5ad305246e1deb2
|
|
| BLAKE2b-256 |
266adeff029b4494dd9cef3c08af64c689bd508242640f06467294fbe6eb784d
|