Skip to content

Instantly share code, notes, and snippets.

@ThomasParistech
Last active January 14, 2022 20:18
Show Gist options
  • Save ThomasParistech/9629dd3446589311756593c43578841b to your computer and use it in GitHub Desktop.
Save ThomasParistech/9629dd3446589311756593c43578841b to your computer and use it in GitHub Desktop.
Secret Santa: players info
# /usr/bin/python3
"""Players info."""
import json
from dataclasses import dataclass, field
from typing import Iterator, List
@dataclass
class PlayerInfo:
email: str
first_name: str
family_name: str = ""
include: List[str] = field(default_factory=list)
exclude: List[str] = field(default_factory=list)
@property
def name(self) -> str:
return f"{self.first_name} {self.family_name}".strip()
@dataclass
class ListOfPlayerInfo:
players: List[PlayerInfo]
def __len__(self) -> int:
return len(self.players)
def __iter__(self) -> Iterator[PlayerInfo]:
return self.players.__iter__()
def __getitem__(self, key: int) -> PlayerInfo:
return self.players[key]
@staticmethod
def load(path: str) -> 'ListOfPlayerInfo':
with open(path, "r", encoding="utf-8") as _f:
return ListOfPlayerInfo([PlayerInfo(**info)
for info in json.load(_f)["players"]])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment