zmc
2023-12-22 9fdbf60165db0400c2e8e6be2dc6e88138ac719a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class AlreadyUsedError(RuntimeError):
    """An Outcome can only be unwrapped once."""
    pass
 
 
def fixup_module_metadata(module_name, namespace):
    def fix_one(obj):
        mod = getattr(obj, "__module__", None)
        if mod is not None and mod.startswith("outcome."):
            obj.__module__ = module_name
            if isinstance(obj, type):
                for attr_value in obj.__dict__.values():
                    fix_one(attr_value)
 
    for objname in namespace["__all__"]:
        obj = namespace[objname]
        fix_one(obj)
 
 
def remove_tb_frames(exc, n):
    tb = exc.__traceback__
    for _ in range(n):
        tb = tb.tb_next
    return exc.with_traceback(tb)