Contenu | Rechercher | Menus

Annonce

DVD, clés USB et t-shirts Ubuntu-fr disponibles sur la boutique En Vente Libre

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 12/07/2021, à 17:40

kholo

[script python] recherche de fichiers dans nautilus (nautilus script)

CHERCHER_ICI
je ne suis pas fan de la recherche avec Ctrl + F de nautilus...
je me suis donc fait un script pour me simplifier les recherches
sans avoir à passer en ligne de commande

pour le moteur, j'ai finalement utilisé find dans un subprocess.Popen
glob ou walk étant trop pénible à utiliser dans mon cas

chercher_ici est un script prévu pour fonctionner en tant que nautilus script
il est à placer dans le dossier :
/home/USER/.local/share/nautilus/scripts
soit :
~/.local/share/nautilus/scripts

il recherche des fichiers et des dossiers depuis un répertoire
en choisissant un dossier ou un fichier

la recherche se focalise sur le dernier niveau de l'arborescence
que ce soit un fichier ou un dossier qui le soit

rechercher machin trouvera
/chemin/vers/machin ou /chemin/vers/machin.ext

mais pas
/chemin/vers/machin/truc ni /chemin/vers/machin/truc.ext

les recherches se font sans distinction de casse

si vous choisissez un dossier, la recherche se fera dans ce dossier
si vous choisissez un fichier, la recherche se fera à partir du dossier contenant ce fichier

le choix par défaut est contenant le motif de recherche, c'est à dire *recherche*
les autres possibilités sont
    exact , c'est à dire recherche
    commence par, c'est à dire recherche*
    fini par, c'est à dire *recherche

dans la fenêtre des éléments trouvés, seuls les noms sont marqués
mais le chemin complet est indiqué en bas si on clic sur un élément

raccourcis clavier :
ctrl + q ou touche échappe pour quitter
double clic sur un élément pour ouvrir nautilus à l'emplacement du fichier ou du dossier

pour l'utiliser, faites un clic droit sur un fichier ou un dossier
allez dans le choix "Scripts"
puis chercher_ici (ou un autre nom si vous avez changer le nom)
le focus est sur le entry, tapez votre recherche
tabulation permet de passer d'une option à une autre
le choix entre recherche exacte, commence par, fini par et contient,
se fait avec la barre d'espace quand le focus est sur le choix avec la touche Tab
quelque soit l'emplacement la touche Entrée valide la recherche

après un clic sur un des éléments, un double clic sur celui ci
ou un clic sur le bouton voir ouvre le fichier ou le dossier en sélectionné dans nautilus




procédure d'installation fécomsa :

pour ceux qui ne codent pas on installe quelques dépendances :
certaines sont indispensable, d'autres non... alors je met ce qu'il faut et même un peu plus...

sudo apt install python-is-python3
sudo apt install python3-tk
sudo apt install python3-pip

ces dépendances devraient être déjà installées (donc rien à faire ici):

sys getopt os re fnmatch subprocess time

on crée le script :

touch ~/.local/share/nautilus/scripts/chercher_ici

on lui donne les droits d’exécution

chmod +x ~/.local/share/nautilus/scripts/chercher_ici

on édite

gedit ~/.local/share/nautilus/scripts/chercher_ici

