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.4.tar.gz
(4.1 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.4.tar.gz.
File metadata
- Download URL: dc_input-0.1.4.tar.gz
- Upload date:
- Size: 4.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c1c5794dd4209adc8341720dd2123eb9ee4c4f5029a3a0a7e188ed8ebdaf992e
|
|
| MD5 |
452d48bef321be1df05786d0ed7f0758
|
|
| BLAKE2b-256 |
7a32475a47c67a22dc57ff295522dc8dd6900eb029460a0c4ba08e02620c3401
|
File details
Details for the file dc_input-0.1.4-py3-none-any.whl.
File metadata
- Download URL: dc_input-0.1.4-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 |
0ab872428934d42ebe19a37d53ef2beafb71bdc3d3077f5495eb48976ea427cb
|
|
| MD5 |
38b450aeaae0369ec1a6e2696a123ac8
|
|
| BLAKE2b-256 |
c1705701fa040765a27f9ced287205121ea3202924417b2f228a74f776a912c6
|