Skip to content

Commit

Permalink
🏖️ For typing fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
asaf-kali committed Jan 6, 2025
1 parent 4ea019a commit fd8f5a7
Show file tree
Hide file tree
Showing 31 changed files with 125 additions and 114 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ import logging
import sys

from codenames.classic.board import ClassicBoard
from codenames.classic.player import ClassicTeam
from codenames.classic.team import ClassicTeam
from codenames.classic.runner import ClassicGamePlayers, ClassicGameRunner
from codenames.generic.move import Clue, Guess
from codenames.generic.player import Operative, Spymaster
Expand Down
2 changes: 1 addition & 1 deletion codenames/classic/board.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from typing import Self

from codenames.classic.color import ClassicColor
from codenames.classic.player import ClassicTeam
from codenames.classic.team import ClassicTeam
from codenames.classic.types import ClassicCard, ClassicCards
from codenames.generic.board import Board, Vocabulary
from codenames.utils.builder import extract_random_subset
Expand Down
21 changes: 5 additions & 16 deletions codenames/classic/player.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,18 @@
import abc

from codenames.classic.color import ClassicColor
from codenames.generic.player import Operative, Player, Spymaster, Team


class ClassicTeam(Team):
BLUE = "BLUE"
RED = "RED"

@property
def as_card_color(self) -> ClassicColor:
return ClassicColor.BLUE if self == ClassicTeam.BLUE else ClassicColor.RED

@property
def opponent(self) -> ClassicTeam:
return ClassicTeam.BLUE if self == ClassicTeam.RED else ClassicTeam.RED
from codenames.classic.state import ClassicOperativeState, ClassicSpymasterState
from codenames.classic.team import ClassicTeam
from codenames.generic.player import Operative, Player, Spymaster


class ClassicPlayer(Player[ClassicColor, ClassicTeam]):
pass


class ClassicSpymaster(Spymaster[ClassicColor, ClassicTeam], abc.ABC):
class ClassicSpymaster(Spymaster[ClassicColor, ClassicTeam, ClassicSpymasterState], abc.ABC):
pass


class ClassicOperative(Operative[ClassicColor, ClassicTeam], abc.ABC):
class ClassicOperative(Operative[ClassicColor, ClassicTeam, ClassicOperativeState], abc.ABC):
pass
2 changes: 1 addition & 1 deletion codenames/classic/runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
from typing import Collection, Iterator

from codenames.classic.board import ClassicBoard
from codenames.classic.player import ClassicTeam
from codenames.classic.state import ClassicGameState
from codenames.classic.team import ClassicTeam
from codenames.classic.winner import Winner
from codenames.generic.exceptions import InvalidGuess
from codenames.generic.move import GivenGuess
Expand Down
2 changes: 1 addition & 1 deletion codenames/classic/score.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from pydantic import BaseModel

from codenames.classic.player import ClassicTeam
from codenames.classic.team import ClassicTeam
from codenames.generic.state import TeamScore


Expand Down
2 changes: 1 addition & 1 deletion codenames/classic/state.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@

from codenames.classic.board import ClassicBoard
from codenames.classic.color import ClassicColor
from codenames.classic.player import ClassicTeam
from codenames.classic.score import Score
from codenames.classic.team import ClassicTeam
from codenames.classic.types import ClassicCard, ClassicGivenClue, ClassicGivenGuess
from codenames.classic.winner import Winner, WinningReason
from codenames.generic.card import canonical_format
Expand Down
17 changes: 17 additions & 0 deletions codenames/classic/team.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
from __future__ import annotations

from codenames.classic.color import ClassicColor
from codenames.generic.player import Team


class ClassicTeam(Team):
BLUE = "BLUE"
RED = "RED"

@property
def as_card_color(self) -> ClassicColor:
return ClassicColor.BLUE if self == ClassicTeam.BLUE else ClassicColor.RED

@property
def opponent(self) -> ClassicTeam:
return ClassicTeam.BLUE if self == ClassicTeam.RED else ClassicTeam.RED
2 changes: 1 addition & 1 deletion codenames/classic/types.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from codenames.classic.color import ClassicColor
from codenames.classic.player import ClassicTeam
from codenames.classic.team import ClassicTeam
from codenames.generic.card import Card
from codenames.generic.move import GivenClue, GivenGuess

