1
0
mirror of https://gitlab.com/animath/si/plateforme.git synced 2025-06-29 20:31:11 +02:00

Add script to parse notes in Google Sheets

Signed-off-by: Emmy D'Anello <emmy.danello@animath.fr>
This commit is contained in:
Emmy D'Anello
2024-03-30 16:36:57 +01:00
parent b9295cc199
commit 234b84ef60
4 changed files with 76 additions and 8 deletions

View File

@ -422,9 +422,6 @@ class Tournament(models.Model):
def create_spreadsheet(self):
if self.notes_sheet_id:
gc = gspread.service_account_from_dict(settings.GOOGLE_SERVICE_CLIENT)
spreadsheet = gc.open_by_key(self.notes_sheet_id)
spreadsheet.update_locale("fr_FR")
return self.notes_sheet_id
gc = gspread.service_account_from_dict(settings.GOOGLE_SERVICE_CLIENT)
@ -955,6 +952,34 @@ class Pool(models.Model):
worksheet.insert_row([str(jury), jury.id], max_row)
max_row += 1
def parse_spreadsheet(self):
gc = gspread.service_account_from_dict(settings.GOOGLE_SERVICE_CLIENT)
self.tournament.create_spreadsheet()
spreadsheet = gc.open_by_key(self.tournament.notes_sheet_id)
worksheet = spreadsheet.worksheet(f"Poule {self.short_name}")
average_cell = worksheet.find("Moyenne")
min_row = 5
max_row = average_cell.row - 2
data = worksheet.get_values(f"A{min_row}:AF{max_row}")
if not data or not data[0]:
return
passage_width = 7 if self.participations.count() == 4 else 6
for line in data:
jury_name = line[0]
jury_id = line[1]
if not jury_id.isnumeric() or int(jury_id) not in self.juries.values_list("id", flat=True):
print(format_lazy(_("The jury {jury} is not part of the jury for this pool."), jury=jury_name))
continue
jury = self.juries.get(id=jury_id)
for i, passage in enumerate(self.passages.all()):
note = passage.notes.get(jury=jury)
note_line = line[2 + i * passage_width:2 + (i + 1) * passage_width]
note.set_all(*note_line)
note.save()
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
self.update_juries_lines_spreadsheet()
super().save(force_insert, force_update, using, update_fields)
@ -1358,10 +1383,6 @@ class Note(models.Model):
def has_any_note(self):
return any(self.get_all())
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
self.update_spreadsheet()
def __str__(self):
return _("Notes of {jury} for {passage}").format(jury=self.jury, passage=self.passage)