Sahid Ferdjaoui Blog - Funraill Foundation Bienvenue, Log in - thème 2007 RC1

Powered by OpenSource Softwares

Outil de déboggage colaborative
reduire

Script Python svn_commit

le 19 avril 2008 par sahid

Simple script pour commit une liste de fichiers

Je me suis fait un petit script en Python permettant de commit une suite de fichiers inscrits dans un fichier texte. ca me permet de mieux gerer les fichiers que j’edite et ceux qui doivent etre envoyés sur le serveur svn.

Le plus simple est de placer le script dans ~/bin/svn_commit.

Le script python

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. import sys
  5. import os
  6.  
  7. for rfile in sys.argv:
  8.    if rfile == sys.argv[0]:
  9.        continue
  10.    try:
  11.        cmd = “”.join (open (rfile, ‘r’)\
  12.                       .readlines ())\
  13.                       .replace (\n, ” “)
  14.        os.system (“svn commit “ + cmd)
  15.    except IOError:
  16.        print “le fichier ‘”+rfile+“‘ n’existe pas.”

Exemple d’utilisation

# malist_1
src/fichier.c
cfg/general.conf
img/image.png

~$svn_commit malist_1 malist_2

reduire

Retour d’experiences avec PyGTK et présentation de Quick Facturation

le 19 juillet 2007 par sahid

Quick Facturation, développer sous PyGTK

Pour les besoins de la société automobile pour laquelle je travaille actuellement, j’ai développé de mutliples logiciels assez spécialisés tout en utilisant l’excellent bindings PyGtk et actuellement je développe un logiciel de facturation, suivant un cahier des charges assez simple et étant assez généraliste pour pouvoir je pense le faire passer sous license GPL v3 à terme.

Actuellement le logiciel est capable d’éditer des factures, néanmoins il ne dispose pas pour le moment de base de données clientes ainsi que de base de données d’articles, à la base ce n’etait même pas prévu dans le cahier des charges, mais vu la rapidité de developpement avec PyGTK couplé à Glade, je pense pouvoir l’intégrer avant mon départ de la boite. De même que j’aimerais y ajouter le support multilangue.

En attendant voilà quelques screenshots de l’application, en espérant que ça encouragera du monde à utiliser l’excellent Python couplé à l’excellente bilbiotheque GTK !

Capture-4.png Capture-1.png

Capture-2.png Capture-3.png

reduire

GTK - PyGtk : Une barre d’etat avec la date et l’heure

le 6 juin 2007 par sahid

Date et Heure dans la gtk.Statusbar ()