(je sais, j'aurais pu commencer par cela et gagner une commande !! lol )

on colle le code

#!/usr/bin/env python3
# -*- coding: UTF8 -*-
"""
CHERCHER_ICI
je ne suis pas fan de la recherche avec Ctrl + F de nautilus...
je me suis donc fait un script pour me simplifier les recherches
sans avoir à passer en ligne de commande

pour le moteur, j'ai finalement utilisé find dans un subprocess.Popen
glob ou walk étant trop pénible à utiliser dans mon cas

chercher_ici est un script prévu pour fonctionner en tant que nautilus script
il est à placer dans le dossier :
/home/USER/.local/share/nautilus/scripts
soit :
~/.local/share/nautilus/scripts

il recherche des fichiers et des dossiers depuis un répertoire
en choisissant un dossier ou un fichier

la recherche se focalise sur le dernier niveau de l'arborescence
que ce soit un fichier ou un dossier qui le soit

rechercher machin trouvera
/chemin/vers/machin
ou 
/chemin/vers/machin.ext

mais pas 
/chemin/vers/machin/truc
ni
/chemin/vers/machin/truc.ext

les recherches se font sans distinction de casse

si vous choisissez un dossier, la recherche se fera dans ce dossier
si vous choisissez un fichier, la recherche se fera à partir du dossier contenant ce fichier

le choix par défaut est contenant le motif de recherche, c'est à dire *recherche*
les autres possibilités sont 
    exact , c'est à dire recherche
    commence par, c'est à dire recherche*
    fini par, c'est à dire *recherche

dans la fenêtre des éléments trouvés, seuls les noms sont marqués
mais le chemin complet est indiqué si on clic sur un élément

raccourcis clavier :
ctrl + q ou touche échappe pour quitter
double clic sur un élément pour ouvrir nautilus à l'emplacement du fichier ou du dossier

pour l'utiliser, faites un clic droit sur un fichier ou un dossier
allez dans le choix "Scripts"
puis chercher_ici (ou un autre nom si vous avez changer le nom)
le focus est sur le entry, tapez votre recherche
tabulation permet de passer d'une option à une autre
le choix entre recherche exacte, commence par, fini par et contient, 
se fait avec la barre d'espace quand le focus est sur le choix avec la touche Tab
quelque soit l'emplacement la touche Entrée valide la recherche

après un clic sur un des éléments, un double clic sur celui ci 
ou un clic sur le bouton voir ouvre le fichier ou le dossier en sélectionné dans nautilus

"""

__title__ = "Ki chercher fichiers ou dossiers"
__author__ = 'Ury Cyril : kholo'
__license__ = 'cc'
__copyright__ = 'Creative Common 2015-2021'
__ver_major__ = 0
__ver_minor__ = 1
__ver_patch__ = 0
__ver_sub__ = ''
__version__ = "%d.%d.%d%s" % (__ver_major__, __ver_minor__,
                              __ver_patch__, __ver_sub__)


import tkinter as tk
import sys, getopt, os

import re
import fnmatch

import subprocess


__DEBUG__ = False # active ou désactive l'écriture du log
# __DEBUG__ = True
def ecriture(donnees, *autres):
    """ permet d'écrire un log dans tmp ou shm qui est un dossier en Ram d'Ubuntu 
    le log disparaitra au prochain démarrage de Ubuntu """
    if __DEBUG__:
        # un_fichier = "/tmp/out.log"
        un_fichier = "/dev/shm/chercher_ici.log"
        with open(un_fichier,'a') as f:
            f.write(str(donnees) + '\n')
            if autres :
                f.write(str(autres) + '\n')

import time
ecriture(30*'-')
ecriture(time.time())


def rechercher(path: str, glob_pat: str, ignore_case: bool = False, is_recursive: bool = False):
    """ le moteur de recherche """
    liste = []
    cmd = ["find", path, "-iname", glob_pat]
    process = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True)
    # output = process.stdout.readline()
    # print("output", output)
    # ecriture(output)
    
    """ déroulement de la recherche """
    # TODO ça doit pouvoir s'interrompre si trop long
    while True:
        output = process.stdout.readline()
        if output == '' and process.poll() != None:
            break
        if output:
            liste.append(output.strip())

            du_texte = output.strip()
            ecriture("=>", du_texte)

    # TODO finir gestion des erreurs
    # """ pour la gestion des erreurs """
    rc = process.poll() # TODO : utile ?
    # output, errors = process.communicate()

    return liste

def open_file(path):
    """ ouvre dossier dans Nautilus et sélectionne l'élément"""
    # subprocess.Popen(["xdg-open", path])
    subprocess.Popen(["nautilus", path])

