<commit_before>from django.db import models, connection
from datetime import date, timedelta, datetime, time
from django.utils import timezone
from django.db.models import Avg, Min, Max, StdDev, Count
from .autre import dictfetchall
from .semaine import Semaine
from .eleve import Eleve
from ecolle.settings import HEURE_DEBUT, HEURE_FIN, INTERVALLE

def array2tree(tableau, profondeurs = None, funcs = None, x = 0, y = 0, taille = False):
    """fonction récursive pour transformer un tableau de tableaux en arbre à poids"""
    if taille is False:
        taille = len(tableau)
    prof = 1 if profondeurs is None else profondeurs[0]
    func = (lambda t:t) if funcs is None else funcs[0]
    if taille == 0:
        return []
    if y + prof == len(tableau[0]): # si on est au bout
        return [func(tableau[x+i][y:y+prof]) for i in range(taille)]
    longueurs = []
    positions = [x]
    longueur = 1
    for i in range(taille-1):
        if tableau[x+i][y] == tableau[x+i+1][y]:
            longueur +=1
        else:
            longueurs.append(longueur)
            positions.append(x+i+1)
            longueur = 1
    longueurs.append(longueur)
    new_prof = None if profondeurs is None else profondeurs[1:]
    new_func = None if funcs is None else funcs[1:]
    return [(*func(tableau[position][y:y+prof]), array2tree(tableau, new_prof, new_func, position, y+prof, longueur), longueur) for longueur, position in zip(longueurs,positions)]