Pour continuer dans mes articles sur GTK voila une autre petit classe permettant d’ajouter la date et l’heure dans la barre de statut d’une appli sous GTK. Bon rien d’extraordinaire, m’enfin si ca peut servire ( ;.Une fois de plus j’utilise Python.

Date et Heure gtk.Statusbar ()

  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3.  
  4. #/ Ferdjaoui Sahid
  5. #/ Mail : sahid@funraill.org
  6. #/ WWW : http://sahid.funraill.org
  7. #/
  8. # Exemple de barre d’état
  9. # qui affiche la date et l’heure
  10.  
  11. import gtk, gobject, time
  12.  
  13. # Identifiant du timer
  14. TIMER_ID = None;
  15.  
  16. class Wnd (object):
  17.     def __init__(self):
  18.         # VBox
  19.         vbox = gtk.VBox ();
  20.  
  21.         # Fenetre
  22.         wnd = gtk.Window ();
  23.         wnd.set_title (“Exemple Barre de Statut avec heure”);
  24.         wnd.set_default_size (350, 100);
  25.         wnd.connect (“destroy”, gtk.main_quit, None);
  26.         wnd.add (vbox);
  27.  
  28.         # Label
  29.         label = gtk.Label ()
  30.         label.set_text (“Date et Heure”);
  31.         vbox.pack_start (label, True, True, 0);
  32.        
  33.         # Barre de statut
  34.         self.status_bar = gtk.Statusbar ();
  35.         self.cont_id = self.status_bar.get_context_id (“info”);
  36.         vbox.pack_start (self.status_bar, False, True, 0);
  37.  
  38.         # Mise a jour des infos dans la barre
  39.         self.majStatusBar ();
  40.        
  41.         wnd.show_all ();
  42.  
  43.     def majStatusBar (self):
  44.         info = time.strftime (“%d %m %y - %H:%M:%S”, time.localtime ());
  45.         self.status_bar.push (self.cont_id, info);
  46.         self.boucle ();
  47.  
  48.     def boucle (self):
  49.         TIMER_ID = gobject.timeout_add (100, self.majStatusBar);
  50.  
  51. if __name__ == “__main__”:
  52.     Wnd ();
  53.     gtk.main ();
reduire

Gestion des signaux Clipboard avec Gtk (cut, copy, paste)

le 5 juin 2007 par sahid

PyGTK et le couper copier coller …

Bon je me suis un peu pris la tête dans la documentation GTK avec les copier coller, et comme j’ai trouvé que trÚs peu d’info sur le net, je me permet d’exposer une petit classe qui traite de ce sujet.
Le fonctionnement est quasi similaire entre tout les bindings GTK il me semble (hormis la syntaxe propre à chaque langages), dans cette exemple j’utilise le bindings PyGTK

l’exemple

L’exemple est assé simple, il affiche une petite fenêtre avec un entry text, et vous pouvez ensuite couper/copier/coller un texte de l’extérieur ou bien le contraire.

pygtk - clipboard - cut, copy, paste

  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3.  
  4. #/ Ferdjaoui Sahid
  5. #/ Mail: sahid@funraill.org
  6. #/ WWW: http://sahid.funraill.org
  7. #/
  8. # Exemple de gestion des signaux Clipboard
  9. # sur un gtk.Entry
  10.  
  11.  
  12. # Module GTK
  13. import gtk
  14.  
  15. # Interface graphique
  16. class Wnd (object):
  17.     def __init__ (self):
  18.         “”” Construction de la fenetre ““”
  19.         # VBox
  20.         self.vbox = gtk.VBox ();
  21.         # Wnd
  22.         self.wnd = gtk.Window ();
  23.         self.wnd.set_title (“Exemple”);
  24.         self.wnd.set_size_request (175, 75);
  25.         self.wnd.connect (“destroy”, gtk.main_quit);
  26.         self.wnd.add (self.vbox);
  27.        
  28.         # Menu
  29.         self.menu (self.wnd);
  30.         # Entry
  31.         self.entry ();       
  32.  
  33.         self.wnd.show_all ();
  34.  
  35.     def menu (self, wnd):
  36.         “”” Generation du menu ““”
  37.         menu_items = (
  38.             (“/_Fichier”, None, None, 0, “<Branch>”),
  39.             (“/Fichier/_Quitter”, “<control>Q”, gtk.main_quit, 0, None),
  40.             (“/_Edition”, None, None, 0, “<Branch>”),
  41.             (“/Edition/_Couper”, “<control>X”, self.on_couper, 0, None),
  42.             (“/Edition/_Copier”, “<control>C”, self.on_copier, 0, None),
  43.             (“/Edition/_Coller”, “<control>V”, self.on_coller, 0, None),
  44.             );
  45.  
  46.         item_factory = gtk.ItemFactory (gtk.MenuBar, “<main>”, None);
  47.         item_factory.create_items (menu_items);
  48.         self.vbox.pack_start (item_factory.get_widget (“<main>”), False, True, 0);
  49.        
  50.     def entry (self):
  51.         “”” Ajout d’un gtk.Entry ““”
  52.         entry = gtk.Entry ();
  53.         self.vbox.pack_start (entry, True, True, 0);
  54.  
  55.     def on_couper (self, action, widget):
  56.         “”” Gestion du signal cut ““”
  57.         w = self.wnd.get_focus ();
  58.         if (isinstance (w, gtk.Entry)):
  59.             w.emit (“cut-clipboard”);
  60.  
  61.     def on_copier (self, action, widget):
  62.         “”” Gestion du signal copy ““”
  63.         w = self.wnd.get_focus ();
  64.         if (isinstance (w, gtk.Entry)):
  65.             w.emit (“copy-clipboard”);
  66.  
  67.     def on_coller (self, action, widget):
  68.         “”” Gestion du signal paste ““”
  69.         w = self.wnd.get_focus ();
  70.         if (isinstance (w, gtk.Entry)):
  71.             w.emit (“paste-clipboard”);
  72.  
  73.  
  74. if __name__ == “__main__”:
  75.     Wnd ();
  76.     gtk.main ()
reduire

Polymorphisme sous Python

le 17 mars 2007 par sahid

Introduction au polymorphisme sous Python

Presentation de Python

Python est un langage de programmation de haut niveau, orienté objet, multiplateforme, et Opensource (distribué sous GPL si je ne me trompe pas).

Python est un langage de programmation trop mal connu, et considéré comme un langage trop banal et simple pour etre appris correctement. Pour donner mon avis personnel je dirai que ca vient principalement du coté “langage de scrypt”, PHP et Javascrypt on connu les meme problemes.

Comme je le disais Python est portable, et un logiciel sous python peut tres facilement etre porté. Sa syntaxe permet de mettre en place des applications complexes avec un minimun d’efforts par rapport a un programme en C. Pour finir Python est orienté-objet, et tout dans python est objet…

Avant Prorpos

Bon cette petite introduction ne sera sans doute pas utile au debutant Python, mais ayant été confronté au probleme du polymorphisme j’ai pensé que ça pourrait etre intéressant d’en faire profiter à vous mes lecteurs favoris (;, au cas ou un jour vous vous retrouviez confronté à ce probleme sous python.

Polymorphisme sous Python

Pour commencer on va mettre en scene 3 classes A, B et C, elles comporteront toutes la methode printItSelf () et retourneront le nom de la classe auxquelles elles appartiennent.

  1. class A:
  2.     “”” Classe A ““”
  3.     printItSelf (self):
  4.         print “J’appartiens  [A]”;
  5.  
  6. class B:
  7.     “”” Classe B ““”
  8.     printItSelf (self):
  9.         print “J’appartiens  [B]”;
  10.  
  11. class C (A, B):
  12.     “”” Classe C, herite de A et B ““”
  13.     printItSelf (self):
  14.         print “J’appartiens  [C]”;

Nous allons maintenant voir comment appeler la methode printItSelf de A et B a partir de notre instance de C

  1. C obj # Instance de C
  2.  
  3. A.printItSelf (obj)
  4. ## (out) : J’appartiens  [A]
  5.  
  6. B.printItSelf (obj)
  7. ## (out) : J’appartiens  [B]
  8.  

Assez surprenant comme methode … ( ; en fait on doit passer l’objet créé en parametre de notre methode, et appeler la methode a partir du nom de la classe, mais en y reflechissant ca peut paraitre logique vu la maniere dont on définit les classes sous Python. Il peut etre interessant pour ceux qui souhaitent apprendre un langage de programmation de commencer par Python (: ! de plus mixé avec la bibliotheque pyGTK on arrive à d’excellents programmes de qualité merci au channel #gnomefr pour l’astuce.