J’ai décidé de créer une nouvelle classe ftp_perso
qui contiendra un ensemble de méthode. [1] Dérivée de la classe FTP
elle devrait permettre :
- de lister récursivement le contenu d’un répertoire.
- de récupérer récursivement le contenu d’un répertoire.
Un problème qui s’est posé est que tous les serveurs FTP ne renvoient pas le même type de chemin : certains renvoient un chemin depuis la racine, d’autres se contentent d’indiquer le nom du répertoire courant.
Pour résoudre cela, à l’initialisation d’une instance de classe, un attribut d’objet est calculé. self.hierarchie
: selon sa valeur, le parcours récursif ne sera pas effectué de la même manière, car il ne faudra pas envoyer les mêmes requêtes au serveur.
Par ailleurs certains listent les dossiers .
et ..
lorsqu’on envoie une commande ls. Comme il s’agit du répertoire courant et du répertoire parent, il ne faut pas les utiliser lorsqu’on parcourt récursivement, sinon on tourne. J’ai donc défini un attribut de d’objet, avec une valeur standard mais pouvant prendre de nouvelles valeurs à l’initialisation d’une instance : self.faux_reps
, qui contient la liste des dossiers à ne pas parcourir.
Enfin, il n’est pas toujours évident de savoir si un fichier est un répertoire (dossier) ou nom : j’ai donc défini une méthode is_dir(self, file)
que j’appelle sur chaque fichier avant de tenter d’y entrer comme un répertoire.
Au final j’ai donc :
- une méthode
is_dir()
à usage interne. - une méthode
lister_repertoire(self,rep='',niveau=0)
qui permet de lister récursivement un répertoire. Cette méthode s’appelle elle même, d’où l’argumentniveau
. - une méthode
rapatrier_repertoire(self,chemin_local='.',rep='',niveau=0)
qui permet de récupérer un répertoire distant en local.