Ejemplo n.º 1
0
from psycopg2.errors import UniqueViolation
from sqlalchemy.exc import IntegrityError

from gatovid.exts import db
from gatovid.models import (
    InvalidModelException,
    PurchasableType,
    Purchase,
    Stats,
    TokenBlacklist,
    User,
)
from gatovid.util import get_logger, msg_err, msg_ok, route_get_or_post

mod = Blueprint("api_data", __name__, url_prefix="/data")
logger = get_logger("api.data.__init__")


def _revoke_token() -> bool:
    """
    Revoca un token, devolviendo verdadero en caso de que haya sido una
    operación exitosa, o falso en caso contrario.
    """

    jti = get_jwt()["jti"]
    blacklist_token = TokenBlacklist(token=jti)
    try:
        # Insertar el token baneado para el futuro
        db.session.add(blacklist_token)
        db.session.commit()
        return True
Ejemplo n.º 2
0
Desconexión por error o botón de reanudar más tarde pulsado:
- Pública: no se puede volver a jugar.
- Privada: se puede volver a la partida y no habrá pasado nada porque en
  partidas privadas no se eliminan jugadores AFK.
"""

import time
from typing import Dict, Optional

from gatovid.create_db import GENERIC_USERS_NAME
from gatovid.models import BOT_PICTURE_ID
from gatovid.util import get_logger

from .base import WsTestClient

logger = get_logger(__name__)


class ConnTest(WsTestClient):
    def active_wait_turns(
        self,
        clients,
        total_skips: int,
        turn_timeout: float,
        starting_turn: Optional[int] = None,
        receiver: Optional[object] = None,
    ) -> (int, Dict):
        """
        Espera activa de un turno para evitar problemas de sincronización con
        `time.sleep(X)`.
Ejemplo n.º 3
0
from flask_jwt_extended import get_jwt_identity, verify_jwt_in_request
from flask_socketio import emit, join_room, leave_room

from gatovid.api.game.match import (
    MAX_MATCH_USERS,
    MM,
    GameLogicException,
    PrivateMatch,
    PublicMatch,
)
from gatovid.exts import db, socket
from gatovid.game.actions import Discard, Pass, PlayCard
from gatovid.models import User
from gatovid.util import get_logger

logger = get_logger("api.game.__init__")

MAX_CHAT_MSG_LEN = 240


def _requires_game(started=False):
    """
    Decorador para comprobar si el usuario está en una partida. Si started es
    True, se comprueba también que la partida ha empezado.
    """
    def deco(f):
        @functools.wraps(f)
        def wrapper(*args, **kwargs):
            game = session.get("game")
            if not game:
                return {"error": "No estás en una partida"}