Skip to content

Commit db760f9

Browse files
committed
🔥 Generics and typing fixes
1 parent da319a7 commit db760f9

34 files changed

+224
-159
lines changed

‎README.md‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import logging
2929
import sys
3030

3131
from codenames.classic.board import ClassicBoard
32-
from codenames.classic.color import ClassicTeam
32+
from codenames.classic.player import ClassicTeam
3333
from codenames.classic.runner import ClassicGamePlayers, ClassicGameRunner
3434
from codenames.generic.move import Clue, Guess
3535
from codenames.generic.player import Operative, Spymaster
@@ -61,13 +61,14 @@ class CLIOperative(Operative):
6161
card_index = game_state.board.find_card_index(word=card_word)
6262
return Guess(card_index=card_index)
6363

64+
6465
############
6566
# Run Game #
6667
############
6768

6869
def run_classic_cli_game():
6970
# Init players
70-
blue_spymaster = CLISpymaster(name="Yoda",team= ClassicTeam.BLUE)
71+
blue_spymaster = CLISpymaster(name="Yoda", team=ClassicTeam.BLUE)
7172
blue_operative = CLIOperative(name="Luke", team=ClassicTeam.BLUE)
7273
red_spymaster = CLISpymaster(name="Einstein", team=ClassicTeam.RED)
7374
red_operative = CLIOperative(name="Newton", team=ClassicTeam.RED)

‎codenames/classic/board.py‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
import random
55
from typing import Self
66

7-
from codenames.classic.color import ClassicColor, ClassicTeam
7+
from codenames.classic.color import ClassicColor
8+
from codenames.classic.player import ClassicTeam
89
from codenames.classic.types import ClassicCard, ClassicCards
910
from codenames.generic.board import Board, Vocabulary
1011
from codenames.utils.builder import extract_random_subset

‎codenames/classic/color.py‎

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from __future__ import annotations
22

33
from codenames.generic.card import CardColor
4-
from codenames.generic.player import Team
54

65

76
class ClassicColor(CardColor):
@@ -15,19 +14,6 @@ def emoji(self) -> str:
1514
return CARD_COLOR_TO_EMOJI[self]
1615

1716

18-
class ClassicTeam(Team):
19-
BLUE = "BLUE"
20-
RED = "RED"
21-
22-
@property
23-
def as_card_color(self) -> ClassicColor:
24-
return ClassicColor.BLUE if self == ClassicTeam.BLUE else ClassicColor.RED
25-
26-
@property
27-
def opponent(self) -> ClassicTeam:
28-
return ClassicTeam.BLUE if self == ClassicTeam.RED else ClassicTeam.RED
29-
30-
3117
CARD_COLOR_TO_EMOJI = {
3218
ClassicColor.RED: "🟥",
3319
ClassicColor.BLUE: "🟦",
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
from __future__ import annotations
2+
3+
import abc
4+
5+
from codenames.classic.color import ClassicColor
6+
from codenames.generic.player import Operative, Player, Spymaster, Team
7+
8+
9+
class ClassicTeam(Team):
10+
BLUE = "BLUE"
11+
RED = "RED"
12+
13+
@property
14+
def as_card_color(self) -> ClassicColor:
15+
return ClassicColor.BLUE if self == ClassicTeam.BLUE else ClassicColor.RED
16+
17+
@property
18+
def opponent(self) -> ClassicTeam:
19+
return ClassicTeam.BLUE if self == ClassicTeam.RED else ClassicTeam.RED
20+
21+
22+
class ClassicPlayer(Player[ClassicColor, ClassicTeam]):
23+
pass
24+
25+
26+
class ClassicSpymaster(Spymaster[ClassicColor, ClassicTeam], abc.ABC):
27+
pass
28+
29+
30+
class ClassicOperative(Operative[ClassicColor, ClassicTeam], abc.ABC):
31+
pass

‎codenames/classic/runner.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from typing import Collection, Iterator
66

77
from codenames.classic.board import ClassicBoard
8-
from codenames.classic.color import ClassicTeam
8+
from codenames.classic.player import ClassicTeam
99
from codenames.classic.state import ClassicGameState
1010
from codenames.classic.winner import Winner
1111
from codenames.generic.exceptions import InvalidGuess

‎codenames/classic/score.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from pydantic import BaseModel
44

5-
from codenames.classic.color import ClassicTeam
5+
from codenames.classic.player import ClassicTeam
66
from codenames.generic.state import TeamScore
77

88

‎codenames/classic/state.py‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
from pydantic import field_validator
55

66
from codenames.classic.board import ClassicBoard
7-
from codenames.classic.color import ClassicColor, ClassicTeam
7+
from codenames.classic.color import ClassicColor
8+
from codenames.classic.player import ClassicTeam
89
from codenames.classic.score import Score
910
from codenames.classic.types import ClassicCard, ClassicGivenClue, ClassicGivenGuess
1011
from codenames.classic.winner import Winner, WinningReason
@@ -56,11 +57,11 @@ def parse_given_guesses(cls, v: Any) -> list[ClassicGivenGuess]:
5657
return guesses
5758

5859

59-
class ClassicSpymasterState(SpymasterState, ClassicPlayerState):
60+
class ClassicSpymasterState(ClassicPlayerState, SpymasterState[ClassicColor, ClassicTeam]):
6061
pass
6162

6263

63-
class ClassicOperativeState(OperativeState, ClassicPlayerState):
64+
class ClassicOperativeState(ClassicPlayerState, OperativeState[ClassicColor, ClassicTeam]):
6465
left_guesses: int
6566

6667

‎codenames/classic/types.py‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
from codenames.classic.color import ClassicColor, ClassicTeam
1+
from codenames.classic.color import ClassicColor
2+
from codenames.classic.player import ClassicTeam
23
from codenames.generic.card import Card
34
from codenames.generic.move import GivenClue, GivenGuess
45

‎codenames/classic/winner.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from pydantic import BaseModel
44

5-
from codenames.classic.color import ClassicTeam
5+
from codenames.classic.player import ClassicTeam
66

77

88
class WinningReason(StrEnum):

‎codenames/duet/player.py‎

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from __future__ import annotations
22

3-
from abc import ABC
3+
import abc
44

55
from codenames.duet.card import DuetColor
66
from codenames.generic.player import Operative, Spymaster, Team
@@ -14,5 +14,13 @@ def as_card_color(self) -> DuetColor:
1414
return DuetColor.GREEN # Naive implementation
1515

1616

17-
class DuetPlayer(Spymaster[DuetTeam], Operative[DuetTeam], ABC):
17+
class DuetPlayer(Spymaster[DuetColor, DuetTeam], Operative[DuetColor, DuetTeam], abc.ABC):
18+
pass
19+
20+
21+
class DuetSpymaster(Spymaster[DuetColor, DuetTeam], abc.ABC):
22+
pass
23+
24+
25+
class DuetOperative(Operative[DuetColor, DuetTeam], abc.ABC):
1826
pass

0 commit comments

Comments
 (0)