Add jarvis.utils.get

This commit is contained in:
Zeva Rose 2022-02-02 19:44:27 -07:00
parent 12870bba17
commit e9532d1235

View file

@ -1,5 +1,6 @@
"""J.A.R.V.I.S. Utility Functions."""
from datetime import datetime
from operator import attrgetter
from pkgutil import iter_modules
from typing import Any, Callable, Iterable, Optional, TypeVar
@ -109,3 +110,20 @@ def find(predicate: Callable[[T], Any], seq: Iterable[T]) -> Optional[T]:
if predicate(element):
return element
return None
def get(iterable: Iterable[T], **attrs: Any) -> Optional[T]:
if len(attrs) == 1:
k, v = attrs.popitem()
pred = attrgetter(k.replace("__", "."))
for elem in iterable:
if pred(elem) == v:
return elem
return None
converted = [(attrgetter(attr.replace("__", ".")), value) for attr, value in attrs.items()]
for elem in iterable:
if all(pred(elem) == value for pred, value in converted):
return elem
return None