예제 #1
0
def _modification():
    def postaction():
        ''' Actions à effectuer en sortie '''
        name = saisie.get()
        if DEBUG:
            print("sortie:", saisie.get())
        name_actif = sequence_active.name
        names = [seq.name for seq in liste_des_sequences]
        names = [n for n in names if n != name_actif]
        if name:
            if name in names:
                barre_de_message('Ce nom existe déjà', messager)
            else:
                barre_de_message('Séquence validée', messager)
        else:
            barre_de_message('Entrez un nom de séquence', messager)
            return None
        if sequence_active.is_invalide():
            mess = 'Filtres incompatibles'
            barre_de_message(mess, messager)
        else :    
            sequence_active.name = name
            barre_de_menu(lm_sequence, menu)
            liste_des_sequences.sort(key=lambda seq: seq.name)
            writesequences(liste_des_sequences)
            clear(fenetre)

    def annul():
        barre_de_menu(lm_sequence, menu)
        clear(fenetre)

    barre_de_validation(menu, postaction, annul)
    saisie = regler_sequence(sequence_active, fenetre, messager)
예제 #2
0
def c_nouvelle_sequence():
    ''' Crée une nouvelle séquence de filtres'''
    def postaction():
        global sequence_active
        ''' Actions à effectuer en sortie '''
        names = [seq.name for seq in liste_des_sequences]
        name = saisie.get()
        if name in names:
            mess = "Ce nom existe déjà !"
            barre_de_message(mess, messager)
        elif name == "":
            mess = 'Entrez un nom de séquence'
            barre_de_message(mess, messager)
        elif sequence.is_invalide():
            mess = 'Filtres incompatibles'
            barre_de_message(mess, messager)
        else:
            sequence.name = name
            sequence_active = sequence
            barre_de_menu(lm_sequence, menu)
            liste_des_sequences.append(sequence)
            liste_des_sequences.sort(key=lambda seq: seq.name)
            writesequences(liste_des_sequences)
            clear(fenetre)

    def annul():
        barre_de_menu(lm_sequence, menu)
        clear(fenetre)

    clear(fenetre)
    sequence = Sequence()
    barre_de_validation(menu, postaction, annul)
    saisie = regler_sequence(sequence, fenetre, messager)
예제 #3
0
def _selectionne_sequence(postaction):
    def validate(event=None):
        global sequence_active
        if DEBUG:
            print("Validation sequence")
        try:
            index_sequence, = menu_deroulant.curselection()
        except ValueError:
            barre_de_message('Sélectionnez une séquence', messager)
            return None
        sequence_active = liste_des_sequences[index_sequence]
        postaction()

    def escape(event=None):
        barre_de_menu(lm_sequence, menu)
        clear(fenetre)

    if DEBUG:
        print('chosir sequence')
    defilement = tk.Scrollbar(fenetre, orient='vertical')
    defilement.grid(row=1, column=2, sticky='ns')
    lab = tk.Label(fenetre, text='Choisir la séquence active')
    lab.grid(row=0, column=0, columnspan=2)
    noms_de_sequences = [seq.name for seq in liste_des_sequences]
    menu_deroulant = tk.Listbox(fenetre,
                                yscrollcommand=defilement.set,
                                height=9)
    defilement.configure(command=menu_deroulant.yview)
    menu_deroulant.bind("<Double-Button-1>", validate)
    menu_deroulant.grid(row=1, column=0, columnspan=2)
    for nom in noms_de_sequences:
        menu_deroulant.insert(tk.END, nom)
    #mini = tk.Frame(fenetre).grid(row=2, column=0)
    barre_de_validation(menu, validate, escape)
