Source code for warg.generators.mapping_generator
from typing import Any, Callable, Iterable, Mapping, Tuple
__author__ = "Christian Heider Lindbjerg"
__doc__ = r"""
Created on 11/11/2019
"""
__all__ = ["yield_and_map", "inner_map", "kw_map"]
import logging
_logger = logging.getLogger(__name__)
[docs]
def yield_and_map(iterable: Iterable[Any], level: int = 0, func: Callable = print) -> Any:
"""
:param iterable:
:type iterable:
:param level:
:type level:
:param func:
:type func:"""
if level == 0:
for a in iterable:
func(a)
yield a
elif level == 1:
for a in iterable:
for b in a:
func(b)
yield b
elif level == 2:
for a in iterable:
for b in a:
for c in b:
func(c)
yield c
[docs]
def inner_map(func: Callable, iterable: Iterable[Any], aggregate_yield: bool = True) -> Any:
"""
:param func:
:type func:
:param iterable:
:type iterable:
:param aggregate_yield:
:type aggregate_yield:"""
if aggregate_yield:
for a in iterable:
yield [func(b) for b in a]
else:
for a in iterable:
for b in a:
yield func(b)
[docs]
def kw_map(func: Callable, kw: str, iterable: Iterable[Any]) -> Any:
"""
:param func:
:type func:
:param kw:
:type kw:
:param iterable:
:type iterable:"""
for a in iterable:
yield func(**{kw: a})
def select_key(tuple_iterator: Iterable[Any], *a) -> Tuple[Any, Any]:
"""
Yield keys from mapping if in a
TODO: Why return the key itself?
:param tuple_iterator:
:type tuple_iterator:
:param a:
:type a:
:return:
:rtype:
"""
for k, _ in tuple_iterator:
if k in a:
yield k, _
def select_dict(mapping: Mapping[Any, Any], *a) -> Mapping[Any, Any]:
"""
Select keys from mapping if in a
Args:
mapping:
*a:
Returns:
"""
return {k: v for k, v in select_key(mapping.items(), *a)}
if __name__ == "__main__":
def uahsd() -> None:
agfas = (2, 3)
# TODO
sadd = {a: b for a, b in zip("abcdef", range(6))}
_logger.info(select_dict(sadd, "a", "d"))
uahsd()