importosfromcontextlibimportcontextmanagerdeftraverse_parents(path,include_current=False):ifnotinclude_current:path=os.path.dirname(path)previous=Nonewhileprevious!=path:yieldpathprevious=pathpath=os.path.dirname(path)@contextmanagerdefmonkeypatch(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)yieldfinally:setattr(obj,attribute_name,old_value)