class PickTableSchema(Schema[PickPoint]): global_pick_number = fields.Integer() pack_number = fields.Lambda(lambda p: p.round.pack) pick_number = fields.Integer() pick = fields.Lambda( lambda p: describe_focusable(p.pick.cubeable if isinstance( p.pick, SinglePickPick) else p.pick.pick)) burn = fields.Lambda( lambda p: describe_focusable(p.pick.burn) if isinstance(p.pick, BurnPick) and p.pick.burn is not None else '') pack = fields.Lambda( lambda p: ', '.join(map( describe_focusable, p.booster.cubeables, )))
class LobbiesSchema(Schema): name = fields.Text() game_type = fields.Text() state = fields.Text() owner = fields.Text() users = fields.Lambda(lambda l: '{}/{}'.format( len(l.users), l.lobby_options.size, )) min_size = fields.Lambda(lambda l: l.lobby_options.minimum_size) requires_ready = fields.Lambda( lambda l: bool(l.lobby_options.require_ready), display_name='Req. Ready') auto_unready = fields.Lambda( lambda l: bool(l.lobby_options.unready_on_change))
class PrioritySchema(Schema[models.Priority]): id = fields.Integer(read_only=True) name = fields.Text(min=1, max=127, pattern=re.compile(r'\w+')) created_at = fields.Datetime(read_only=True) level = fields.Integer() project = fields.Lambda(lambda p: p.project.name) is_default = fields.Bool(default=False)
class MatchSchema(Schema): tournament = fields.Lambda(lambda m: m.tournament.name) round = fields.Lambda(lambda m: m.round + 1) opponents = fields.Lambda(lambda m: ', '.join( sorted(seat.participant.tag_line for seat in MatchSchema.get_opponents(m)))) tournament_participants = fields.Lambda(lambda m: ', '.join( sorted(p.tag_line for p in m.tournament.participants))) created_at = fields.Lambda(lambda m: m.tournament.created_at.strftime( values.STANDARD_DATETIME_FORMAT)) @classmethod def get_opponents(cls, match: ScheduledMatch) -> t.Iterator[ScheduledSeat]: current_user = Context.cube_api_client.user for seat in match.seats: if seat.participant.player is None or seat.participant.player.id != current_user.id: yield seat
class ToDoSchema(Schema[models.ToDo]): id = fields.Integer(read_only=True) text = fields.Text() tags = fields.Lambda(lambda todo: [tag.name for tag in todo.tags]) comments = fields.Lambda( lambda todo: [comment.text for comment in todo.comments]) project = fields.Lambda(lambda todo: todo.project.name) priority = fields.Related(PrioritySchema(), read_only=True) created_at = fields.Datetime(read_only=True) finished_at = fields.Datetime(read_only=True) state = fields.Enum(models.State, read_only=True) children = fields.List(fields.SelfRelated(), read_only=True, source='active_children')
class ParticipantsSchema(Schema): player = fields.Lambda(lambda p: p.player.username if p.player else '') deck = fields.Lambda(lambda p: p.deck.name) seed = fields.Float(max_precision=3)