import functools
from typing import Any, Callable, Dict, Optional


def model(
    python_version: str,
    name: Optional[str]=None,
    dependencies: Optional[Dict[str, str]]=None,
) -> Callable:
    """Define a Bauplan Model.

    Args:
        python_version (str): the python version required to run the model (e.g. '3.11')
        name (Optional[str]): the name of the model (e.g. 'users'); if missing the function name is used
        decorators (Optional[List[Callable]]): a list of decorators to apply to the model function (e.g. {'requests': '2.26.0'})
    """
    def decorator(f: Callable) -> Callable:
        @functools.wraps(f)
        def wrapper(*args: Any, **kwargs: Any) -> None:
            return f(*args, **kwargs)
        return wrapper
    return decorator
