Created
March 22, 2022 16:33
-
-
Save vittodevit/d587fdb50517b8717133d019545ef220 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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