class NoteManager(models.Manager):
    def listeNotesApp(self,colleur):
        requete = "SELECT s.numero semaine, n.id, n.date_colle, n.heure, n.note, n.commentaire, n.matiere_id, n.classe_id, n.eleve_id, n.rattrapee\
                   FROM accueil_note n\
                   INNER JOIN accueil_semaine s\
                   ON n.semaine_id=s.id\
                   WHERE n.colleur_id= %s\
                   ORDER BY s.numero DESC, n.date_colle DESC, n.heure DESC"
        with connection.cursor() as cursor:
            cursor.execute(requete,(colleur.pk,))
            notes = dictfetchall(cursor)
            return [[note["id"], note["matiere_id"], note["classe_id"], note["note"],  note["commentaire"], note["semaine"], datetime.combine(note["date_colle"],
                time(note["heure"] // 60, note["heure"] % 60)).replace(tzinfo=timezone.utc).timestamp(), note["eleve_id"], bool(note["rattrapee"])] for note in notes]

    def listeNotes(self,colleur,classe,matiere):
        requete = "SELECT s.numero semaine, p.titre, p.detail, n.date_colle, n.heure, COALESCE(u.first_name,'<NAME>') prenom, COALESCE(u.last_name,'') nom, n.note, n.commentaire, n.id pk\
                   FROM accueil_note n\
                   LEFT OUTER JOIN accueil_eleve e\
                   ON n.eleve_id = e.id\
                   LEFT OUTER JOIN accueil_user u\
                   ON u.eleve_id = e.id\
                   INNER JOIN accueil_semaine s\
                   ON n.semaine_id=s.id\
                   LEFT OUTER JOIN accueil_programme_semaine ps\
                   ON ps.semaine_id = s.id\
                   LEFT OUTER JOIN accueil_programme p\
                   ON p.classe_id= %s AND p.matiere_id = %s AND ps.programme_id = p.id\
                   WHERE n.classe_id = %s AND n.colleur_id= %s AND n.matiere_id = %s\
                   ORDER BY s.numero DESC, n.date_colle DESC, n.heure DESC, u.last_name, u.first_name"
        with connection.cursor() as cursor:
            cursor.execute(requete,(classe.pk,matiere.pk,classe.pk,colleur.pk,matiere.pk))
            notes = dictfetchall(cursor)<commit_msg>correction bug dictfectchall au lieu de fetchall<commit_after>from django.db import models, connection
from datetime import date, timedelta, datetime, time
from django.utils import timezone
from django.db.models import Avg, Min, Max, StdDev, Count
from .autre import dictfetchall
from .semaine import Semaine
from .eleve import Eleve
from ecolle.settings import HEURE_DEBUT, HEURE_FIN, INTERVALLE

def array2tree(tableau, profondeurs = None, funcs = None, x = 0, y = 0, taille = False):
    """fonction récursive pour transformer un tableau de tableaux en arbre à poids"""
    if taille is False:
        taille = len(tableau)
    prof = 1 if profondeurs is None else profondeurs[0]
    func = (lambda t:t) if funcs is None else funcs[0]
    if taille == 0:
        return []
    if y + prof == len(tableau[0]): # si on est au bout
        return [func(tableau[x+i][y:y+prof]) for i in range(taille)]
    longueurs = []
    positions = [x]
    longueur = 1
    for i in range(taille-1):
        if tableau[x+i][y] == tableau[x+i+1][y]:
            longueur +=1
        else:
            longueurs.append(longueur)
            positions.append(x+i+1)
            longueur = 1
    longueurs.append(longueur)
    new_prof = None if profondeurs is None else profondeurs[1:]
    new_func = None if funcs is None else funcs[1:]
    return [(*func(tableau[position][y:y+prof]), array2tree(tableau, new_prof, new_func, position, y+prof, longueur), longueur) for longueur, position in zip(longueurs,positions)]




class NoteManager(models.Manager):
    def listeNotesApp(self,colleur):
        requete = "SELECT s.numero semaine, n.id, n.date_colle, n.heure, n.note, n.commentaire, n.matiere_id, n.classe_id, n.eleve_id, n.rattrapee\
                   FROM accueil_note n\
                   INNER JOIN accueil_semaine s\
                   ON n.semaine_id=s.id\
                   WHERE n.colleur_id= %s\
                   ORDER BY s.numero DESC, n.date_colle DESC, n.heure DESC"
        with connection.cursor() as cursor:
            cursor.execute(requete,(colleur.pk,))
            notes = dictfetchall(cursor)
            return [[note["id"], note["matiere_id"], note["classe_id"], note["note"],  note["commentaire"], note["semaine"], datetime.combine(note["date_colle"],
                time(note["heure"] // 60, note["heure"] % 60)).replace(tzinfo=timezone.utc).timestamp(), note["eleve_id"], bool(note["rattrapee"])] for note in notes]

    def listeNotes(self,colleur,classe,matiere):
        requete = "SELECT s.numero semaine, p.titre, p.detail, n.date_colle, n.heure, COALESCE(u.first_name,'<NAME>') prenom, COALESCE(u.last_name,'') nom, n.note, n.commentaire, n.id pk\
                   FROM accueil_note n\
                   LEFT OUTER JOIN accueil_eleve e\
                   ON n.eleve_id = e.id\
                   LEFT OUTER JOIN accueil_user u\
                   ON u.eleve_id = e.id\
                   INNER JOIN accueil_semaine s\
                   ON n.semaine_id=s.id\
                   LEFT OUTER JOIN accueil_programme_semaine ps\
                   ON ps.semaine_id = s.id\
                   LEFT OUTER JOIN accueil_programme p\
                   ON p.classe_id= %s AND p.matiere_id = %s AND ps.programme_id = p.id\
                   WHERE n.classe_id = %s AND n.colleur_id= %s AND n.matiere_id = %s\
                   ORDER BY s.numero DESC, n.date_colle DESC, n.heure DESC, u.last_name, u.first_name"
        with connection.cursor() as cursor:
            cursor.execute(requete,(classe.pk,matiere.pk,classe.pk,colleur.pk,matiere.pk))
            notes = cursor.fetchall()
{'fraction_non_alphanumeric': 0.11323119777158774, 'fraction_numerical': 0.00584958217270195, 'mean_word_length': 2.4195238095238096, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6473604', 'n_tokens_mistral': 2509, 'n_tokens_neox': 2399, 'n_words': 627}