utils.py 612 Bytes
Newer Older
Pépin Léo's avatar
Pépin Léo committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
import os
from contextlib import contextmanager


def traverse_parents(path, include_current=False):
    if not include_current:
        path = os.path.dirname(path)

    previous = None
    while previous != path:
        yield path
        previous = path
        path = os.path.dirname(path)


@contextmanager
def monkeypatch(obj, attribute_name, new_value):
    """
    Like pytest's monkeypatch, but as a context manager.
    """
    old_value = getattr(obj, attribute_name)
    try:
        setattr(obj, attribute_name, new_value)
        yield
    finally:
        setattr(obj, attribute_name, old_value)