Skip to content

Instantly share code, notes, and snippets.

@vittodevit
Created March 22, 2022 16:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vittodevit/d587fdb50517b8717133d019545ef220 to your computer and use it in GitHub Desktop.
Save vittodevit/d587fdb50517b8717133d019545ef220 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
from ansi.colour import fg, bg
from ansi.colour.fx import bold, reset
from tabulate import tabulate
from datetime import datetime
import hashlib
import requests
# CLIENT PER STUDENTI REGISTRO LAMPSCHOOL
# INSERISCI I DATI DI CONNESSIONE QUI
JSONLOGIN_URL = '' # http://indirizzo/lsapp/jsonlogin.php
LS_SUFFIX = '' # suffisso installazione, lo trovi nell'url durante un login
LS_USER = '' # nome utente
LS_PASSWORD = '' # password
sigle = []
materie = []
numeromaterie = 0
def sig2mat(sigla: str):
for x in range(0, numeromaterie):
if sigla.lower() == sigle[x].lower():
return materie[x]
return "null"
def convertiTipo(tipo):
if tipo == "S":
return "Scritto"
elif tipo == "O":
return "Orale"
elif tipo == "P":
return "Pratico"
else:
return "????"
def convertiGiustifica(giust):
if giust == "1":
message_fx = (fg.green, "Giustificato", reset)
else:
message_fx = (fg.red, "Da giustificare", reset)
return ''.join(map(str, message_fx))
def votoColorato(voto: float):
if voto >= 6:
# verde
message_fx = (fg.green, str(voto), reset)
elif voto >= 5:
# giallo
message_fx = (fg.yellow, str(voto), reset)
else:
# rosso
message_fx = (fg.red, str(voto), reset)
return ''.join(map(str, message_fx))
def getBoldString(message:str):
message_fx = (bold, message, reset)
return ''.join(map(str, message_fx))
def cmd_help():
print(getBoldString("help") + " : stampa questa lista")
print(getBoldString("resoconto") + " : informazioni generali sull'alunno")
print(getBoldString("comunicazioni") + " : stampa tutte le comunicazioni attive")
print(getBoldString("materie") + " : stampa la lista delle materie")
print(getBoldString("voti [sigla]") + " : stampa tutte le valutazioni per la materia selezionata")
print(getBoldString("note") + " : stampa la lista delle note individuali")
print(getBoldString("noteclasse") + " : stampa la lista delle note di classe")
print(getBoldString("assenze") + " : stampa la lista delle assenze")
print(getBoldString("ritardi") + " : stampa la lista dei ritardi")
print(getBoldString("uscite") + " : stampa la lista delle uscite")
print(getBoldString("argomenti materia [materia]") + " : stampa tutti gli argomenti svolti per la materia selezionata")
print(getBoldString("argomenti data [?data (gg/mm/aaaa)]") + " : stampa tutti gli argomenti svolti in quella data, se non specificata in quella odierna")
print(getBoldString("medie") + " : tabella delle medie di tutte le materie")
print(getBoldString("exit") + " : esce dal programma")
def cmd_resoconto(data):
table = [
["Nome", data['nome']],
["Cognome", data['cognome']],
["Classe", data['classe']],
["Voti", data['numerovoti']],
["Assenze", data['numeroassenze']],
["Ritardi", data['numeroritardi']],
["Uscite anticipate", data['numerouscite']],
["Note disciplinari", data['numeronote']],
["Comunicazioni", data['numerocomunicazioni']],
]
headers = ["Chiave", "Valore"]
print(tabulate(table, headers, tablefmt='pretty'))
def cmd_comunicazioni(data):
table = []
headers = ["Data", "Oggetto", "Messaggio"]
for x in range(0, data["numerocomunicazioni"]):
com = [
data["datecom"][x],
data["oggcom"][x],
data["testicom"][x],
]
table.append(com)
print(tabulate(table, headers, tablefmt='pretty'))
def cmd_materie(data):
table = []
headers = ["Sigla", "Denominazione"]
for x in range(0, data["numeromaterie"]):
com = [
data["siglematerie"][x],
data["materie"][x],
]
table.append(com)
print(tabulate(table, headers, tablefmt='pretty'))
def cmd_voti(data, materia):
table = []
headers = ["Data", "Tipo", "Voto", "Giudizio"]
for x in range(0, data["numerovoti"]):
if data["denominazione"][x] == materia:
val = [
data["date"][x],
convertiTipo(data["tipo"][x]),
votoColorato(float(data["voto"][x])),
data["giudizio"][x],
]
table.append(val)
print(tabulate(table, headers, tablefmt='pretty'))
def cmd_note(data):
table = []
headers = ["Data", "Nome Docente", "Nota"]
numnote = len(data["notealunno"])
if numnote > 0:
for x in range(0, numnote):
val = [
data["data"][x],
data["notedoc"][x] + data["cognomedoc"][x],
data["notealunno"][x]
]
table.append(val)
print(tabulate(table, headers, tablefmt='presto'))
else:
print("Nessuna nota trovata.")
def cmd_noteclasse(data):
table = []
headers = ["Data", "Nome Docente", "Nota"]
numnote = len(data["noteclasse"])
if numnote > 0:
for x in range(0, numnote):
val = [
data["datac"][x],
data["nomedc"][x] + " " + data["cognomedc"][x],
data["noteclasse"][x]
]
table.append(val)
print(tabulate(table, headers, tablefmt='presto'))
else:
print("Nessuna nota trovata.")
def cmd_assenze(data):
table = []
headers = ["Data", "Stato"]
ass = len(data["dateass"])
for x in range(0, ass):
val = [
data["dateass"][x],
convertiGiustifica(data["giustass"][x])
]
table.append(val)
print(tabulate(table, headers, tablefmt='pretty'))
def cmd_ritardi(data):
table = []
headers = ["Data", "Ora entrata", "Stato"]
ass = len(data["daterit"])
for x in range(0, ass):
val = [
data["daterit"][x],
data["oraent"][x],
convertiGiustifica(data["giustass"][x])
]
table.append(val)
print(tabulate(table, headers, tablefmt='pretty'))
def cmd_uscite(data):
table = []
headers = ["Data", "Ora uscita"]
ass = len(data["dateusc"])
for x in range(0, ass):
val = [
data["dateusc"][x],
data["oraus"][x],
]
table.append(val)
print(tabulate(table, headers, tablefmt='pretty'))
def cmd_argomenti_materia(data, materia):
table = []
headers = ["Data", "Argomento", "Attività"]
for x in range(0, len(data["matelez"])):
if data["matelez"][x] == materia:
val = [
data["datelez"][x],
data["argolez"][x],
data["attilez"][x],
]
table.append(val)
print(tabulate(table, headers, tablefmt='presto'))
def cmd_argomenti_data(data, dataa):
table = []
headers = ["Materia", "Argomento", "Attività"]
for x in range(0, len(data["matelez"])):
if data["datelez"][x] == dataa:
val = [
data["matelez"][x],
data["argolez"][x],
data["attilez"][x],
]
table.append(val)
print(tabulate(table, headers, tablefmt='pretty'))
def cmd_medie(data):
table = []
headers = ["Materia", "Globale", "Primo Quadrimestre", "Secondo Quadrimestre"]
for materia in data["materie"]:
somma_glob = 0
somma_q1 = 0
somma_q2 = 0
conteggio_glob = 0
conteggio_q1 = 0
conteggio_q2 = 0
fineprimo = datetime.strptime(data["fineprimo"], '%Y-%m-%d')
for x in range(0, data["numerovoti"]):
if data["denominazione"][x] == materia:
# trovato voto di quella materia
if float(data["voto"][x]) <= 10 and float(data["voto"][x]) >= 1:
# voto valido
dataconvertita = datetime.strptime(data["date"][x], "%d/%m/%Y")
if dataconvertita > fineprimo:
#secondo quadrimestre
somma_q2 += float(data["voto"][x])
conteggio_q2 += 1
else:
#primo quadrimestre
somma_q1 += float(data["voto"][x])
conteggio_q1 += 1
#globale
somma_glob += float(data["voto"][x])
conteggio_glob += 1
if conteggio_glob > 0:
# entry tabella
if conteggio_q1 > 0:
media_q1 = votoColorato(round(somma_q1 / conteggio_q1, 2))
else:
media_q1 = "-"
if conteggio_q2 > 0:
media_q2 = votoColorato(round(somma_q2 / conteggio_q2, 2))
else:
media_q2 = "-"
val = [
materia,
votoColorato(round(somma_glob / conteggio_glob, 2)),
media_q1,
media_q2,
]
table.append(val)
print(tabulate(table, headers, tablefmt='pretty'))
# calcola md5 password e parametri
pass_md5 = hashlib.md5(LS_PASSWORD.encode())
params = dict(
utente=LS_USER,
suffisso=LS_SUFFIX,
password=pass_md5.hexdigest(),
)
# ottieni dati risposta
resp = requests.get(url=JSONLOGIN_URL, params=params)
try:
data = resp.json()
sigle = data["siglematerie"]
materie = data["materie"]
numeromaterie = data["numeromaterie"]
except :
print("Impossibile connettersi")
else:
print(
"Hai effettuato l'accesso come " +
getBoldString(data["cognome"] + " " + data["nome"]) + " [" + str(data["alunno"]) + "] - " +
getBoldString(data["classe"])
)
print("Digita 'help' per ottenere la lista dei comandi disponibili!")
# resoconto(data)
command = ""
while(command != "exit"):
command = input("> ")
# converti comando in tuple per riconoscimento argomenti
commandline = tuple(map(str, command.split(' ')))
if commandline[0] == "exit":
print("Bye <3")
elif commandline[0] == "help":
cmd_help()
elif commandline[0] == "resoconto":
cmd_resoconto(data)
elif commandline[0] == "comunicazioni":
cmd_comunicazioni(data)
elif commandline[0] == "materie":
cmd_materie(data)
elif commandline[0] == "voti":
# controlla secondo argomento
if len(commandline) > 1:
# converti sigla in materia
materia = sig2mat(commandline[1])
if materia == "null":
print("Materia inesistente, per ottenere la lista delle materie digita il comando 'materie'")
else:
cmd_voti(data, materia)
else:
print("Specifica una materia tramite la sua sigla, per ottenere la lista delle materie digita il comando 'materie'")
elif commandline[0] == "note":
cmd_note(data)
elif commandline[0] == "noteclasse":
cmd_noteclasse(data)
elif commandline[0] == "assenze":
cmd_assenze(data)
elif commandline[0] == "ritardi":
cmd_ritardi(data)
elif commandline[0] == "uscite":
cmd_uscite(data)
elif commandline[0] == "argomenti":
# controlla primo argomento
if len(commandline) > 1:
if commandline[1] == "materia":
# controlla secondo argomento
if len(commandline) > 1:
# converti sigla in materia
materia = sig2mat(commandline[2])
if materia == "null":
print("Materia inesistente, per ottenere la lista delle materie digita il comando 'materie'")
else:
cmd_argomenti_materia(data, materia)
else:
print("Specifica una materia tramite la sua sigla, per ottenere la lista delle materie digita il comando 'materie'")
elif commandline[1] == "data":
# codice data
if len(commandline) > 2:
cmd_argomenti_data(data, commandline[2])
else:
oggi = datetime.now().strftime("%d/%m/%Y")
print("Selezionata automaticamente la data di oggi, " + getBoldString(oggi))
cmd_argomenti_data(data, oggi)
else:
print("Specifica come primo argomento una modalità per 'materia' o per 'data'.")
else:
print("Specifica come primo argomento una modalità per 'materia' o per 'data'.")
elif commandline[0] == "medie":
cmd_medie(data)
else:
print("Comando non trovato. Digita 'help' per ottenere la lista dei comandi disponibili!")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment