rowdump


Namerowdump JSON
Version 0.1.0 PyPI version JSON
download
home_pageNone
SummaryA modern structured Python library for formatted table output
upload_time2025-07-11 03:40:17
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseNone
keywords console formatting output table
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # RowDump

A modern, structured, no-dependency Python library for formatted table output
with support for custom formatting, ASCII box drawing, and flexible column
definitions.

## Features

- **Structured table output** with customizable column definitions
- **ASCII box drawing** for beautiful table borders
- **Header separators** with optional line between header and data
- **Custom formatters** for data transformation
- **Automatic text truncation** with configurable suffixes
- **DateTime formatting** with RFC3339 support
- **Custom delimiters** and output functions
- **Empty value handling** with custom placeholders
- **Multiple table support** with automatic table management

## Installation

```bash
pip install rowdump
```

**Requirements:** Python 3.10+

## Quick Start

```python
from datetime import datetime
from rowdump import Column, Dump

# Create a dump instance
dump = Dump()

# Define columns
columns = [
    Column("id", "ID", int, 5),
    Column("name", "Name", str, 15),
    Column("age", "Age", int, 3),
    Column("city", "City", str, 12),
]

# Set columns and print header
dump.cols(columns)

# Add rows
dump.row({"id": 1, "name": "Alice", "age": 30, "city": "New York"})
dump.row({"id": 2, "name": "Bob", "age": 25, "city": "San Francisco"})
dump.row({"id": 3, "name": "Charlie", "age": 35, "city": "Los Angeles"})

# Close table and print summary
dump.close()
```

Output:
```
ID    Name            Age City        
1     Alice           30  New York    
2     Bob             25  San Franc...
3     Charlie         35  Los Angeles 
Total rows: 3
```

## ASCII Box Formatting

```python
dump = Dump(ascii_box=True)

columns = [
    Column("product", "Product", str, 20),
    Column("price", "Price", float, 10),
    Column("stock", "Stock", int, 8),
]

dump.cols(columns)
dump.row({"product": "Laptop", "price": 999.99, "stock": 15})
dump.row({"product": "Mouse", "price": 25.50, "stock": 100})
dump.close()
```

Output:
```
┌────────────────────┬──────────┬────────┐
│Product             │Price     │Stock   │
├────────────────────┼──────────┼────────┤
│Laptop              │999.99    │15      │
│Mouse               │25.5      │100     │
└────────────────────┴──────────┴────────┘
Total rows: 2
```

## Custom Formatters

```python
def currency_formatter(value):
    if value is None:
        return "$0.00"
    return f"${value:.2f}"

dump = Dump(ascii_box=True)

columns = [
    Column("item", "Item", str, 12),
    Column("price", "Price", float, 10, formatter=currency_formatter),
    Column("quantity", "Qty", int, 5),
]

dump.cols(columns)
dump.row({"item": "Coffee", "price": 4.50, "quantity": 2})
dump.row({"item": "Water", "price": None, "quantity": 3})
dump.close()
```

## DateTime Formatting

```python
dump = Dump(delimiter=" | ")

columns = [
    Column("event", "Event", str, 15),
    Column("timestamp", "Timestamp", datetime, 20),
    Column("status", "Status", str, 10),
]

dump.cols(columns)
dump.row({
    "event": "User Login",
    "timestamp": datetime(2024, 1, 15, 10, 30, 0),
    "status": "Success"
})
dump.close()
```

Output:
```
Event           | Timestamp            | Status    
--------------- | -------------------- | ----------
User Login      | 2024-01-15T10:30:00Z | Success   
Total rows: 1
```

## Header Separators

```python
# With separator (default)
dump = Dump()
columns = [Column("name", "Name", str, 10), Column("status", "Status", str, 8)]
dump.cols(columns)
dump.row({"name": "Alice", "status": "Active"})
dump.close()

# Without separator
dump = Dump(header_separator=False)
dump.cols(columns)
dump.row({"name": "Bob", "status": "Inactive"})
dump.close()
```

Output:
```
Name       Status  
---------- --------
Alice      Active  
Total rows: 1

Name       Status  
Bob        Inactive
Total rows: 1
```

## API Reference

### Column Class

```python
Column(
    name: str,
    display_name: str | None = None,
    type: type = str,
    width: int = 20,
    empty_value: str = "",
    truncate_suffix: str = "...",
    formatter: Callable[[Any], str] | None = None,
)
```

- `name`: Column name (used as dictionary key)
- `display_name`: Header display name (defaults to name)
- `type`: Data type (used for default formatting)
- `width`: Maximum column width
- `empty_value`: Value to display for None/empty values
- `truncate_suffix`: Suffix for truncated values
- `formatter`: Custom formatting function

