Advertisement
Guest User

Untitled

a guest
Aug 22nd, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.16 KB | None | 0 0
  1. import enum
  2. from typing import Optional, Dict
  3. import pydantic
  4. from datetime import datetime
  5.  
  6.  
  7. class Qualification(pydantic.BaseModel):
  8.     start_date: Optional[datetime]
  9.     vote_format: Optional[str]
  10.     vote_pool: Optional[int]
  11.     vote_time: Optional[int]
  12.     vote_veto_logic: Optional[str]
  13.  
  14.  
  15. class Settings(pydantic.BaseModel):
  16.     qualification = Qualification
  17.  
  18.  
  19. class LocalizedFields(pydantic.BaseModel):
  20.     name: Optional[str]
  21.     description: Optional[str]
  22.     avatar: Optional[str]
  23.     backgroundAvatar: Optional[str]
  24.     prize: Optional[str]
  25.  
  26.  
  27. class Localizations(pydantic.BaseModel):
  28.     en: Optional[LocalizedFields]
  29.     ru: Optional[LocalizedFields]
  30.  
  31.  
  32. class Attributes(pydantic.BaseModel):
  33.     class Status(str, enum.Enum):
  34.         UPCOMING = 'UPCOMING'
  35.         ONGOING = 'ONGOING'
  36.         ENDED = 'ENDED'
  37.         CANCELED = 'CANCELED'
  38.  
  39.     class Bracket(str, enum.Enum):
  40.         SINGLE_ELIMINATION = 'SINGLE_ELIMINATION'
  41.         DOUBLE_ELIMINATION = 'DOUBLE_ELIMINATION'
  42.         GROUP = 'GROUP'
  43.         GSL = 'GSL'
  44.  
  45.     class BracketLogic(str, enum.Enum):
  46.         ROUND_BY_ROUND = 'ROUND_BY_ROUND'
  47.         FOLLOW_BY = 'FOLLOW_BY'
  48.  
  49.     class AccessType(str, enum.Enum):
  50.         ACCESS_PUBLIC = 'ACCESS_PUBLIC'
  51.         ACCESS_BY_LINK = 'ACCESS_BY_LINK'
  52.         ACCESS_BY_NAME = 'ACCESS_BY_NAME'
  53.  
  54.     name: str
  55.     description: str
  56.     avatar: str
  57.     background_avatar: str
  58.     prize: str
  59.     published: int
  60.     status: Status
  61.     open_registration_datetime: Optional[datetime]
  62.     close_registration_datetime: Optional[datetime]
  63.     start_datetime: Optional[datetime]
  64.     publish_datetime: Optional[datetime]
  65.     bracket: Bracket
  66.     bracket_logic: BracketLogic
  67.     groups_count: Optional[int]
  68.     group_size: Optional[int]
  69.     reserved_size: Optional[int]
  70.     third_place_match: Optional[int]
  71.     total_slots: Optional[int]
  72.     empty_slots: Optional[int]
  73.     access_type: AccessType
  74.     create_datetime: Optional[datetime]
  75.     update_datetime: Optional[datetime]
  76.     settings: Optional[Settings]
  77.     lang: Optional[Localizations]
  78.  
  79.  
  80. class Game(pydantic.BaseModel):
  81.     name: Optional[str]
  82.     logo: Optional[str]
  83.     create_datetime: Optional[datetime]
  84.     update_datetime: Optional[datetime]
  85.  
  86.  
  87. class GameMode(pydantic.BaseModel):
  88.     title: Optional[str]
  89.     size: Optional[int]
  90.     type: Optional[str]
  91.  
  92.  
  93. class Organizer(pydantic.BaseModel):
  94.     name: Optional[str]
  95.     logo: Optional[str]
  96.     url: Optional[str]
  97.  
  98.  
  99. class Tournament(pydantic.BaseModel):
  100.     id: int
  101.     type: str
  102.     attributes: Attributes
  103.     relationships: dict
  104.     games: Dict[str, Game]
  105.     game_modes: Dict[str, GameMode]
  106.     organizers: Dict[str, Organizer]
  107.  
  108.     @property
  109.     def game(self) -> str:
  110.         game_id = str(self.relationships['game']['data']['id'])
  111.         game = self.games.get(game_id)
  112.         if game:
  113.             return game.name
  114.         return ''
  115.  
  116.     @property
  117.     def icon(self) -> str:
  118.         return self.attributes.avatar
  119.  
  120.     @property
  121.     def status(self) -> Attributes.Status:
  122.         return self.attributes.status
  123.  
  124.     @property
  125.     def name(self):
  126.         # todo: localization
  127.         return self.attributes.name
  128.  
  129.     @property
  130.     def access_type(self) -> Attributes.AccessType:
  131.         return self.attributes.access_type
  132.  
  133.     @property
  134.     def organizer(self) -> str:
  135.         organizer_id = str(self.relationships['organizer']['data']['id'])
  136.         organizer = self.organizers.get(organizer_id)
  137.         if organizer:
  138.             return organizer.name
  139.         return ''
  140.  
  141.     @property
  142.     def start_time(self) -> datetime:
  143.         return self.attributes.start_datetime
  144.  
  145.     @property
  146.     def total_slots(self) -> int:
  147.         return self.attributes.total_slots
  148.  
  149.     @property
  150.     def empty_slots(self) -> int:
  151.         return self.attributes.empty_slots
  152.  
  153.     @property
  154.     def prize(self) -> str:
  155.         return self.attributes.prize
  156.  
  157.     @property
  158.     def game_mode(self):
  159.         game_mode_id = str(self.relationships['game_mode']['data']['id'])
  160.         game_mode = self.game_modes.get(game_mode_id)
  161.         if game_mode:
  162.             return game_mode.title
  163.         return ''
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement