27 lines
763 B
Python
27 lines
763 B
Python
from typing import Any, Optional
|
|
|
|
from attrs import evolve, field
|
|
|
|
from cyclopts.utils import UNSET, frozen
|
|
|
|
|
|
@frozen(kw_only=True)
|
|
class Token:
|
|
"""Tracks how a user supplied a value to the application."""
|
|
|
|
keyword: Optional[str] = None
|
|
value: str = ""
|
|
source: str = ""
|
|
index: int = field(default=0, kw_only=True)
|
|
keys: tuple[str, ...] = field(default=(), kw_only=True)
|
|
implicit_value: Any = field(default=UNSET, kw_only=True)
|
|
|
|
@property
|
|
def address(self) -> tuple[tuple[str, ...], int]:
|
|
"""Hashable subkey destination address for this token."""
|
|
return (self.keys, self.index)
|
|
|
|
def evolve(self, **kwargs) -> "Token":
|
|
# TODO: replace return-hint with Self cp311
|
|
return evolve(self, **kwargs)
|