class ScrolledListBox(tk.Frame):
    """ ajoute les scrolls H ert V à un listbox"""
    def __init__(self, parent, liste=[], *args, **kargs):
        super().__init__(parent, *args, **kargs)
        self.parent = parent

        self.scrollbarV = tk.Scrollbar(self, orient='vertical')
        self.scrollbarH = tk.Scrollbar(self, orient='horizontal')

        self.listbox = MaListeBox(self)
        self.listbox.insert_liste(tk.END, liste)

        self.listbox.config(yscrollcommand = self.scrollbarV.set)
        self.scrollbarV.config(command = self.listbox.yview)
        self.listbox.config(xscrollcommand = self.scrollbarH.set)
        self.scrollbarH.config(command = self.listbox.xview)

        self.listbox.grid(row=0, column=0, sticky="news")
        self.scrollbarV.grid(row=0, column=1, sticky="ns")
        self.scrollbarH.grid(row=1, column=0, sticky="ew")

        self.grid_columnconfigure(0, weight=1)
        self.grid_rowconfigure(0, weight=1)

class MaListeBox(tk.Listbox):
    """ listbox avec méthode d'ajout, de vidage, de sélection """
    def __init__(self, parent, *args, **kargs):
        super().__init__(parent, *args, **kargs)
        self.parent = parent

        self.list_items = {} # liste des éléments

        # **************************************
        """ remplir listbox en démonstration """
        # self.fill() # POUR DEMO

        # **************************************
        """ DND dans l'objet """
        self.select = -1
        self.over = -1

        self.bind('<Button-1>', self.selection)
        self.bind('<Double-1>', self.voir)

    # **************************************
    def voir(self, *event):
        """ process pour ouvrir un élément de la liste dans nautilus """
        ecriture("je suis dans voir de la listbox")
        self.parent.parent.infosbar.voir()

    def selection(self, *event):
        """ sélection d'un élément de la liste """
        ecriture("je suis dans selection de la listbox")
        if isinstance(event, tuple):
            event = event[0]
        current = self.nearest(event.y)

        if current != -1:
            self.select = current
        else:
            self.select = -1

        if self.select != -1:
            """ affiche le chemin complet dans la barre d'info """
            self.parent.parent.infosbar.texte.set(self.list_items[self.select]["realpath"])

    def vider(self):
        """ vider la listbox """
        self.delete(0,tk.END)

    # **************************************
    def fill(self, number=15):
        """ DEMO : rempli la listbox avec des nombres """
        for i in range(number):
            self.insert_element(tk.END, i)

    def insert_element(self, place, media):
        """ insert un élement dans la listbox à une place donnée """
        nombre = len(self.get(0, tk.END))
       
        if isinstance(media, int) : # POUR TESTS avec fill()
            media = "/pour/test/" + str(nombre)
        
        if isinstance(place, int) :
            if place <= nombre:
                self.items[place] = {"label" : media.split('/')[-1], "realpath" : media}
        else :
            ecriture("y en a ", nombre, "dans la listbox")
            self.list_items[nombre] = {"label" : media.split('/')[-1], "realpath" : media}
        self.insert(place, media.split('/')[-1])

    def insert_liste(self, place, liste):
        """ insert une liste dans la listbox par élément """
        for element in liste:
            self.insert_element(place, element)

class AfficheInfos(tk.Frame):
    """ barre d'info pour mettre en bas d'une fenêtre """
    def __init__(self, parent, *args, **kargs):
        super().__init__(parent, *args, **kargs)
        self.parent = parent
        self.texte = tk.StringVar()
        self.texte.set("choisissez un élément")
        self.bouton = tk.Button(self, text="voir", command=self.voir)
        self.bouton.grid(row=0, column=0, sticky='nws')
        self.label = tk.Label(self, textvariable=self.texte, width=100)
        self.label.grid(row=0, column=1, sticky='nws')

        self.grid_columnconfigure(0, weight=1)
        self.grid_columnconfigure(1, weight=10)
        self.grid_rowconfigure(0, weight=1)

    def affiche_infos(self, texte):
        """ affiche un texte dans la barre d'info """
        ecriture("AfficheInfos dans affiche_infos", texte)
        self.texte.set(texte)

    def voir(self):
        """ ouvrir nautilus et sélectionner le fichier """
        place = self.parent.listbox.listbox.select
        fichier = self.parent.listbox.listbox.list_items[place]
        path = fichier["realpath"]
        open_file(path)

