Example #1
0
 def from_json(comp_id: int, ref_id=None):
     """Reads competition from json result file
     takes com_id as argument"""
     from db.tables import TblResultFile as R
     with db_session() as db:
         if ref_id:
             file = db.query(R).get(ref_id).filename
         else:
             file = db.query(R.filename).filter(and_(R.comp_id == comp_id,
                                                     R.task_id.is_(None), R.active == 1)).scalar()
     if file:
         comp = Comp(comp_id=comp_id)
         with open(path.join(RESULTDIR, file), 'r') as f:
             '''read task json file'''
             data = json.load(f)
             for k, v in data['info'].items():
                 # not using update to intercept changing in formats
                 if hasattr(comp, k):
                     setattr(comp, k, v)
             # comp.as_dict().update(data['info'])
             comp.stats = dict(**data['stats'])
             comp.rankings.update(data['rankings'])
             comp.tasks.extend(data['tasks'])
             comp.formula = Formula.from_dict(data['formula'])
             comp.data = dict(**data['file_stats'])
             results = []
             for p in data['results']:
                 '''get participants'''
                 participant = Participant(comp_id=comp_id)
                 participant.as_dict().update(p)
                 results.append(participant)
             # should already be ordered, so probably not necessary
             comp.participants = sorted(results, key=lambda k: k.score, reverse=True)
         return comp