예제 #4
0
def c_modifier_filtre():
    def validate(event=None):
        if DEBUG:
            print("validation")
        try:
            index_filtre, = menu_deroulant.curselection()
            clear(fenetre)
            c_regler_filtre(index_filtre)
        except ValueError:
            mess = 'Choisir le filtre à modifier'
            barre_de_message(mess, messager)
        #c_regler_filre()

    def annuler():
        clear(fenetre)
        barre_de_menu(lm_filtre, menu)

    if DEBUG:
        print('modifier filtre')
    clear(fenetre)
    defilement = tk.Scrollbar(fenetre, orient='vertical')
    defilement.grid(row=1, column=1, sticky='ns')
    lab = tk.Label(fenetre, text='Choisir le filtre à modifier')
    lab.grid(row=0, column=0)
    noms_de_filtres = [f.name for f in liste_des_filtres]
    menu_deroulant = tk.Listbox(fenetre,
                                yscrollcommand=defilement.set,
                                height=9)
    defilement.configure(command=menu_deroulant.yview)
    menu_deroulant.bind("<Double-Button-1>", validate)
    menu_deroulant.grid(row=1, column=0)
    for nom in noms_de_filtres:
        menu_deroulant.insert(tk.END, nom)
    barre_de_validation(menu, validate, annuler)
예제 #5
0
def c_distribuer_donnes():
    def validate(event=None):
        global pack_actif, index_pack
        try:
            saisie = int(saisir.get())
        except ValueError:
            mess = 'Entrez un entier stictement positif'
            barre_de_message(mess, messager)
            return None
        if saisie in range(1, 1000):
            mess = 'Cela prend parfois quelques instants'
            barre_de_message(mess, messager)
            messager.update()
            compteur = 0
            overflow = 0
            pack_actif = []
            index_pack = 0
            while compteur <= saisie and overflow < 100_000:
                donne = Donne()
                overflow += 1
                if (not sequence_active) or sequence_active.filtre(donne):
                    compteur += 1
                    pack_actif.append(donne.identifiant())
            if compteur == 0:
                mess = 'Filtres incompatibles'
                donne = Donne()
                pack_actif.append(donne.identifiant())
            elif compteur > 0:
                mess = 'Donnes rares. Uniquement ' + str(
                    compteur) + ' donnes distribuées'
            else:
                mess = 'Donnes distribuées'
            barre_de_message(mess, messager)
            barre_de_menu(lm_donne, menu)
            clear(fenetre)
        else:
            mess = 'Entrez un entier compris entre 1 et 1000'
            barre_de_message(mess, messager)

    def cancel():
        clear(menu)
        barre_de_menu(lm_donne, menu)
        clear(fenetre)

    clear(fenetre)
    w1 = tk.Label(fenetre, text="Combien voulez-vous de donnes : ")
    w1.grid(row=0, column=0)
    saisir = tk.Entry(fenetre)
    saisir.grid(row=0, column=1)
    saisir.bind("<Return>", validate)
    if sequence_active:
        mess = "Séquence de filtres activés : " + sequence_active.name
    else:
        mess = 'Pas de filtre actif, donnes aléatoires '
    w3 = tk.Label(fenetre, text=mess)
    w3.grid(row=1, columnspan=2)
    barre_de_validation(menu, validate, cancel)
    barre_de_message(mess, messager)
예제 #6
0
def c_sauvegarder_donnes():
    if DEBUG:
        print("sauver")
    var = tk.StringVar(fenetre)

    def validate(event=None):
        text = var.get()
        if text:
            try:
                filename = "data/" + text + ".pak"
                with open(filename, "wb") as fichier:
                    pickle.dump(pack_actif, fichier)
                wlabel.destroy()
                wentree.destroy()
                mess = f"Fichier {filename[5:]} sauvegardé"
                barre_de_message(mess, messager)
                if expert :
                    barre_de_menu(lm_donne, menu)
                else :
                    c_enchérir()
            except IOError:
                barre_de_message("Problème d'entrée/sortie", messager)

    def escape(event=None):
        if expert:
            clear(fenetre)
            barre_de_menu(lm_donne, menu)
        else:
            clear(fenetre)
            barre_de_menu(lm_proto_menu, menu)
            

    clear(fenetre)
    if len(pack_actif) < 5:
        mess = 'Attention, votre pack de donne est presque vide !'
        texte = f'nombre de sonnes à sauvegarder : {len(pack_actif)}'
        alerte1 = tk.Label(fenetre, text=texte)
        alerte1.grid()
        alerte2 = tk.Label(fenetre, text='Avez-vous bien distribué ?')
        alerte2.grid()
        tk.Label(fenetre, text='').grid()
    else:
        mess = 'Sauvegarde des donnes'
    barre_de_message(mess, messager)
    wlabel = tk.Label(fenetre, text="Nom du fichier")
    wlabel.grid()
    wentree = tk.Entry(fenetre, textvariable=var)
    wentree.grid()
    wentree.bind('<Return>', validate)
    barre_de_validation(menu, validate, escape)
