Skip to content

Importare la gara

I dati del contest devono essere salvati dentro la directory data del progetto. I file possono essere in formato TOML, YAML, CSV, JSON o JSONL.

Se non l'hai già fatto, accedi a Google Cloud.

Importare le gare

I contests sono descritti dal file data/contests.{toml,yaml,csv,json,jsonl}. Il formato è il seguente, i campi possono essere sia in formato camelCase che snake_case:

CampoDescrizioneTipoNote
idID della gara.string
nameNome della gara.string
long_nameNome esteso della gara.stringOpzionale.
problem_idsID dei problemi.string[]
user_dataInformazioni personali richieste agli studenti durante la registrazione.object[]
has_variantsSe ci sono più varianti dei testi.boolean
has_onlineSe la gara può essere svolta online.boolean
has_pdfSe la gara può essere svolta in modalità cartacea.boolean
statement_versionVersione dei testi.numberDeve essere incrementato ogni volta che i testi vengono reimportati.
allow_student_importSe gli insegnanti possono possono importare gli studenti da un CSV.booleanOpzionale.
allow_student_editbooleanOpzionale.
allow_answer_editbooleanOpzionale.
instructionsInformazioni generali in Markdown che vengono mostrare nella pagina dell'insegnante.stringOpzionale.

Se has_online è true, i seguenti campi sono richiesti:

CampoDescrizioneTipoNote
contest_window_startData di inizio della finestra di svolgimento della gara.date
contest_window_endData di fine della finestra di svolgimento della gara.date
durationDurata della gara in minuti.number
allow_restartSe gli insegnanti possono far partire la gara più volte.boolean

Le informazioni personali nel campo user_data devono avere il seguente formato:

CampoDescrizioneTipoNote
nameNome del campo.string
labelNome leggibile del campo.string
typeTipo del campo."text", "number" o "date"
sizeLarghezza del campo nella tabella degli insegnanti."xs", "sm", "md" o "lg"Opzionale.
minValore minimo del campo.number o dateRichiesto per i campi data, opzionale per i campi numerici.
maxValore massimo del campo.number o dateRichiesto per i campi data, opzionale per i campi numerici.
pinnedSe appuntare il campo a sinistra nella tabella degli insegnanti.booleanOpzionale.
Esempio di file
toml
[oii-scolastiche]
name = "OII - Scolastiche"
long_name = "Olimpiadi Italiane di Informatica 2023/2024 - Selezione scolastica"
problem_ids = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13.1, 13.2, 14.1, 14.2, 15.1, 15.2, 16.1, 16.2]
user_data = [
    { name = "surname",      label = "Cognome",         type = "text",   pinned = true },
    { name = "name",         label = "Nome",            type = "text" },
    { name = "classYear",    label = "Classe",          type = "number", size = "xs", min = 1, max = 5 },
    { name = "classSection", label = "Sezione",         type = "text",   size = "xs" },
    { name = "birthDate",    label = "Data di nascita", type = "date",   min = 1990-01-01, max = 2013-12-31 },
]
has_variants = true
has_online = true
has_pdf = true
statement_version = 1
allow_student_import = true
allow_student_edit = true
allow_answer_edit = true
contest_window_start = 2023-12-14T08:00:00
contest_window_end = 2023-12-14T16:00:00
duration = 90
allow_restart = true
instructions = """
Istruzioni per la gara:
- queste sono le istruzioni per la gara.
"""
yaml
oii-scolastiche:
  name: OII - Scolastiche
  long_name: Olimpiadi Italiane di Informatica 2023/2024 - Selezione scolastica
  problem_ids: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13.1, 13.2, 14.1, 14.2, 15.1, 15.2, 16.1, 16.2]
  user_data:
    - name: surname
      label: Cognome
      type: text
      pinned: true
    - name: name
      label: Nome
      type: text
    - name: classYear
      label: Classe
      type: number
      size: xs
      min: 1
      max: 5
    - name: classSection
      label: Sezione
      type: text
      size: xs
    - name: birthDate
      label: Data di nascita
      type: date
      min: 1990-01-01
      max: 2013-12-31
  has_variants: true
  has_online: true
  has_pdf: true
  statement_version: 1
  allow_student_import: true
  allow_student_edit: true
  allow_answer_edit: true
  contest_window_start: 2023-12-14T08:00:00
  contest_window_end: 2023-12-14T16:00:00
  duration: 90
  allow_restart: true
  instructions: |
    Istruzioni per la gara:
    - queste sono le istruzioni per la gara.