Expand Down
2 changes: 1 addition & 1 deletion codenames/classic/winner.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from pydantic import BaseModel

from codenames.classic.player import ClassicTeam
from codenames.classic.team import ClassicTeam


class WinningReason(StrEnum):
Expand Down
18 changes: 6 additions & 12 deletions codenames/duet/player.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,18 @@
import abc

from codenames.duet.card import DuetColor
from codenames.generic.player import Operative, Spymaster, Team
from codenames.duet.state import DuetOperativeState, DuetSpymasterState
from codenames.duet.team import DuetTeam
from codenames.generic.player import Operative, Spymaster


class DuetTeam(Team):
MAIN = "MAIN"

@property
def as_card_color(self) -> DuetColor:
return DuetColor.GREEN # Naive implementation


class DuetPlayer(Spymaster[DuetColor, DuetTeam], Operative[DuetColor, DuetTeam], abc.ABC):
class DuetSpymaster(Spymaster[DuetColor, DuetTeam, DuetSpymasterState], abc.ABC):
pass


class DuetSpymaster(Spymaster[DuetColor, DuetTeam], abc.ABC):
class DuetOperative(Operative[DuetColor, DuetTeam, DuetOperativeState], abc.ABC):
pass


class DuetOperative(Operative[DuetColor, DuetTeam], abc.ABC):
class DuetPlayer(DuetSpymaster, DuetOperative, abc.ABC):
pass
2 changes: 1 addition & 1 deletion codenames/duet/state.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@

from codenames.duet.board import DuetBoard
from codenames.duet.card import DuetColor
from codenames.duet.player import DuetTeam
from codenames.duet.score import (
ASSASSIN_HIT,
GAME_QUIT,
Expand All @@ -18,6 +17,7 @@
GameResult,
Score,
)
from codenames.duet.team import DuetTeam
from codenames.duet.types import DuetCard, DuetGivenClue, DuetGivenGuess
from codenames.generic.board import WordGroup
from codenames.generic.card import canonical_format
Expand Down
12 changes: 12 additions & 0 deletions codenames/duet/team.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from __future__ import annotations

from codenames.duet.card import DuetColor
from codenames.generic.player import Team


class DuetTeam(Team):
MAIN = "MAIN"

@property
def as_card_color(self) -> DuetColor:
return DuetColor.GREEN # Naive implementation
2 changes: 1 addition & 1 deletion codenames/duet/types.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from codenames.duet.card import DuetColor
from codenames.duet.player import DuetTeam
from codenames.duet.team import DuetTeam
from codenames.generic.card import Card
from codenames.generic.move import GivenClue, GivenGuess

Expand Down
8 changes: 4 additions & 4 deletions codenames/generic/player.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,13 @@ def on_guess_given(self, given_guess: GivenGuess[C, T]):
pass


class Spymaster[C: CardColor, T: Team](Player[C, T], abc.ABC):
class Spymaster[C: CardColor, T: Team, S: "SpymasterState"](Player[C, T], abc.ABC):
@abc.abstractmethod
def give_clue(self, game_state: SpymasterState[C, T]) -> Clue:
def give_clue(self, game_state: S) -> Clue:
raise NotImplementedError


class Operative[C: CardColor, T: Team](Player[C, T], abc.ABC):
class Operative[C: CardColor, T: Team, S: "OperativeState"](Player[C, T], abc.ABC):
@abc.abstractmethod
def guess(self, game_state: OperativeState[C, T]) -> Guess:
def guess(self, game_state: S) -> Guess:
raise NotImplementedError()
8 changes: 2 additions & 6 deletions codenames/online/codenames_game/agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,8 @@
import logging
from typing import TYPE_CHECKING

from codenames.classic.player import (
ClassicOperative,
ClassicPlayer,
ClassicSpymaster,
ClassicTeam,
)
from codenames.classic.player import ClassicOperative, ClassicPlayer, ClassicSpymaster
from codenames.classic.team import ClassicTeam
from codenames.generic.move import Clue, Guess
from codenames.generic.state import OperativeState, SpymasterState