예제 #7
0
def c_distribuer_donnes():
    def validate(event=None):
        global pack_actif, index_pack
        try:
            saisie = int(saisir.get())
        except ValueError:
            mess = 'Entrez un entier stictement positif'
            barre_de_message(mess, messager)
            return None
        if saisie in range(1, 1000):
            mess = 'Cela prend parfois quelques instants'
            barre_de_message(mess, messager)
            messager.update()
            index_pack = 0
            if not sequence_active:
                pack_actif = [Donne() for i in range(saisie)]
            else:
                try :
                    pack_actif = []
                    for i in range(saisie):
                        donne = sequence_active.distribue()
                        donneur = vardonneur.get()
                        if donneur == 4 :
                            donne.donneur = randint(0,3)
                        else :    
                            donne.donneur = Position(donneur)
                        vul = varvul.get()
                        if vul == 4 :
                            donne.vul = randint(0,3)
                        else:    
                            donne.vul = Vulnerabilite(vul)
                        pack_actif.append(donne.identifiant())                              
                except InvalidSequence :
                    mess = "Séquence invalide "
                    barre_de_message(mess, messager)
                    clear(menu)
                    barre_de_menu(lm_sequence, menu)
                    clear(fenetre)
                    return None
            mess = 'Donnes distribuées'
            barre_de_message(mess, messager)
            if expert :
                barre_de_menu(lm_donne, menu)
                clear(fenetre)
            else :
                c_sauvegarder_donnes()
        else:
            mess = 'Entrez un entier compris entre 1 et 1000'
            barre_de_message(mess, messager)

    def cancel():
        clear(menu)
        barre_de_menu(lm_donne, menu)
        clear(fenetre)

    clear(fenetre)
    w1 = tk.Label(fenetre, text="Combien voulez-vous de donnes ? : ")
    w1.grid(row=0, column=0)
    saisir = tk.Entry(fenetre)
    saisir.grid(row=0, column=1, columnspan=4)
    saisir.bind("<Return>", validate)
    if sequence_active:
        mess = "Séquence de filtres activés : " + sequence_active.name
    else:
        mess = 'Pas de filtre actif, donnes aléatoires '
    w3 = tk.Label(fenetre, text=mess)
    w3.grid(row=1, column=0)    
    vardonneur = tk.IntVar(fenetre)    
    varvul     = tk.IntVar(fenetre)    
    tk.Label(fenetre, text="Donneur").grid(row=2, column=0)
    for pos in Position:        
        b = tk.Radiobutton(fenetre, 
                           variable=vardonneur, 
                           text = pos.name(),
                           value = int(pos),
                           width=8,
                           anchor="w"
                           )
        b.grid(row=2, column = pos+1)        
        if pos ==0 :
            b.select()
    b = tk.Radiobutton(fenetre, 
                       variable=vardonneur, 
                       text = "aléatoire",
                       value = 4,
                       width=8,
                       anchor="w"
                       )
    b.grid(row=2, column = 5)        
    tk.Label(fenetre, text="Vulnérabilité").grid(row=3, column=0)
    for vul in Vulnerabilite:        
        b = tk.Radiobutton(fenetre, 
                           variable=varvul, 
                           text = vul.name(),
                           value = int(vul),
                           width=8,
                           anchor="w"
                           )
        b.grid(row=3, column = vul+1) 
        if vul ==0 :
            b.select()
    b = tk.Radiobutton(fenetre, 
                       variable=varvul, 
                       text = "aléatoire",
                       value = 4,
                       width=8,
                       anchor="w"
                       )
    b.grid(row=3, column = 5)         
    barre_de_validation(menu, validate, cancel)
    mess = " Distribution des donnes "
    barre_de_message(mess, messager)