Skip to main content

PyPI version PyPI - Python Version Tests codecov

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.11 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.ask import choose_one_from_list
from nclutils.fs import copy_file, find_files
from nclutils.net import network_available
from nclutils.sh import run_command, run_interactive, which, CompletedCommand, ShellCommandError
from nclutils.strings import camel_case, deburr
from nclutils.text 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.ask Single- and multi-select prompts via questionary. docs/ask.md
nclutils.fs Copy, back up, search, and visualize the filesystem. docs/fs.md
nclutils.git Git primitives and workflow composites built on nclutils.sh. No third-party git library. docs/git.md
nclutils.net Lightweight network reachability check. (inline below)
nclutils.pp Rich-based console output, verbosity gates, file logger. docs/pp.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, human-readable byte formatting. docs/strings.md
nclutils.text In-place file edits. (inline below)
nclutils.utils Timestamps, unique IDs, Python version check. docs/utils.md

nclutils.net

  • network_available(address="8.8.4.4", port=53, timeout=5). Return True if a TCP connection to the given host and port succeeds within timeout seconds.

nclutils.text

  • replace_in_file(path, replacements, *, use_regex=False). Apply a dict of replacements to a file in place. Returns True if the file changed.
  • ensure_lines_in_file(path, lines, *, at_top=False). Add lines to a file if they aren't already present. Returns True if the file changed.
from nclutils.text 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"])

For coding agents

A bundled reference skill lives in skill/. It's a quick-reference card aimed at AI coding agents working in projects that depend on nclutils: correct import paths, a task-to-module lookup, top gotchas (the pp vs stdlib logging split, sh.run_command error handling, places to reach for nclutils instead of hand-rolling shutil/subprocess/uuid equivalents), with per-module deep dives in skill/references/.

If you use an AI coding agent (Claude Code, Cursor, etc.) in a project that imports nclutils, point it at the skill before it starts editing. For example:

Before writing any code that touches nclutils, read https://raw.githubusercontent.com/natelandau/nclutils/main/skill/SKILL.md. Follow the import patterns and gotchas described there. If a task involves the pp, sh, fs, git, strings, or smaller modules in detail, also read the matching file under https://raw.githubusercontent.com/natelandau/nclutils/main/skill/references/.

Pinning to a tag (e.g. /v3.1.0/skill/SKILL.md) keeps the guidance aligned with whichever version of nclutils the project depends on.

Diagnostic logging

Internal modules (nclutils.fs, nclutils.text) 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.

Metadata

Release files for nclutils 4.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nclutils 4.0.0
File Size Uploaded
nclutils-4.0.0.tar.gz 64.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for nclutils 4.0.0
File Interpreter ABI Platform
nclutils-4.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 137.3 kB

Release files / nclutils-4.0.0.tar.gz

Download URL nclutils-4.0.0.tar.gz
Size 64.6 kB
Tags Source
SHA-256 checksum
How to use checksums
d8a36eb5eb8e722e2a137bb2850f863d623ceca2012bc521e3f45f33b6b522bf
BLAKE2b-256 checksum
How to use checksums
22ec0d75cd99604adb10fb5677de2c54f53d2c061afe4abb2b88b4f390949f53
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / nclutils-4.0.0-py3-none-any.whl

Download URL nclutils-4.0.0-py3-none-any.whl
Size 72.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5ae1b6a7f1249a230c27a1e5ebb908d2561f1a3f92b35151f245152c6ed77b18
BLAKE2b-256 checksum
How to use checksums
c358b31a7eb8e4715cdd20db8ec55287fcca2665e6545db0d8c62746c49a9458
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

4.0.0 This release

2 release files

3.4.4

2 release files

3.4.3

2 release files

3.4.2

2 release files

3.4.1

2 release files

3.4.0

2 release files

3.3.1

2 release files

3.3.0

2 release files

3.2.0

2 release files

3.1.0

2 release files

3.0.1

2 release files

3.0.0

2 release files

2.1.0

2 release files

2.0.0

2 release files

1.1.0

2 release files

1.0.1

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page