Expand Down
2 changes: 1 addition & 1 deletion codenames/online/codenames_game/runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
from threading import Semaphore, Thread
from typing import ContextManager, Iterable

from codenames.classic.player import ClassicTeam
from codenames.classic.runner import ClassicGamePlayers, ClassicGameRunner
from codenames.classic.team import ClassicTeam
from codenames.generic.move import Clue, Guess
from codenames.generic.player import Operative, Player, PlayerRole, Spymaster
from codenames.online.codenames_game.adapter import (
Expand Down
2 changes: 1 addition & 1 deletion tests/classic/test_board.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import pytest

from codenames.classic.board import ClassicBoard
from codenames.classic.player import ClassicTeam
from codenames.classic.team import ClassicTeam
from codenames.generic.board import two_integer_factors
from codenames.generic.exceptions import CardNotFoundError
from codenames.utils.vocabulary.languages import SupportedLanguage, get_vocabulary
Expand Down
2 changes: 1 addition & 1 deletion tests/classic/test_flows.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from unittest.mock import MagicMock

from codenames.classic.board import ClassicBoard
from codenames.classic.player import ClassicTeam
from codenames.classic.team import ClassicTeam
from codenames.classic.types import ClassicGivenClue, ClassicGivenGuess
from codenames.classic.winner import Winner, WinningReason
from codenames.generic.move import PASS_GUESS, QUIT_GAME, Clue, Guess
Expand Down
10 changes: 5 additions & 5 deletions tests/classic/test_game_runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@

from codenames.classic.board import ClassicBoard
from codenames.classic.color import ClassicColor
from codenames.classic.player import ClassicTeam
from codenames.classic.runner import ClassicGameRunner
from codenames.classic.state import ClassicOperativeState
from codenames.classic.team import ClassicTeam
from codenames.classic.types import ClassicGivenClue, ClassicGivenGuess
from codenames.classic.winner import Winner, WinningReason
from codenames.generic.move import Clue
from tests.classic.utils.dictated import (
DictatedClassicOperative,
DictatedClassicSpymaster,
ClassicDictatedOperative,
ClassicDictatedSpymaster,
)
from tests.classic.utils.runner import build_players, run_game
from tests.utils.hooks import hook_method
Expand Down Expand Up @@ -76,7 +76,7 @@ def test_game_runner_spymaster_state(board_10: ClassicBoard):
DictatedTurn(clue=Clue(word="B", card_amount=1), guesses=[4, 9]),
]

with hook_method(DictatedClassicSpymaster, "give_clue") as give_clue_mock:
with hook_method(ClassicDictatedSpymaster, "give_clue") as give_clue_mock:
run_game(board=board_10, all_turns=all_turns)

calls = give_clue_mock.hook.calls
Expand Down Expand Up @@ -108,7 +108,7 @@ def test_game_runner_operative_state(board_10: ClassicBoard):
DictatedTurn(clue=Clue(word="A", card_amount=2), guesses=[0, 1, 2]),
DictatedTurn(clue=Clue(word="B", card_amount=1), guesses=[4, 9]),
]
with hook_method(DictatedClassicOperative, "guess") as pick_guess_mock:
with hook_method(ClassicDictatedOperative, "guess") as pick_guess_mock:
run_game(board=board_10, all_turns=all_turns)

calls = pick_guess_mock.hook.calls
Expand Down
2 changes: 1 addition & 1 deletion tests/classic/test_game_state.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@

from codenames.classic.board import ClassicBoard
from codenames.classic.color import ClassicColor
from codenames.classic.player import ClassicTeam
from codenames.classic.state import ClassicGameState, ClassicPlayerState
from codenames.classic.team import ClassicTeam
from codenames.classic.types import ClassicCard, ClassicGivenClue, ClassicGivenGuess
from codenames.classic.winner import Winner, WinningReason
from codenames.generic.exceptions import InvalidGuess, InvalidTurn
Expand Down
Loading

0 comments on commit fd8f5a7

Please sign in to comment.