masque/masque/utils/decorators.py

22 lines
499 B
Python
Raw Normal View History

from collections.abc import Callable
2023-04-07 16:33:23 -07:00
from functools import wraps
from ..error import OneShotError
def oneshot(func: Callable) -> Callable:
"""
Raises a OneShotError if the decorated function is called more than once
"""
expired = False
@wraps(func)
def wrapper(*args, **kwargs): # noqa: ANN202
2023-04-07 16:33:23 -07:00
nonlocal expired
if expired:
raise OneShotError(func.__name__)
expired = True
return func(*args, **kwargs)
return wrapper