class FenetreAffichageFichiers(tk.Toplevel):
    """ fenêtre pour afficher des éléments dossiers ou fichier dans une listbox """
    def __init__(self, parent=None, liste=[], *args, **kargs):
        super().__init__(parent, *args, **kargs)
        self.parent = parent
        self.geometry("1000x450+100+300")
        self.title("Ouvrir dossiers des résultats")
        self.listbox = ScrolledListBox(self, liste)
        self.listbox.grid(row=0, column=0, sticky='news')

        self.infosbar = AfficheInfos(self)
        self.infosbar.grid(row=1, column=0, sticky='news', columnspan=2)

        # ******************************
        self.grid_columnconfigure(0, weight=1)
        self.grid_rowconfigure(0, weight=1)
        # self.grid_rowconfigure(1, weight=1)
        # self.grid_rowconfigure(2, weight=1)

        self.bind('<Control-q>', self.quitter)
        self.bind('<Escape>', self.quitter)

        """ pour sauver la config lorsqu'on clic sur la croix 
        shunt la procédure de fermeture pour en refaire une autre """
        self.protocol("WM_DELETE_WINDOW", self.close_window)
        # TODO sauvegarde des préférences

        self.mainloop()

    # ******************************
    """ deux méthodes pour gestion selon le type de fermeture """
    ## sans doute inutile...
    def close_window(self, *event):
        """ procédure de fermeture avec sauvegarde de la configuration """
        self.quit() 
    def quitter(self, *event):
        """ pour choper l'extinction et lancer le close_window"""
        self.close_window()

class FenetreChoix(tk.Tk):
    """ fenêtre pour choisir le motif de recerche et le type de recherche """
    def __init__(self, parent=None, *args, **kargs):
        super().__init__(parent, *args, **kargs)
        self.parent = parent
        self.geometry("500x300+100+300")

        # ******************************
        self.choix = "*" # par défaut : tout !
        self.recherche = tk.StringVar()
        self.entry = tk.Entry(self, textvariable=self.recherche)
        self.entry.grid(row=0, column=0, sticky="ew")

        self.frame_choix = tk.Frame(self)
        self.frame_choix.grid(row=1, column=0, sticky='news')
        vals = ['A', 'B', 'C', 'D']
        etiqs = ['recherche exacte', 'commence par', 'fini par', 'contient']
        self.varGr = tk.StringVar()
        self.varGr.set(vals[3]) # choix du type de recherche par défaut : contient
        for i in range(4):
            b = tk.Radiobutton(self.frame_choix, variable=self.varGr, text=etiqs[i], value=vals[i])
            b.grid(row=i, column=0, sticky="nw")

        self.btn_lancer = tk.Button(self, text="lancer", command=self.lancer_rch)
        self.btn_lancer.grid(row=2, column=0)

        self.entry.focus_set() # on passe le focus sur le entry par défaut

        # ******************************
        self.grid_columnconfigure(0, weight=1)
        self.grid_rowconfigure(0, weight=1)
        self.grid_rowconfigure(1, weight=1)
        self.grid_rowconfigure(2, weight=1)

        self.bind('<Control-q>', self.quitter)
        self.bind('<Return>', self.lancer_rch)
        self.bind('<Escape>', self.quitter)

        """ pour sauver la config lorsqu'on clic sur la croix 
        shunt la procédure de fermeture pour en refaire une autre """
        self.protocol("WM_DELETE_WINDOW", self.close_window)

        self.mainloop()

    # ******************************
    def __str__(self):
        return self.choix

    def lancer_rch(self, *event):
        """ adapte le motif de recherche """
        self.choix = '*'
        entry = self.recherche.get()
        bouton = self.varGr.get()
        if entry == "":
            self.choix = '*'
        elif bouton == 'A': # 'recherche exacte'
            self.choix = entry
        elif bouton == 'B': # 'commence par'
            if not '*' in entry:
                self.choix = entry + '*'
            else :
                self.choix = entry
        elif bouton == 'C': # 'fini par'
            if not '*' in entry:
                self.choix = '*' + entry
            else :
                self.choix = entry
        elif bouton == 'D': # 'contient'
            if not '*' in entry:
                self.choix = '*' + entry + '*'
            else :
                self.choix = entry

        self.withdraw() # cache la fenêtre à l'ouverture de la prochaine en toplevel
        self.quitter()

    # ******************************
    def close_window(self, *event):
        """ procédure de fermeture avec sauvegarde de la configuration """
        self.quit() 
    def quitter(self, *event):
        """ pour choper l'extinction et lancer le close_window"""
        self.close_window()

