in cli/srecli/group/__init__.py [0:0]
def prepare_value(self, value: str | list | dict | None) -> str:
"""
Makes the given value human-readable. Should be applied only for
table view since it can reduce the total amount of useful information
within the value in favor of better view.
:param value:
items per column.
:return:
"""
if not value and not isinstance(value, (int, bool)):
return '—'
limit = self._items_per_column
to_limit = limit is not None
f = self.prepare_value
# todo, maybe use just list comprehensions instead of iterators
match value:
case list():
i_recurse = map(f, value)
result = ', '.join(islice(i_recurse, limit))
if to_limit and len(value) > limit:
result += f'... ({len(value)})' # or len(value) - limit
return result
case dict():
i_prepare = (
f'{f(value=k)}: {f(value=v)}'
for k, v in islice(value.items(), limit)
)
result = reduce(lambda a, b: f'{a}; {b}', i_prepare)
if to_limit and len(value) > limit:
result += f'... ({len(value)})'
return result
case str():
try:
obj = isoparse(value)
# we assume that everything from the server is UTC even
# if it is a naive object
obj.replace(tzinfo=timezone.utc)
return obj.astimezone().strftime(self._datetime_format)
except ValueError:
return value
case _: # bool, int
return str(value)