"Script which contains several utils for Haldis" import re from typing import Iterable, Optional def euro_string(value: Optional[int], unit="€ ") -> str: """ Convert cents to string formatted euro """ if value is None: return "✗" euro, cents = divmod(value, 100) if cents: return f"{unit}{euro}.{cents:02}" return f"{unit}{euro}" def parse_euro_string(value: str) -> Optional[int]: m = re.fullmatch("(?:€ ?)?([0-9]+)(?:[.,]([0-9]+))?", value) if not m: return None cents_02 = "{:0<2.2}".format(m.group(2)) if m.group(2) else "00" return int(m.group(1)) * 100 + int(cents_02) def price_range_string(price_range, include_upper=False): "Convert a price range to a string formatted euro" if price_range[0] == price_range[1]: return euro_string(price_range[0]) return ("{}—{}" if include_upper else "from {}").format( *map(euro_string, price_range) ) def first(iterable: Iterable, default=None): """ Return first element of iterable """ try: return next(iter(iterable)) except StopIteration: return default def ignore_none(iterable: Iterable): "Filter to ignore None objects" return filter(lambda x: x is not None, iterable)