Skip to main content

Collection of convenience functions used in Python packages and scripts.

Project description

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.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). Return True if a TCP connection to the given host and port succeeds within timeout seconds.

nclutils.text_processing

  • 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_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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nclutils-3.0.0.tar.gz (38.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nclutils-3.0.0-py3-none-any.whl (45.3 kB view details)

Uploaded Python 3

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

Hashes for nclutils-3.0.0.tar.gz
Algorithm Hash digest
SHA256 557ac33872419039c0abba8ffe7e1a886e96076d47350ae5f1135799a9c4b365
MD5 b649c7976e37843b1dd5c5ca869ddcc4
BLAKE2b-256 09c14e1c6c9a9c0803d412d83f6a45028d3b4a3db1f4e54f0bea844ec0cb5d7c

See more details on using hashes here.

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

Hashes for nclutils-3.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a53103f9e6a79eecc5783847bcbcc0e52cf9b36d8f7d2f4a27cc697a6db45c97
MD5 de6e8290192a9a68f5ad305246e1deb2
BLAKE2b-256 266adeff029b4494dd9cef3c08af64c689bd508242640f06467294fbe6eb784d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page