Skip to main content

brunns-row

Convenience wrapper for DB API and csv.DictReader rows, and similar, inspired by Greg Stein's lovely dtuple module.

made-with-python Build Status PyPi Version Python Versions Licence GitHub all releases GitHub forks GitHub stars GitHub watchers GitHub contributors GitHub issues GitHub issues-closed GitHub pull-requests GitHub pull-requests closed Codacy Badge Codacy Coverage Documentation Status Lines of Code

Installation

Install with pip:

pip install brunns-row

Or with uv:

uv add brunns-row

Usage

The basic approach is to create a wrapper object from some kind of description - typically a DBAPI cursor's description, or a csv.DictReader's fieldnames attribute - then to use the wrapper's wrap(row) method to wrap each row. wrap(row) returns an object from which you can access the row's fields as attributes. A couple of simple examples:

DB API

cursor = conn.cursor()
cursor.execute("SELECT kind, rating FROM sausages ORDER BY rating DESC;")
wrapper = RowWrapper(cursor.description)
rows = [wrapper.wrap(row) for row in cursor.fetchall()]
for row in rows:
    print(row.kind, row.rating)

csv.DictReader

reader = csv.DictReader(csv_file)
wrapper = RowWrapper(reader.fieldnames)
rows = [wrapper.wrap(row) for row in reader]
for row in rows:
    print(row.kind, row.rating)

Attributes names are simply the column names where possible, converted to valid identifiers where necessary by replacing invalid characters with "_"s, prefixing any leading numerics with "a_", and de-duplicating where necessary by adding numeric suffixes.

Development

This project uses uv for dependency management and development.

Setup

# Install uv if you haven't already
curl -LsSf https://astral.sh/uv/install.sh | sh

# Clone and setup
git clone https://github.com/brunns/brunns-row.git
cd brunns-row
uv sync --all-extras

Common Commands

# Run tests
make test

# Run tests with coverage
make coverage

# Format code
make format

# Lint
make lint

# Type check
make typecheck

# Build docs
make docs

# Run all pre-commit checks
make precommit

For more options:

make help

Releasing

Releases are automated via GitHub Actions. To release version n.n.n:

  1. Update version in pyproject.toml (using uv version --bump major|minor|patch) and docs/conf.py.
  2. Run make precommit to ensure all checks pass
  3. Commit and tag:
    version=`uv version --short`
    git pull -r
    git commit -am "Release v$version"
    git tag "v$version"
    git push origin master --tags
    

The GitHub Actions workflow will automatically:

  • Run tests and coverage checks
  • Build distribution packages
  • Publish to PyPI (using OIDC trusted publishing)
  • Create a GitHub release with auto-generated notes

Metadata

Release files for brunns-row 2.3.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 brunns-row 2.3.0
File Size Uploaded
brunns_row-2.3.0.tar.gz 78.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for brunns-row 2.3.0
File Interpreter ABI Platform
brunns_row-2.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 85.0 kB

Release files / brunns_row-2.3.0.tar.gz

Download URL brunns_row-2.3.0.tar.gz
Size 78.8 kB
Tags Source
SHA-256 checksum
How to use checksums
8dbdcbd6b3e6d1735e875b73cbadfce9c2d39f42d25578783968535088515cf3
BLAKE2b-256 checksum
How to use checksums
72852914165f98037613245a74bf93d745a0077f7d443bca361f9a8d1a92ca9c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.

Transparency log

Release files / brunns_row-2.3.0-py3-none-any.whl

Download URL brunns_row-2.3.0-py3-none-any.whl
Size 6.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2846213ab5e9296603cd28a01107ab73c33f374ea4d8a998b921625ba2507f72
BLAKE2b-256 checksum
How to use checksums
7598b9681e5a9bcefd79dd27b2a8f224bf7e74d8f0badb0ba4df38fe7069a811
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.

Transparency log

Release history Release notifications | RSS feed

2.3.1

2 release files

This release

2.3.0 This release

2 release files

2.2.0

2 release files

2.1.1

2 release files

2.1.0

2 release files

2.0.0

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.1

2 release files

1.0.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