json
{
  "oii-scolastiche": {
    "name": "OII - Scolastiche",
    "long_name": "Olimpiadi Italiane di Informatica 2023/2024 - Selezione scolastica",
    "problem_ids": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13.1, 13.2, 14.1, 14.2, 15.1, 15.2, 16.1, 16.2],
    "user_data": [
      {
        "name": "surname",
        "label": "Cognome",
        "type": "text",
        "pinned": true
      },
      {
        "name": "name",
        "label": "Nome",
        "type": "text"
      },
      {
        "name": "classYear",
        "label": "Classe",
        "type": "number",
        "size": "xs",
        "min": 1,
        "max": 5
      },
      {
        "name": "classSection",
        "label": "Sezione",
        "type": "text",
        "size": "xs"
      },
      {
        "name": "birthDate",
        "label": "Data di nascita",
        "type": "date",
        "min": "1990-01-01",
        "max": "2013-12-31"
      }
    ],
    "has_variants": true,
    "has_online": true,
    "has_pdf": true,
    "statement_version": 1,
    "allow_student_import": true,
    "allow_student_edit": true,
    "allow_answer_edit": true,
    "contest_window_start": "2023-12-14T08:00:00",
    "contest_window_end": "2023-12-14T16:00:00",
    "duration": 90,
    "allow_restart": true,
    "instructions": "Istruzioni per la gara:\n - queste sono le istruzioni per la gara.\n"
  }
}

Per importare i contests usa il comando:

sh
$ npx quizms firebase import --contests

Importare le scuole e gli insegnanti

Le scuole e gli insegnanti sono descritti dal file data/schools.{toml,yaml,csv,json,jsonl}. Il formato è il seguente:

CampoDescrizioneTipoNote
idCodice meccanografico della scuola.string
nameNome della scuola.string
contest_idsID delle gare a cui la scuola partecipa.string oppure string[]È possibile specificare un picomatch, ad esempio "*" indica che la scuola partecipa a tutte le gare.
passwordPassword della scuola.string
pdf_variantsVarianti cartacee assegnate alla scuola.string[]Opzionale.
Esempio di file
csv
id,name,contest_ids,password
PNTF01000A,ITST J.F.Kennedy,oii-scolastiche,OKYkIZ6xFHPqyFS8HdUk
BOIS01400R,IIS Francesco Alberghetti,oii-scolastiche,n6r2yEKwAxJxBUCad7eS
yaml
PNTF01000A:
  name: ITST J.F.Kennedy
  contest_ids: [oii-scolastiche]
  password: OKYkIZ6xFHPqyFS8HdUk
BOIS01400R:
  name: IIS Francesco Alberghetti
  contest_ids: [oii-scolastiche]
  password: n6r2yEKwAxJxBUCad7eS
json
{
  "PNTF01000A": {
    "id":,
    "name": "ITST J.F.Kennedy",
    "contest_ids": ["oii-scolastiche"],
    "password": "OKYkIZ6xFHPqyFS8HdUk"
  },
  "BOIS01400R": {
    "id": "BOIS01400R",
    "name": "IIS Francesco Alberghetti",
    "contest_ids": ["oii-scolastiche"],
    "password": "n6r2yEKwAxJxBUCad7eS"
  }
}

Per importare le scuole usa il comando:

