Source code for warg.generators.filtering
#!/usr/bin/env python3
__author__ = "Christian Heider Lindbjerg"
__doc__ = r"""
Created on 18-01-2021
"""
import logging
from enum import Enum
from typing import Any, Iterable
_logger = logging.getLogger(__name__)
__all__ = ["FilterModeEnum", "symbol_filter"]
# from sorcery import assigned_names # PURE!
[docs]
class FilterModeEnum(Enum):
"""
Filter Mode
"""
# exclude_postfix, exclude_prefix, exclude_fully = assigned_names()
# TODO: Include variants
exclude_postfix, exclude_prefix, exclude_fully = (
"exclude_postfix",
"exclude_prefix",
"exclude_fully",
)
[docs]
def symbol_filter(
string_stream: Iterable[str],
symbol: str = "#",
*,
exclusion_mode: FilterModeEnum = FilterModeEnum.exclude_postfix,
) -> Any:
"""description"""
if exclusion_mode == FilterModeEnum.exclude_fully:
yield from filter(lambda s: symbol not in s, string_stream)
elif exclusion_mode == FilterModeEnum.exclude_postfix or exclusion_mode == FilterModeEnum.exclude_prefix:
selector = 0
if exclusion_mode == FilterModeEnum.exclude_prefix:
selector = -1
for s in string_stream:
raw = s.split(symbol)[selector].strip()
if raw:
yield raw
else:
raise NotImplemented(f"{exclusion_mode} mode not supported")
if __name__ == "__main__":
def asijsda() -> None:
"""
:rtype: None
"""
strings = [
" # aasd # sad ",
" faojasasd # oiwaos ",
" okjasifj oajsidw2 ",
" 12 329#9213",
]
for s in symbol_filter(strings):
_logger.info(s)
_logger.info(" ")
for i, s in enumerate(symbol_filter(strings, exclusion_mode=FilterModeEnum.exclude_fully)):
_logger.info(i, s)
_logger.info(" ")
for s in symbol_filter(strings, exclusion_mode=FilterModeEnum.exclude_prefix):
_logger.info(s)
asijsda()