Name | rowdump JSON |
Version |
0.1.0
JSON |
| download |
home_page | None |
Summary | A modern structured Python library for formatted table output |
upload_time | 2025-07-11 03:40:17 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.10 |
license | None |
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"
}