# sys.exit(123)

# *************************************************************
ecriture("on entre dans partie A")
dossiers = None

current_dir = os.getcwd()
arguments = [current_dir + '/' + x for x in sys.argv[1:] if os.path.isdir(current_dir + '/' + x)]

texte = "le dossier courant est " + current_dir + '\n'
ecriture(texte)
texte = "les arguments sont " + str(arguments) + '\n'
ecriture(texte)

if len(arguments) == 0:
    arguments = [current_dir]
ecriture("arguments rectifiés : ", arguments)

choix = FenetreChoix()
ecriture("le choix est", choix.choix)

# *************************************************************
ecriture("on entre dans partie B")
# sys.exit(123)

# plus tard peut être gestion de plusieurs critères de recherche
for un_argument in arguments:
    fichiers_trouves = rechercher(un_argument, choix.choix, True, True)

ecriture(20*'+')
ecriture("on entre dans la partie d'affichage")

mon_affichage = FenetreAffichageFichiers(liste=fichiers_trouves)
choix.quitter() # juste pour être certain

on enregistre et on ferme avec Ctrl + S puis Ctrl + Q
Utilisation
allez dans un dossier, sélectionnez un fichier ou un dossier puis clic drit "Scripts" et "chercher_ici"
le reste est expliqué en haut...

je ferai certainement évoluer ce script

Hors ligne

#2 Le 12/07/2021, à 20:01

Vobul

Re : [script python] recherche de fichiers dans nautilus (nautilus script)

Salut,

Quelques remarques :

* Je m'attendais à un repo git, pas un truc dans une balise code d'un forum, je t'invite fortement à mettre ton code sur une forge de ton choix, avec un README et des screenshots
* Une licence GPL serait plus appropriée
* J'ai une forte aversion pour le code écrit dans une langue autre que l'anglais, mais bon chacun fait comme il veut hein wink y'a des commentaires, c'est déjà pas mal ! Bon par contre pour le choix des noms de variables on repassera. "un_fichier" devrait être plutôt nommé "fichier_log" voire "logfile" en anglais.
* As-tu considéré l'usage de "locate" (paquet mlocate) au lieu de find ? Sachant que find va parcourir le système de fichier alors que locate utilise une base indexée et sera beaucoup, beaucoup plus rapide
* Fais un coup de "black" et de "isort", ça fait toujours du bien
* Pourquoi écrire le fichier de log dans /dev/shm ? Utilise plutôt /tmp, voir question sur so, et fais un dossier temporaire plutôt que d'écrire dans /tmp direct, et nomme le fichier "chercher_ici.log" (ou le dossier temporaire chercher_ici-1234Z) plutôt que out.log.

Enfin bon après j'ai pas tout regardé car sans la coloration syntaxique ça pique un peu de scroller sur un forum phpbb quand même tongue

Sinon bravo pour avoir écrit tout ça et surtout pour le partager (avec les moyens du bord), peu de gens seraient prêts à faire de même et à s'ouvrir aux critiques (comme moi) !


Vobul
Utilisez le retour utilisable de commandes !!!
J'aime la langue française, mais je parle franglais, deal with it.
RTFM

Hors ligne

#3 Le 12/07/2021, à 23:09

kholo

Re : [script python] recherche de fichiers dans nautilus (nautilus script)

salut Vobul...
merci pour ce retour... très constructif...

la raison pour laquelle je met ça ici est que j'ai conscience que c'est très spécifique entre Linux, Nautilus et les nautilus scripts...
je fais pas mal de tutos pour les utilisateurs Ubuntu. Je restreins par facilité... je dois pouvoir améliorer ça facilement...

pour le git, il faut que je me fasse violence à m'y mettre mais je craint toujours de ne pas arriver à suivre les requêtes et les pull...
ici c'est plus calme lol

