Skip to content

Commit

Permalink
FSDB export updated
Browse files Browse the repository at this point in the history
  • Loading branch information
biuti committed Aug 30, 2023
1 parent 9143ce6 commit 5c923a9
Showing 1 changed file with 99 additions and 6 deletions.
105 changes: 99 additions & 6 deletions airscore/core/fsdb.py
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,9 @@ def to_file(self, participants_fsdb: bool = False):
- filename: STR
- fsdb: FSDB xml data, to be used in frontend."""
from frontendUtils import get_pretty_data
from compUtils import get_comp_json
from compUtils import get_comp_json, get_comp_json_filename
from task import get_task_json
from result import get_comp_team_scoring, get_comp_country_scoring

formula = self.comp.formula
pilots = self.comp.participants
Expand Down Expand Up @@ -234,9 +236,9 @@ def to_file(self, participants_fsdb: bool = False):
for k, v in comp_attr.items():
comp.set(k, str(v))

formula = ET.SubElement(comp, 'FsScoreFormula')
f = ET.SubElement(comp, 'FsScoreFormula')
for k, v in formula_attr.items():
formula.set(k, str(v))
f.set(k, str(v))

notes = ET.SubElement(comp, 'FsCompetitionNotes')
notes.text = CDATA('Generated by AirScore')
Expand Down Expand Up @@ -286,7 +288,7 @@ def to_file(self, participants_fsdb: bool = False):
task_s = ET.SubElement(task, 'FsTaskState')
task_p = ET.SubElement(task, 'FsParticipants')
task_sp = ET.SubElement(task, 'FsTaskScoreParams')
# task_tr = ET.SubElement(task, 'FsTaskResults')
task_tr = ET.SubElement(task, 'FsTaskResults')

# tf = dict(t.formula.to_dict(), **t.stats)

Expand Down Expand Up @@ -547,6 +549,39 @@ def to_file(self, participants_fsdb: bool = False):
for k, v in r_attr.items():
pil_r.set(k, str(v))

'''FsTaskResults'''
result = get_pretty_data(get_task_json(t.task_id))
r = result['results']
rankings = result['rankings']
for el in rankings:
rank_id = el['rank_id']
taskresult = ET.SubElement(task_tr, 'FsTaskResult')
taskresult.set('id', str(el['rank_name']).lower())
taskresult.set('title', el['rank_name'])
taskresult.set('ts', '')
taskresult.set('result_pattern', ('#0.0' if formula.task_result_decimal == 1 else '#0'))
scorep = ET.SubElement(taskresult, 'FsTaskScoreParams')
for k, v in sp_attr.items():
scorep.set(k, str(v))
for i, tp in enumerate(tps):
sp_dist = ET.SubElement(scorep, 'FsTaskDistToTp')
sp_dist.set('tp_no', str(i + 1))
sp_dist.set('distance', str(t.partial_distance[i]))
'''FsTaskResultParticipants'''
taskp = ET.SubElement(taskresult, 'FsTaskResultParticipants')
for p in [x for x in r if x['rankings'][rank_id]]:
pr = ET.SubElement(taskp, 'FsTaskParticipantResult')
pr.set('id', str(p['ID']))
pr.set('rank', str(p['rankings'][rank_id]).split(' ')[0])
pr.set('distance_points', p['distance_score'] or '0')
pr.set('ddeparture_points', '0')
pr.set('arrival_points', p['arrival_score'] or '0')
pr.set('leading_points', p['departure_score'] or '0')
pr.set('time_points', p['time_score'] or '0')
pr.set('points', p['score'].split('>')[1].split('<')[0] or '0')
if p['result_type'].lower() in ('abs', 'dnf', 'nyp'):
pr.set('no_distance', p['result_type'].upper())

'''FsCompetitionResults'''
compresults = ET.SubElement(comp, 'FsCompetitionResults')
result = get_pretty_data(get_comp_json(self.comp.comp_id))
Expand All @@ -560,8 +595,8 @@ def to_file(self, participants_fsdb: bool = False):
cr.set('top', 'all') # ?
cr.set('tasks', ';'.join([str(i) for i in task_ids.keys()]))
cr.set('ts', '')
cr.set('task_result_pattern', '#0.0' if self.comp.formula.task_result_decimal == 1 else '#0')
cr.set('comp_result_pattern', '#0.0' if self.comp.formula.comp_result_decimal == 1 else '#0')
cr.set('task_result_pattern', '#0.0' if formula.task_result_decimal == 1 else '#0')
cr.set('comp_result_pattern', '#0.0' if formula.comp_result_decimal == 1 else '#0')
for p in [x for x in r if x['rankings'][rank_id]]:
pr = ET.SubElement(cr, 'FsParticipant')
pr.set('id', str(p['ID']))
Expand All @@ -575,6 +610,64 @@ def to_file(self, participants_fsdb: bool = False):
pt.set('counting_points', x[1]['score'])
pt.set('counts', '1')

if formula.team_scoring or formula.country_scoring:
'''FsTeamResults'''
teamresults = ET.SubElement(comp, 'FsTeamResults')
if formula.team_scoring:
filename = get_comp_json_filename(self.comp.comp_id)
results = get_comp_team_scoring(filename)
tr = ET.SubElement(teamresults, 'FsTeamResult')
tr.set('id', 'team')
tr.set('title', 'Team Results')
tr.set('tasks', ';'.join([str(i) for i in task_ids.keys()]))
tr.set('ts', '')
tr.set('task_result_pattern', '#0.0' if formula.task_result_decimal == 1 else '#0')
tr.set('comp_result_pattern', '#0.0' if formula.comp_result_decimal == 1 else '#0')
for idx, team in enumerate(sorted(results['teams'], key=lambda k: k['score'], reverse = 1), start=1):
team_pilots = sorted([p for p in results['data'] if p['team'].lower() == team['name'].lower()], key=lambda k: k['score'], reverse = 1)
print(f"Team: {team['name']} | pilots: {[p['name'] for p in team_pilots]}")
t = ET.SubElement(tr, 'FsTeam')
t.set('rank', str(idx))
t.set('name', str(team['name']))
t.set('points', str(team['score']))
for p in team_pilots:
par = ET.SubElement(t, 'FsParticipant')
par.set('id', str(p['ID']))
res = list(el for el in p['results'].items() if el[0] in task_ids.values())
print(f"res: {res}")
for x in res:
print(f"ID: {x[0]} | items: {task_ids.items()}")
pt = ET.SubElement(par, 'FsTask')
pt.set('id', str(next(k for k, v in task_ids.items() if v == x[0])))
pt.set('counts', str(x[1]['perf']))

if formula.country_scoring:
results = get_comp_country_scoring(filename)
tr = ET.SubElement(teamresults, 'FsTeamResult')
tr.set('id', 'nat_code_3166_a3')
tr.set('title', 'Nations Results')
tr.set('tasks', ';'.join([str(i) for i in task_ids.keys()]))
tr.set('ts', '')
tr.set('task_result_pattern', '#0.0' if formula.task_result_decimal == 1 else '#0')
tr.set('comp_result_pattern', '#0.0' if formula.comp_result_decimal == 1 else '#0')
for idx, team in enumerate(sorted(results['teams'], key=lambda k: k['score'], reverse = 1), start=1):
team_pilots = sorted([p for p in results['data'] if p['team'].lower() == team['name'].lower()], key=lambda k: k['score'], reverse = 1)
print(f"Team: {team['name']} | pilots: {[p['name'] for p in team_pilots]}")
t = ET.SubElement(tr, 'FsTeam')
t.set('rank', str(idx))
t.set('name', str(team['name']))
t.set('points', str(team['score']))
for p in team_pilots:
par = ET.SubElement(t, 'FsParticipant')
par.set('id', str(p['ID']))
res = list(el for el in p['results'].items() if el[0] in task_ids.values())
print(f"res: {res}")
for x in res:
print(f"ID: {x[0]} | items: {task_ids.items()}")
pt = ET.SubElement(par, 'FsTask')
pt.set('id', str(next(k for k, v in task_ids.items() if v == x[0])))
pt.set('counts', str(x[1]['perf']))

'''creates the file to store'''
fsdb = ET.tostring(root, pretty_print=True, xml_declaration=True, encoding='UTF-8')

Expand Down

0 comments on commit 5c923a9

Please sign in to comment.