### Dump Class

```python
Dump(
    delimiter: str = " ",
    ascii_box: bool = False,
    output_fn: Callable[[str], None] | None = None,
    header_separator: bool = True,
)
```

- `delimiter`: Separator between columns
- `ascii_box`: Enable ASCII box drawing
- `output_fn`: Custom output function (defaults to print)
- `header_separator`: Print separator line between header and data rows

#### Methods

- `cols(columns: Sequence[Column])`: Set columns and print header
- `row(data: dict[str, Any])`: Print a data row
- `close(summary: bool = True)`: Close table and optionally print summary

## License

MIT License

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "rowdump",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "console, formatting, output, table",
    "author": null,
    "author_email": "Mark Jen <markjen@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/92/13/50f8f750d61e620dbfbbfd603b0c2e498f6f8c435ed158b66d48b8698d66/rowdump-0.1.0.tar.gz",
    "platform": null,
    "description": "# RowDump\n\nA modern, structured, no-dependency Python library for formatted table output\nwith support for custom formatting, ASCII box drawing, and flexible column\ndefinitions.\n\n## Features\n\n- **Structured table output** with customizable column definitions\n- **ASCII box drawing** for beautiful table borders\n- **Header separators** with optional line between header and data\n- **Custom formatters** for data transformation\n- **Automatic text truncation** with configurable suffixes\n- **DateTime formatting** with RFC3339 support\n- **Custom delimiters** and output functions\n- **Empty value handling** with custom placeholders\n- **Multiple table support** with automatic table management\n\n## Installation\n\n```bash\npip install rowdump\n```\n\n**Requirements:** Python 3.10+\n\n## Quick Start\n\n```python\nfrom datetime import datetime\nfrom rowdump import Column, Dump\n\n# Create a dump instance\ndump = Dump()\n\n# Define columns\ncolumns = [\n    Column(\"id\", \"ID\", int, 5),\n    Column(\"name\", \"Name\", str, 15),\n    Column(\"age\", \"Age\", int, 3),\n    Column(\"city\", \"City\", str, 12),\n]\n\n# Set columns and print header\ndump.cols(columns)\n\n# Add rows\ndump.row({\"id\": 1, \"name\": \"Alice\", \"age\": 30, \"city\": \"New York\"})\ndump.row({\"id\": 2, \"name\": \"Bob\", \"age\": 25, \"city\": \"San Francisco\"})\ndump.row({\"id\": 3, \"name\": \"Charlie\", \"age\": 35, \"city\": \"Los Angeles\"})\n\n# Close table and print summary\ndump.close()\n```\n\nOutput:\n```\nID    Name            Age City        \n1     Alice           30  New York    \n2     Bob             25  San Franc...\n3     Charlie         35  Los Angeles \nTotal rows: 3\n```\n\n## ASCII Box Formatting\n\n```python\ndump = Dump(ascii_box=True)\n\ncolumns = [\n    Column(\"product\", \"Product\", str, 20),\n    Column(\"price\", \"Price\", float, 10),\n    Column(\"stock\", \"Stock\", int, 8),\n]\n\ndump.cols(columns)\ndump.row({\"product\": \"Laptop\", \"price\": 999.99, \"stock\": 15})\ndump.row({\"product\": \"Mouse\", \"price\": 25.50, \"stock\": 100})\ndump.close()\n```\n\nOutput:\n```\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502Product             \u2502Price     \u2502Stock   \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502Laptop              \u2502999.99    \u250215      \u2502\n\u2502Mouse               \u250225.5      \u2502100     \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\nTotal rows: 2\n```\n\n## Custom Formatters\n\n```python\ndef currency_formatter(value):\n    if value is None:\n        return \"$0.00\"\n    return f\"${value:.2f}\"\n\ndump = Dump(ascii_box=True)\n\ncolumns = [\n    Column(\"item\", \"Item\", str, 12),\n    Column(\"price\", \"Price\", float, 10, formatter=currency_formatter),\n    Column(\"quantity\", \"Qty\", int, 5),\n]\n\ndump.cols(columns)\ndump.row({\"item\": \"Coffee\", \"price\": 4.50, \"quantity\": 2})\ndump.row({\"item\": \"Water\", \"price\": None, \"quantity\": 3})\ndump.close()\n```\n\n## DateTime Formatting\n\n```python\ndump = Dump(delimiter=\" | \")\n\ncolumns = [\n    Column(\"event\", \"Event\", str, 15),\n    Column(\"timestamp\", \"Timestamp\", datetime, 20),\n    Column(\"status\", \"Status\", str, 10),\n]\n\ndump.cols(columns)\ndump.row({\n    \"event\": \"User Login\",\n    \"timestamp\": datetime(2024, 1, 15, 10, 30, 0),\n    \"status\": \"Success\"\n})\ndump.close()\n```\n\nOutput:\n```\nEvent           | Timestamp            | Status    \n--------------- | -------------------- | ----------\nUser Login      | 2024-01-15T10:30:00Z | Success   \nTotal rows: 1\n```\n\n## Header Separators\n\n```python\n# With separator (default)\ndump = Dump()\ncolumns = [Column(\"name\", \"Name\", str, 10), Column(\"status\", \"Status\", str, 8)]\ndump.cols(columns)\ndump.row({\"name\": \"Alice\", \"status\": \"Active\"})\ndump.close()\n\n# Without separator\ndump = Dump(header_separator=False)\ndump.cols(columns)\ndump.row({\"name\": \"Bob\", \"status\": \"Inactive\"})\ndump.close()\n```\n\nOutput:\n```\nName       Status  \n---------- --------\nAlice      Active  \nTotal rows: 1\n\nName       Status  \nBob        Inactive\nTotal rows: 1\n```\n\n## API Reference\n\n### Column Class\n\n```python\nColumn(\n    name: str,\n    display_name: str | None = None,\n    type: type = str,\n    width: int = 20,\n    empty_value: str = \"\",\n    truncate_suffix: str = \"...\",\n    formatter: Callable[[Any], str] | None = None,\n)\n```\n\n- `name`: Column name (used as dictionary key)\n- `display_name`: Header display name (defaults to name)\n- `type`: Data type (used for default formatting)\n- `width`: Maximum column width\n- `empty_value`: Value to display for None/empty values\n- `truncate_suffix`: Suffix for truncated values\n- `formatter`: Custom formatting function\n\n### Dump Class\n\n```python\nDump(\n    delimiter: str = \" \",\n    ascii_box: bool = False,\n    output_fn: Callable[[str], None] | None = None,\n    header_separator: bool = True,\n)\n```\n\n- `delimiter`: Separator between columns\n- `ascii_box`: Enable ASCII box drawing\n- `output_fn`: Custom output function (defaults to print)\n- `header_separator`: Print separator line between header and data rows\n\n#### Methods\n\n- `cols(columns: Sequence[Column])`: Set columns and print header\n- `row(data: dict[str, Any])`: Print a data row\n- `close(summary: bool = True)`: Close table and optionally print summary\n\n## License\n\nMIT License\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "A modern structured Python library for formatted table output",
    "version": "0.1.0",
    "project_urls": {
        "Homepage": "https://github.com/markjen/rowdump",
        "Issues": "https://github.com/markjen/rowdump/issues",
        "Repository": "https://github.com/markjen/rowdump"
    },
    "split_keywords": [
        "console",
        " formatting",
        " output",
        " table"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c71d8c89926d510d0b9ffbb9fd8ce254c41909d9f19dcf627b8725f3c13ad198",
                "md5": "3289388bd54f48c072fe255bc2d27a74",
                "sha256": "0c565802e5900b514dffdd4d9e09212ecaa738c91a0402e763bec0b16d8b7fd2"
            },
            "downloads": -1,
            "filename": "rowdump-0.1.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "3289388bd54f48c072fe255bc2d27a74",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 6235,
            "upload_time": "2025-07-11T03:40:14",
            "upload_time_iso_8601": "2025-07-11T03:40:14.387758Z",
            "url": "https://files.pythonhosted.org/packages/c7/1d/8c89926d510d0b9ffbb9fd8ce254c41909d9f19dcf627b8725f3c13ad198/rowdump-0.1.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "921350f8f750d61e620dbfbbfd603b0c2e498f6f8c435ed158b66d48b8698d66",
                "md5": "b52157eaac260d403bd69470ed6e36f7",
                "sha256": "62cdb83ab7f67f6dffb58cbe8ca772ad76a968fc6c5c01a8fc66829f475a6bc3"
            },
            "downloads": -1,
            "filename": "rowdump-0.1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "b52157eaac260d403bd69470ed6e36f7",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 22264,
            "upload_time": "2025-07-11T03:40:17",
            "upload_time_iso_8601": "2025-07-11T03:40:17.415427Z",
            "url": "https://files.pythonhosted.org/packages/92/13/50f8f750d61e620dbfbbfd603b0c2e498f6f8c435ed158b66d48b8698d66/rowdump-0.1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-11 03:40:17",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "markjen",
    "github_project": "rowdump",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "rowdump"
}
        
Elapsed time: 0.49150s