Source code for maverick.playeraction

import warnings
from typing import Any, Optional

from pydantic import BaseModel, ConfigDict, Field, model_validator

from .enums import ActionType

__all__ = ["PlayerAction"]


[docs] class PlayerAction(BaseModel): """Represents an action taken by a player during their turn in a game. Fields ------ player_uid : str Unique identifier of the player taking the action. Replaces deprecated ``player_id``. action_type : ActionType Type of action being taken. amount : Optional[int] Amount for BET or RAISE. None for CALL, CHECK, or FOLD. IMPORTANT: The amount is always the value that you want to put into the pot from your stack, NOT the total bet/raise amount after the action is taken. payload : dict[str, Any] Additional action-specific data. .. versionadded:: 0.6.0 decision_time_seconds : Optional[float] Time in seconds it took the player to make the decision. Automatically populated by the game engine when the action is taken. .. versionadded:: 0.6.0 """ model_config = ConfigDict(populate_by_name=True) player_uid: str = Field( ..., alias="player_id", description="Unique identifier of the player taking the action.", ) action_type: ActionType = Field(..., description="Type of action being taken.") amount: Optional[int] = Field( default=None, ge=0, description=( "Amount for BET or RAISE. None for CALL, CHECK, or FOLD. " "IMPORTANT: The amount is always the value that you want to " "put into the pot from your stack, NOT the total bet amount " "after the action is taken." ), ) payload: dict[str, Any] = Field(default_factory=dict) decision_time_seconds: Optional[float] = Field( default=None, description="Time in seconds it took the player to make the decision.", ) @model_validator(mode="before") @classmethod def _warn_on_player_id(cls, data): if isinstance(data, dict) and "player_id" in data and "player_uid" not in data: warnings.warn( "PlayerAction 'player_id' parameter is deprecated, use 'player_uid' instead.", DeprecationWarning, stacklevel=2, ) return data @property def player_id(self) -> str: """Deprecated: use ``player_uid`` instead.""" warnings.warn( "PlayerAction.player_id is deprecated, use PlayerAction.player_uid instead.", DeprecationWarning, stacklevel=2, ) return self.player_uid