# -*- coding: utf-8 -*-
from collections import namedtuple
from datetime import datetime
Posicao = namedtuple('Posicao', ['id', 'nome', 'abreviacao'])
Status = namedtuple('Status', ['id', 'nome'])
_posicoes = {
1: Posicao(1, u'Goleiro', 'gol'),
2: Posicao(2, u'Lateral', 'lat'),
3: Posicao(3, u'Zagueiro', 'zag'),
4: Posicao(4, u'Meia', 'mei'),
5: Posicao(5, u'Atacante', 'ata'),
6: Posicao(6, u'Técnico', 'tec')
}
_atleta_status = {
2: Status(2, u'Dúvida'),
3: Status(3, u'Suspenso'),
5: Status(5, u'Contundido'),
6: Status(6, u'Nulo'),
7: Status(7, u'Provável')
}
_mercado_status = {
1: Status(1, u'Mercado aberto'),
2: Status(2, u'Mercado fechado'),
3: Status(3, u'Mercado em atualização'),
4: Status(4, u'Mercado em manutenção'),
6: Status(6, u'Final de temporada')
}
[docs]class Atleta(object):
""" Representa um atleta (jogador ou técnico), e possui informações como o apelido, clube e pontuação obtida """
def __init__(self, atleta_id, apelido, pontos, scout, posicao_id, clube, status_id=None):
self.id = atleta_id
self.apelido = apelido
self.pontos = pontos
self.scout = scout
self.posicao = _posicoes[posicao_id]
self.clube = clube
self.status = _atleta_status[status_id] if status_id else None
@classmethod
def from_dict(cls, data, clubes, atleta_id=None):
atleta_id = atleta_id if atleta_id else data['atleta_id']
pontos = data['pontos_num'] if 'pontos_num' in data else data['pontuacao']
clube = clubes[data['clube_id']]
return cls(atleta_id, data['apelido'], pontos, data['scout'], data['posicao_id'], clube,
data.get('status_id', None))
[docs]class Clube(object):
""" Representa um dos 20 clubes presentes no campeonato, e possui informações como o nome e a abreviação """
def __init__(self, id, nome, abreviacao):
self.id = id
self.nome = nome
self.abreviacao = abreviacao
@classmethod
def from_dict(cls, data):
return cls(data['id'], data['nome'], data['abreviacao'])
[docs]class DestaqueRodada(object):
""" Destaque Rodada"""
def __init__(self, media_cartoletas, media_pontos, mito_rodada):
self.media_cartoletas = media_cartoletas
self.media_pontos = media_pontos
self.mito_rodada = mito_rodada
@classmethod
def from_dict(cls, data):
mito_rodada = TimeInfo.from_dict(data['mito_rodada'])
return cls(data['media_cartoletas'], data['media_pontos'], mito_rodada)
[docs]class Liga(object):
""" Liga """
def __init__(self, liga_id, nome, slug, descricao, times):
self.id = liga_id
self.nome = nome
self.slug = slug
self.descricao = descricao
self.times = times
@classmethod
def from_dict(cls, data, ranking=None):
data_liga = data.get('liga', data)
times = [TimeInfo.from_dict(time, ranking=ranking) for time in data['times']] if 'times' in data else None
return cls(data_liga['liga_id'], data_liga['nome'], data_liga['slug'], data_liga['descricao'], times)
[docs]class LigaPatrocinador(object):
""" Liga Patrocinador """
def __init__(self, liga_id, nome, url_link):
self.id = liga_id
self.nome = nome
self.url_link = url_link
@classmethod
def from_dict(cls, data):
return cls(data['liga_id'], data['nome'], data['url_link'])
[docs]class Mercado(object):
""" Mercado """
def __init__(self, rodada_atual, status_mercado, times_escalados, aviso, fechamento):
self.rodada_atual = rodada_atual
self.status = _mercado_status[status_mercado]
self.times_escalados = times_escalados
self.aviso = aviso
self.fechamento = fechamento
@classmethod
def from_dict(cls, data):
fechamento = datetime.fromtimestamp(data['fechamento']['timestamp'])
return cls(data['rodada_atual'], data['status_mercado'], data['times_escalados'], data['aviso'], fechamento)
[docs]class PontuacaoInfo(object):
""" Pontuação Info """
def __init__(self, atleta_id, rodada_id, pontos, preco, variacao, media):
self.atleta_id = atleta_id
self.rodada_id = rodada_id
self.pontos = pontos
self.preco = preco
self.variacao = variacao
self.media = media
@classmethod
def from_dict(cls, data):
return cls(data['atleta_id'], data['rodada_id'], data['pontos'], data['preco'], data['variacao'], data['media'])
[docs]class Time(object):
""" Time """
def __init__(self, patrimonio, valor_time, ultima_pontuacao, atletas, info):
self.patrimonio = patrimonio
self.valor_time = valor_time
self.ultima_pontuacao = ultima_pontuacao
self.atletas = atletas
self.info = info
@classmethod
def from_dict(cls, data, clubes):
data['atletas'].sort(key=lambda a: a['posicao_id'])
atletas = [Atleta.from_dict(atleta, clubes) for atleta in data['atletas']]
info = TimeInfo.from_dict(data['time'])
return cls(data['patrimonio'], data['valor_time'], data['pontos'], atletas, info)
[docs]class TimeInfo(object):
""" Time Info """
def __init__(self, time_id, nome, nome_cartola, slug, assinante, pontos):
self.id = time_id
self.nome = nome
self.nome_cartola = nome_cartola
self.slug = slug
self.assinante = assinante
self.pontos = pontos
@classmethod
def from_dict(cls, data, ranking=None):
pontos = data['pontos'][ranking] if ranking and ranking in data['pontos'] else None
return cls(data['time_id'], data['nome'], data['nome_cartola'], data['slug'], data['assinante'], pontos)