sh
$ npx quizms firebase import --schools --teachers

Importare le varianti

Le configurazioni per generare le varianti devono essere salvate in un file data/variants.{toml,yaml,csv,json,jsonl} con il seguente formato:

CampoDescrizioneTipoNote
idID della gara.string
secretSegreto usato per generare le varianti. Non deve essere reso pubblico.string
entryFile MDX principale contenente i testi dei problemi.stringTipicamente contest/contest.mdx.
shuffle_problemsSe i problemi dentro una sezioni vengono mescolati.boolean
shuffle_answersSe le risposte vengono mescolate.boolean
variant_idsID delle varianti online.string[]
pdf_variant_idsID delle varianti cartacee.string[]
pdf_per_schoolNumero di varianti cartacee da assegnare ad ogni scuola.number
Esempio di file
toml
[oii-scolastiche]
secret = "FbpU9ertN5WlCngQNqOK"
entry = "contest/contest.mdx"
shuffle_problems = true
shuffle_answers = true
variant_ids = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
pdf_variant_ids = [20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
pdf_per_school = 3
yaml
oii-scolastiche:
  secret: FbpU9ertN5WlCngQNqOK
  entry: contest/contest.mdx
  shuffle_problems: true
  shuffle_answers: true
  variant_ids: [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
  pdf_variant_ids: [20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
  pdf_per_school: 3
json
{
  "oii-scolastiche": {
    "secret": "FbpU9ertN5WlCngQNqOK",
    "entry": "contest/contest.mdx",
    "shuffle_problems": true,
    "shuffle_answers": true,
    "variant_ids": [10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
    "pdf_variant_ids": [20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
    "pdf_per_school": 3
  }
}

Per generare le varianti usa il seguente comando:

sh
$ npx quizms variants

TIP

Puoi anche generare le varianti manualmente, in tal caso ogni variante deve essere definita in un file JSON chiamato variants/$ID/schema.json con il seguente formato:

CampoDescrizioneTipoNote
idID della variante.string
contestIdID del contest a cui appartiene la variante.string
schemaLo schema delle domande.object

Lo schema è un oggetto contente, per ogni domanda, un oggetto con il seguente formato:

CampoDescrizioneTipoNote
typeTipo di domanda."text", "number" o "points"
originalIdID della domanda prima del shuffle.stringOpzionale.
optionsCorrectRisposte corrette.string[]Opzionale.
optionsBlankRisposte in bianco.string[]Opzionale.
optionsWrongRisposte non corrette.string[]Opzionale.
pointsCorrectPunti per risposta corretta.numberOpzionale.
pointsBlankPunti per risposta in bianco.numberOpzionale.
pointsWrongPunti per risposta sbagliata.numberOpzionale.

Se le opzioni o i punti non sono specificati, il punteggio degli studenti non verrà calcolato.

Esempio di variante
json
{
  "id": "10",
  "contestId": "oii-scolastiche",
  "schema": {
    "1": {
      "type": "text",
      "optionsCorrect": ["A"],
      "optionsBlank": ["-"],
      "optionsWrong": ["B","C","D","E"],
      "pointsCorrect": 5,
      "pointsBlank": 1,
      "pointsWrong": 0
    },
    "2": {
      "type": "text",
      "optionsCorrect": ["B"],
      "optionsBlank": ["-"],
      "optionsWrong": ["A","C","D","E"],
      "pointsCorrect": 5,
      "pointsBlank": 1,
      "pointsWrong": 0
    }
  }
}

Per importare le varianti usa il comando:

sh
$ npx quizms firebase import --variants --variant-mappings --statements

Importare le prove cartacee

Per importare i PDF delle prove cartacee usa i comandi:

sh
$ npx quizms print
$ npx quizms firebase import --pdfs

Eseguire il deploy del sito

Per eseguire il deploy del sito usa i comandi:

sh
$ firebase deploy --only hosting