60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
from dsst_server.data_access import sql
|
|
from common import models
|
|
|
|
|
|
def map_base_fields(cls, db_model):
|
|
model = cls()
|
|
attrs = [attr for attr in db_model._meta.fields]
|
|
for attr in attrs:
|
|
setattr(model, attr, getattr(db_model, attr))
|
|
return model
|
|
|
|
|
|
def db_to_drink(drink: 'sql.Drink'):
|
|
return map_base_fields(models.Drink, drink)
|
|
|
|
|
|
def db_to_enemy(enemy: 'sql.Enemy'):
|
|
return map_base_fields(models.Enemy, enemy)
|
|
|
|
|
|
def db_to_player(player: 'sql.Player'):
|
|
return map_base_fields(models.Player, player)
|
|
|
|
|
|
def db_to_penalty(penalty: 'sql.Penalty'):
|
|
model = map_base_fields(models.Penalty, penalty)
|
|
model.drink = db_to_drink(penalty.drink)
|
|
model.player = db_to_player(penalty.player)
|
|
return model
|
|
|
|
|
|
def db_to_death(death: 'sql.Death'):
|
|
model = map_base_fields(models.Death, death)
|
|
model.player = db_to_player(death.player)
|
|
model.enemy = db_to_enemy(death.enemy)
|
|
model.penalties = [db_to_penalty(penalty) for penalty in death.penalties]
|
|
return model
|
|
|
|
|
|
def db_to_victory(victory: 'sql.Victory'):
|
|
model = map_base_fields(models.Victory, victory)
|
|
model.player = db_to_player(victory.player)
|
|
model.enemy = db_to_enemy(victory.enemy)
|
|
return model
|
|
|
|
|
|
def db_to_episode(episode: 'sql.Episode'):
|
|
model = map_base_fields(models.Episode, episode)
|
|
model.players = [db_to_player(player) for player in episode.players]
|
|
model.deaths = [db_to_death(death) for death in episode.deaths]
|
|
model.victories = [db_to_victory(victory) for victory in episode.victories]
|
|
return model
|
|
|
|
|
|
def db_to_season(season: 'sql.Season'):
|
|
model = map_base_fields(models.Season, season)
|
|
model.enemies = [db_to_enemy(enemy) for enemy in season.enemies]
|
|
model.episodes = [db_to_episode(ep) for ep in season.episodes]
|
|
return model
|