je vais changer la licence en effet... c'est une entête que je traîne depuis pas mal de temps et qu'il est temps que je mette à jour...
je versionne très mal mes projets aussi... encore un truc qu'il faut que je potasse...

pour locate, je lui reproche de devoir faire des mises à jour de la base difficile à tenir quand on a un système de fichiers qui change souvent comme je le fais... et j'ai jamais pris le temps de l'utiliser... mais ça reste à envisager...

pour l'anglais aussi...je code seul et partage assez peu mes codes... il vais reprendre ça...

pour les noms de variable, je me dois de voir cela aussi... même pour moi à la relecture, j'avoue que des fois je met du temps à me remettre dedans...

pour l'usage de shm, je fais ça un peu anarchiquement... avec les sdd, j'essaie d'éviter les écritures sur mon ssd... mais en prod,  tmp voire un dossier dédié serait plus propre... je vais voir aussi cela... idem pour l'incrémentation auto du nom du log...

black et isort, je ne connaissais pas... je vais me rencarder....

pour la fin, merci pour le temps à la lecture et au débriefing...
j'apprends en partageant et ma meilleur récompense est de voir mon travail partagé... et critiqué...
watael ne me loupe pas quand je fais du bash... je dois être maso parce que j'adore lol
j'ai pas mal de choses que je partage très peu et je bosse souvent le nez dans le moteur sans travailler sur la carrosserie...
encore un truc qu'il est temps que je change...

je vais améliorer mon code de ce pas et partagerai mes prochaines versions autant ici que sur une forge...
encore merci pour tes observations et ton tact !!! big_smile

Hors ligne

#4 Le 13/07/2021, à 01:57

Vobul

Re : [script python] recherche de fichiers dans nautilus (nautilus script)

Si tu ne devais faire qu'une seule chose : apprendre et utiliser git ! C'est vraiment, vraiment top et un indispensable pour tout codeur qui se respecte ! smile


Vobul
Utilisez le retour utilisable de commandes !!!
J'aime la langue française, mais je parle franglais, deal with it.
RTFM

Hors ligne

#5 Le 13/07/2021, à 17:46

kholo

Re : [script python] recherche de fichiers dans nautilus (nautilus script)

suite aux conseils de Vobul,

j'ai passé la licence en GNU,
j'ai traduit en anglais et ajouté une localisation, le français et l'anglais sont supportés

mis des noms de variables et de fonctions plus parlants et anglais

revue le log... indenté les versions de log... pour le moment, par défaut, je suis toujours dans shm

black n'a pas apporté grand chose lors d'un test sur une des versions...
j'ai aussi pigé isort mais je n'ai pas beaucoup d'imports
je reverrai tout cela et mettrai un coup de pep8 plus tard...

ça commence à être un peut long mais tout est inclus dans un seul fichier...
et enfin j'ai tout mis sur mon github

il faudrait que j'ajoute une procédure d'installation pour la simplifier et traduire l'accès dans les scripts...
mais voilà big_smile

à suivre...

Hors ligne

#6 Le 14/07/2021, à 01:46

Vobul

Re : [script python] recherche de fichiers dans nautilus (nautilus script)

Bravo !

Quelques petites remarques :

Je n'utiliserai pas __DEBUG__ ou __lang__ mais DEBUG ou LANG plutôt, le dunder (double underscore) c'est à utiliser pour d'autres choses IMHO.
Ligne 129 au lieu de "retour" comme nom de variable, utilise "translated_text"
Ligne 132 c'est "translated" qu'il faut mettre
Typo ligne 395 dans exactly
Maintenant que tu utilises git tu peux supprimer tout le code commenté, il restera dans ton historique si besoin. Si tu veux conserver une trace d'une idée, ajoute un vrai commentaire qui explique le pourquoi du comment ou les différentes options possibles.
Ligne 141, utilise une constante au début du fichier qui indique où sauver le logfile : LOGFILE_PATH, comme ça tu peux changer ça facilement. Aussi, "from pathlib import Path" tu verras c'est le bien (pas forcément super utile quand on ne vise que gnu/linux mais autant prendre les bonnes habitudes).
Pour la traduction c'est top mais ça ne va pas bien "scale". Après c'est pas vraiment une priorité non plus mais à garder en tête : avoir des fichier séparés par langue dans un sous-dossier "i18n" ou "locales" ou "langs". Voir même utilise gettext. Ce qui te permettra de déléguer la traduction à gettext qui sait très bien faire ça.
Le texte du début c'est bien pour le forum, mais il devrait plutôt être traduit et mis dans le README plutôt que dans le fichier en lui-même.

