Interactive CLI prompts for nested dataclasses.
Project description
dc-input
A tiny, dependency-free library that lets you interactively fill dataclass instances via the command line. Useful for quick data entry, prototyping, or structured configuration; integrates easily with your own CLI tools.
Features
- Supports defaults and nested dataclasses
- Supports custom parsers
- Structures prompts to flow naturally through nested structures
Installation
pip install dc_input
Usage
from dataclasses import dataclass
from datetime import date
from dc_input import from_dataclass
# --- Setup custom parsers as required ---
def _parse_bool(s: str) -> bool:
if s.lower() in ("y", "yes", "1", "true", "t"):
return True
elif s.lower() in ("n", "no", "0", "false", "f"):
return False
raise ValueError(f"Can't parse {s!r}")
parsers = {
bool: _parse_bool,
date: lambda s: date.fromisoformat(s)
}
# --- Example dataclass schema with nesting and defaults ---
@dataclass
class Address:
city: str
postal_code: str
country: str = "Germany"
@dataclass
class Employee:
name: str
birthdate: date
address: Address
active: bool = True
# --- Use the CLI to fill in all values interactively ---
if __name__ == "__main__":
employee = from_dataclass(Employee, parsers=parsers)
print("\n--- Final result ---")
print(employee)
Interactive Session Example
name (str): Alice
birthdate (date): 1982-07-08
active (bool, default=True): 0
address.city (str): Beriln
address.postal_code (str): .. > 💡 Undo previous input.
address.city (str): Berlin
address.postal_code (str): 10084
address.country (str, default=Germany): > 💡 Accept default value.
New data: > 💡 Edit values as needed.
[0] name (str): Alice
[1] birthdate (date): 1982-07-08
[2] active (bool): False
[3] address.city (str): Berlin
[4] address.postal_code (str): 10084
[5] address.country (str): Germany
Change value? (n / {index} {new_value}): 4 10085
New data:
[0] name (str): Alice
[1] birthdate (date): 1982-07-08
[2] active (bool): False
[3] address.city (str): Berlin
[4] address.postal_code (str): 10085
[5] address.country (str): Germany
Change value? (n / {index} {new_value}): n > 💡 Session complete.
Final Result
Employee(
name='Alice',
birthdate=datetime.date(1982, 7, 8),
address=Address(
city='Berlin',
postal_code='10085',
country='Germany'
),
active=False
)
Planned Features
- Support for
attrsandpydantic - Optional JSON/YAML import/export
- Better colorized CLI output
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
dc_input-0.1.2.tar.gz
(4.0 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dc_input-0.1.2.tar.gz.
File metadata
- Download URL: dc_input-0.1.2.tar.gz
- Upload date:
- Size: 4.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0730e63c4900b5cf97b5179ce5683738c24f283a042dcceae50753f741355e65
|
|
| MD5 |
ddbd03e9e879472851c880fcaa102e47
|
|
| BLAKE2b-256 |
0c1fee3fcf7f9db0fe817228a9c6bbb2ddce4eb5dfa53e5ffd17efad9527541d
|
File details
Details for the file dc_input-0.1.2-py3-none-any.whl.
File metadata
- Download URL: dc_input-0.1.2-py3-none-any.whl
- Upload date:
- Size: 4.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c69ea362f9bbf54e774551e767781c9f6bb84851e4b43d536b6895fe428edc60
|
|
| MD5 |
26de836d11f6fad7cd9b77cdb4e4a96d
|
|
| BLAKE2b-256 |
bf01a739058d3f124690a3a50ede67fb319b4ba32b34f1f026d469045f2cc658
|