Bon j'ai juste parcouru vite fait, en plus je n'utilise ni ubuntu ni nautilus donc je ne peux pas vraiment essayer ton truc mais je trouve ça cool que tu prennes en compte mes remarques et que tu améliores ton script ! :]


Vobul
Utilisez le retour utilisable de commandes !!!
J'aime la langue française, mais je parle franglais, deal with it.
RTFM

Hors ligne

#7 Le 14/07/2021, à 11:21

kholo

Re : [script python] recherche de fichiers dans nautilus (nautilus script)

Vobul a écrit :

Bravo !

Quelques petites remarques :

ouiiiiii !!! lol

Vobul a écrit :

Je n'utiliserai pas __DEBUG__ ou __lang__ mais DEBUG ou LANG plutôt, le dunder (double underscore) c'est à utiliser pour d'autres choses IMHO.

ok... et oui, la casse unifiée est plus logique...

Vobul a écrit :

Ligne 129 au lieu de "retour" comme nom de variable, utilise "translated_text"

d'acc... plus représentatif...

Vobul a écrit :

Ligne 132 c'est "translated" qu'il faut mettre

je me suis bien fait rire là !!! lol

Vobul a écrit :

Typo ligne 395 dans exactly

je vais relire... il doit en rester wink

Vobul a écrit :

Maintenant que tu utilises git tu peux supprimer tout le code commenté, il restera dans ton historique si besoin. Si tu veux conserver une trace d'une idée, ajoute un vrai commentaire qui explique le pourquoi du comment ou les différentes options possibles.

là, j'ai un peu de mal encore à savoir quand c'est trop ou trop peu !!! manque d'expérience... ça va venir...

Vobul a écrit :

Ligne 141, utilise une constante au début du fichier qui indique où sauver le logfile : LOGFILE_PATH, comme ça tu peux changer ça facilement.

oui... et il faut que je gère un vrai rotate qui vire les fichiers trop anciens... d'autant plus si ils sont ailleurs que dans shm...

Vobul a écrit :

Aussi, "from pathlib import Path" tu verras c'est le bien (pas forcément super utile quand on ne vise que gnu/linux mais autant prendre les bonnes habitudes).

ah ok... et avoir des objets Path en lieu et place des chemins si je comprends bien... je vais voir ça...

Vobul a écrit :

Pour la traduction c'est top mais ça ne va pas bien "scale". Après c'est pas vraiment une priorité non plus mais à garder en tête : avoir des fichier séparés par langue dans un sous-dossier "i18n" ou "locales" ou "langs". Voir même utilise gettext. Ce qui te permettra de déléguer la traduction à gettext qui sait très bien faire ça.

oui... j'étais resté sur mon idée de dico pour n'avoir qu'un seul fichier qui contienne tout...
je vais tester pour mettre en œuvre et maîtriser l'utilisation des locales...

Vobul a écrit :

Le texte du début c'est bien pour le forum, mais il devrait plutôt être traduit et mis dans le README plutôt que dans le fichier en lui-même.

oui... j'ai repris et traduit dans le README donc ça n'a plus lieu d'être en effet... c'était toujours dans mon idée d'avoir tout dans un seul fichier.

Vobul a écrit :

Bon j'ai juste parcouru vite fait, en plus je n'utilise ni ubuntu ni nautilus donc je ne peux pas vraiment essayer ton truc mais je trouve ça cool que tu prennes en compte mes remarques et que tu améliores ton script ! :]

je vais aussi potasser le côté sous dossier pour mettre un peu tout ça plus propre et plus simple...
juste que je voulais éviter de polluer le dossier des nautilus scripts avec un dossier du programme... à voir...

tu m'auras bien boosté et aidé à améliorer rapidement... encore merci pour tes conseils wink

Hors ligne