#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Foobar.py: Description of what foobar does."""
__author__ = "Rob xxxx, Gavin xxxx, and Peter xxxx"
__copyright__ = "Copyright 2007, The xxxx Project"
__credits__ = ["Rob xxx", "Peter xxx", "Gavin xxxx",
"Matthew xxxx"]
__license__ = "GPL"
__version__ = "1.0.1"
__maintainer__ = "Rob xxx"
__email__ = "rob@spot.xxx.edu"
__status__ = "Production"
from sqlalchemy import *
from sqlalchemy.orm import *
from datetime import datetime
....
jeudi 17 septembre 2015
Entête pour fichier Python
Voici une proposition d'entête de fichier Python à partir d'information collectées ici et là.
vendredi 4 septembre 2015
IEP: un éditeur Python interactif convivial (Windows, Mac, Linux)
IEP est un outil vraiment très pratique et agréable permettant de faire du prototypage en Python dans un milieu ergonomique.
Nous ne parlons pas de développement (qui est un autre domaine) mais de Python Interactif (et même IPython).
J'aime employer Python en mode interactif... c'est vraiment pratique pour faire du prototypage ou essayer des nouvelles fonctions. Il y a aussi son grand frère IPython que je ne connais pas encore très bien.
Limite de Python Interactif en mode console
Par contre, si ces environnements consoles sont plus que pratique du fait de leur mode console, ils deviennent également pénibles lorsqu'il faut faire un "fix" dans une fonction mal définie.
Il faut recommencer la saisie ligne a ligne... ce n'est pas gênant si c'est une fois mais autrement plus ennuyant en usage intensif.
Je voulais charger dynamiquement le contenu d'une table postgresql dans un objet SqlAlchemy (via l'ORM)... puis sauver les objets dans un fichier JSON. Le but est d'exporter les données sur un serveur FTP pour rechargement dans une DB en ligne. Alors oui, vu le nombre de manipulation, j'étais un peu à l'étroit dans la version console.
IEP... KASEKO?!?
J'ai donc cherché un environnement Python Interactif plus convivial - aussi sous Windows - et je suis tombé sur Interactive Editor for Python (IEP)
C'est toujours un Python interactif (IPython) auquel est associé une gestion de fichier, quelques outils, un logger et des fonctionnalités vraiment efficaces.
Une combinaison idéale pour une utilisation en mode Interactif:
Ressources
Nous ne parlons pas de développement (qui est un autre domaine) mais de Python Interactif (et même IPython).
![]() |
| IEP - Un python interactif vraiment convivial. |
Limite de Python Interactif en mode console
Par contre, si ces environnements consoles sont plus que pratique du fait de leur mode console, ils deviennent également pénibles lorsqu'il faut faire un "fix" dans une fonction mal définie.
Il faut recommencer la saisie ligne a ligne... ce n'est pas gênant si c'est une fois mais autrement plus ennuyant en usage intensif.
Je voulais charger dynamiquement le contenu d'une table postgresql dans un objet SqlAlchemy (via l'ORM)... puis sauver les objets dans un fichier JSON. Le but est d'exporter les données sur un serveur FTP pour rechargement dans une DB en ligne. Alors oui, vu le nombre de manipulation, j'étais un peu à l'étroit dans la version console.
IEP... KASEKO?!?
J'ai donc cherché un environnement Python Interactif plus convivial - aussi sous Windows - et je suis tombé sur Interactive Editor for Python (IEP)
C'est toujours un Python interactif (IPython) auquel est associé une gestion de fichier, quelques outils, un logger et des fonctionnalités vraiment efficaces.
Une combinaison idéale pour une utilisation en mode Interactif:
- Exécution du texte sélectionné à la volée (dans l'interpréteur)
- Exécution du script ou du contenu du fichier
- Explorateur de fichier
- Explorateur de classe
- Auto complétion
- Python Interactif fonctionnant dans un thread séparé
Autorise donc la poursuite du coding pendant une phase d'éxécution. - Excellent support de raccourcis clavier!
Capital pour allez vite. - etc
Ressources
Libellés :
Python,
Ubuntu,
Utilitaire,
Windows
samedi 29 août 2015
Pillow - le fork de PIL
PIL Python Image Library est une puissante bibliothèque de traitement d'image.
PIL est mondialement reconnu pour sa puissance... mais aussi tristement connu pour être parfois vraiment pénible à installer.
En travaillant sur la documentation du Sense Hat pour Raspberry-Pi, j'ai découvert que la fondation Pi proposait d'installation Pillow en même temps que la bibliothèque du Sense-Hat.
Piqué à vif, j'ai jeté un petit coup d'oeil sur Pillow.
Pillow? Kaseko?!?!
Pillow est un Fork de PIL, créé par Alex Clark and Contributeurs. PIL est la bibliothèque Python Imaging Library par Fredrik Lundh et Contributeurs.
Si la fondation Pi propose d'installer Pillow plutôt de Pil c'est probablement parce que Pillow peut s'installer via l'utilitaire pip et que la bibliotèque est suffisamment légère que pour pouvoir tourner sur un Pi.
Cela n'enlève pourtant rien à l'intérêt de Pillow (cfr la doc).
De la doc
Autre point crucial, c'est la documentation... une belle doc comme je les aiment bien.
Installer Pillow
Plus d'information
PIL est mondialement reconnu pour sa puissance... mais aussi tristement connu pour être parfois vraiment pénible à installer.
En travaillant sur la documentation du Sense Hat pour Raspberry-Pi, j'ai découvert que la fondation Pi proposait d'installation Pillow en même temps que la bibliothèque du Sense-Hat.
Piqué à vif, j'ai jeté un petit coup d'oeil sur Pillow.
Pillow? Kaseko?!?!
Pillow est un Fork de PIL, créé par Alex Clark and Contributeurs. PIL est la bibliothèque Python Imaging Library par Fredrik Lundh et Contributeurs.
![]() |
| Pillow Logo source: python-pillow.github.io |
Si la fondation Pi propose d'installer Pillow plutôt de Pil c'est probablement parce que Pillow peut s'installer via l'utilitaire pip et que la bibliotèque est suffisamment légère que pour pouvoir tourner sur un Pi.
Cela n'enlève pourtant rien à l'intérêt de Pillow (cfr la doc).
De la doc
Autre point crucial, c'est la documentation... une belle doc comme je les aiment bien.
Installer Pillow
sudo pip-3.2 install pillow
Plus d'information
mercredi 26 août 2015
Bibliothèque & outils pour Python
Python-Editor
En m'intéressant à Alembic et SqlAlchemy, je suis tombé sur un Package portant le nom de Pyhton-Editor.
Et bien, que voila un petit outil intéressant... Python-Editor ouvre un éditeur (par programmation) et se débrouille pour capturer le résultat.
Outil simple mais efficace, il permet surtout de s'affranchir des problèmes liée à la plateforme utilisée (Windows, Mac, Linux) :-)
https://pypi.python.org/pypi/python-editor/0.3
En m'intéressant à Alembic et SqlAlchemy, je suis tombé sur un Package portant le nom de Pyhton-Editor.
Et bien, que voila un petit outil intéressant... Python-Editor ouvre un éditeur (par programmation) et se débrouille pour capturer le résultat.
Outil simple mais efficace, il permet surtout de s'affranchir des problèmes liée à la plateforme utilisée (Windows, Mac, Linux) :-)
https://pypi.python.org/pypi/python-editor/0.3
jeudi 6 août 2015
Faire le backup d'une seule table en PostgreSql
Préambule
je sais... il est toujours mieux de faire un backup de la DB dans son entièreté. C'est d'ailleurs ce que je recommande en général, cependant, il y a toujours des cas particulier.
Introduction
Voila, j'ai fait plusieurs update foireux dans la table des fournisseurs sur mon environnement de développement. J'aurais bien besoin de restaurer les données de cette table depuis le serveur de production... mais je ne voudrais pas restaurer toute la DB maintenant.
La solution
pg_dump.exe --host adresse_du_serveur --port 5432 --username nom_utilisateur --format plain --ignore-version --verbose --file "nom_du_fichier_de_backup_sql" --table public._nom_de_la_table base_de_donnee
Exemple pratique
Restaurer les données
N'oubliez pas renommer la table (vous pouvez le faire avec pgAdmin III , via les propriétés de la table)
psql -h adresse_serveur_local -p 5432 -U nom_utilisateur -d base_de_donnée -a -f nom_du_fichier_de_backup_sql
Exemple pratique
cd c:\temp\
je sais... il est toujours mieux de faire un backup de la DB dans son entièreté. C'est d'ailleurs ce que je recommande en général, cependant, il y a toujours des cas particulier.
Introduction
Voila, j'ai fait plusieurs update foireux dans la table des fournisseurs sur mon environnement de développement. J'aurais bien besoin de restaurer les données de cette table depuis le serveur de production... mais je ne voudrais pas restaurer toute la DB maintenant.
La solution
- Faire un backup de la table depuis le serveur avec pg_dump --> fichier de backup sql
- Renommer la table sur le serveur local (vaut mieux pas l'effacer trop vite)
- Restaurer le fichier de backup sur la db locale avec l'outil psql
pg_dump.exe --host adresse_du_serveur --port 5432 --username nom_utilisateur --format plain --ignore-version --verbose --file "nom_du_fichier_de_backup_sql" --table public._nom_de_la_table base_de_donnee
Exemple pratique
pg_dump.exe --host 192.168.1.205 --port 5432 --username postgres --format plain --ignore-version --verbose --file "C:\temp\supplier.backup" --table public.file0020 stockprod
Restaurer les données
N'oubliez pas renommer la table (vous pouvez le faire avec pgAdmin III , via les propriétés de la table)
psql -h adresse_serveur_local -p 5432 -U nom_utilisateur -d base_de_donnée -a -f nom_du_fichier_de_backup_sql
Exemple pratique
cd c:\temp\
psql -h localhost -p 5432 -U postgres -d stockdev -a -f suppliers.bakup
dimanche 2 août 2015
Dans quels répertoires se trouvent mes modules Python?
Lorsque vous faites un "pip install ..." vous téléchargez et installez des modules python.
Mais où sont-ils donc installés?
Et bien, la réponse se trouve dans Python lui-même :-)
Saisissez les deux lignes de code suivantes dans un Python Interactif et vous aurez votre réponse. Génial, la réponse est indépendante de l'OS!
Ce qui dans mon cas produit la réponse suivante:
Mais où sont-ils donc installés?
Et bien, la réponse se trouve dans Python lui-même :-)
Saisissez les deux lignes de code suivantes dans un Python Interactif et vous aurez votre réponse. Génial, la réponse est indépendante de l'OS!
>>> import site >>> site.getsitepackages()
Ce qui dans mon cas produit la réponse suivante:
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
vendredi 31 juillet 2015
NPyScreen: interface en mode texte (console) pour Python
Dans l'article "urwid: interface en mode texte (console) pour Python" je regrettais surtout la lourdeur du Framework et la difficulté d'utilisation de celui-ci.
Je me penche donc sur une autre alternative "NPyScreen" en espérant que celle-ci ne soit pas tout aussi inapprochable qu'Urwid.
Basé sur nCurse, nPyScreen permet de réaliser des interfaces au look rudimentaires mais efficace.
NB: Depuis, je sais qu'il y a des thèmes et j'ai vraiment apprécié le temps (et investissement) très court pour la prise en main. I <3 nPyScreen.
Il faut avouer que le code correspondant est assez explicite.
Pour ma part, je préfère un code un peu plus long mais plus explicite.
La lisibilité (et le sens des instruction) est limpide, c'est déjà une bonne choses.
Voyez également la vidéo suivante présentant les différentes fonctionnalités de NPyScreen.
_curses.error: must call initscr() first
L'exemple le plus simple de npyscreen est celui-ci
et débouche inévitablement sur l'erreur:
_curses.error: must call initscr() first
La raison est simple, npyscreen se base sur la bibliothèque curse. Comme l'exemple n'initialise pas un objet "PyScreen Application" qui lui initialise Curse, nous devrons donc faire l'initialisation de Curse nous même.
Dans ce cas bien précis, il faudra faire l'initialisation de Curse nous même (voyez l'autre version de l'exemple.
Autre chose: une fois que curse est initialisé, il prend le contrôle totale de l'écran et de tout ce qui s'affiche.
Par conséquent, hors de question de taper le code de l'exemple dans un Python Interactif... dès que vous aurez initialisé Curse, vous ne verrez plus rien s'afficher à l'écran.
Il faut donc taper votre code dans un script Python puis exécuter le script Python.
Voici donc l'exemple complet et fonctionnel que nous avons placé dans le fichier 00_form.py que vous pouvez exécuter.
NPyScreen vs Urwid
Pour moi, il n'y a pas photo. 2H pour mon premier écran NPyScreen (avec le message d'erreur) contre 8H pour un résultat non satisfaisant (tellement il a été compliqué d'y arriver).
Pour mes petits outils de gestion journalier ce sera NPyScreen.
Ressources
Je me penche donc sur une autre alternative "NPyScreen" en espérant que celle-ci ne soit pas tout aussi inapprochable qu'Urwid.
Basé sur nCurse, nPyScreen permet de réaliser des interfaces au look rudimentaires mais efficace.
NB: Depuis, je sais qu'il y a des thèmes et j'ai vraiment apprécié le temps (et investissement) très court pour la prise en main. I <3 nPyScreen.
Il faut avouer que le code correspondant est assez explicite.
Pour ma part, je préfère un code un peu plus long mais plus explicite.
La lisibilité (et le sens des instruction) est limpide, c'est déjà une bonne choses.
import npyscreen
class TestApp(npyscreen.NPSApp):
def main(self):
# These lines create the form and populate it with widgets.
# A fairly complex screen in only 8 or so lines of code - a line for each control.
F = npyscreen.Form(name = "Welcome to Npyscreen",)
t = F.add(npyscreen.TitleText, name = "Text:",)
fn = F.add(npyscreen.TitleFilename, name = "Filename:")
fn2 = F.add(npyscreen.TitleFilenameCombo, name="Filename2:")
dt = F.add(npyscreen.TitleDateCombo, name = "Date:")
s = F.add(npyscreen.TitleSlider, out_of=12, name = "Slider")
ml = F.add(npyscreen.MultiLineEdit,
value = """try typing here!\nMutiline text, press ^R to reformat.\n""",
max_height=5, rely=9)
ms = F.add(npyscreen.TitleSelectOne, max_height=4, value = [1,], name="Pick One",
values = ["Option1","Option2","Option3"], scroll_exit=True)
ms2= F.add(npyscreen.TitleMultiSelect, max_height =-2, value = [1,], name="Pick Several",
values = ["Option1","Option2","Option3"], scroll_exit=True)
# This lets the user interact with the Form.
F.edit()
print(ms.get_selected_objects())
if __name__ == "__main__":
App = TestApp()
App.run()
Voyez également la vidéo suivante présentant les différentes fonctionnalités de NPyScreen.
_curses.error: must call initscr() first
L'exemple le plus simple de npyscreen est celui-ci
MyForm = Form() usrn_box = MyForm.add_widget(TitleText, name="Your name:") internet = MyForm.add_widget(TitleText, name="Your favourite internet page:") MyForm.edit()
et débouche inévitablement sur l'erreur:
_curses.error: must call initscr() first
La raison est simple, npyscreen se base sur la bibliothèque curse. Comme l'exemple n'initialise pas un objet "PyScreen Application" qui lui initialise Curse, nous devrons donc faire l'initialisation de Curse nous même.
Dans ce cas bien précis, il faudra faire l'initialisation de Curse nous même (voyez l'autre version de l'exemple.
Autre chose: une fois que curse est initialisé, il prend le contrôle totale de l'écran et de tout ce qui s'affiche.
Par conséquent, hors de question de taper le code de l'exemple dans un Python Interactif... dès que vous aurez initialisé Curse, vous ne verrez plus rien s'afficher à l'écran.
Il faut donc taper votre code dans un script Python puis exécuter le script Python.
#!/usr/bin/python # encoding: utf8 import curses from npyscreen import * # Initialisation de curse # Non nécessaire si vous employez l'objet "PyScreen Application" pour # gérer l'application curses.initscr() # Exemple nPyScreen MyForm = Form() usrn_box = MyForm.add_widget( TitleText, name="Votre Nom" ) internet = MyForm.add_widget( TitleText, name="Your favorit internet page:" ) MyForm.edit() # Remettre le terminal dans son état d'origine curses.nocbreak() curses.echo() curses.curs_set( 1 ) curses.endwin() # Imprimer les données collectées print( 'Votre nom est %s' % usrn_box.value ) print( 'L adresse URI est %s' % internet.value )
Voici donc l'exemple complet et fonctionnel que nous avons placé dans le fichier 00_form.py que vous pouvez exécuter.
NPyScreen vs Urwid
Pour moi, il n'y a pas photo. 2H pour mon premier écran NPyScreen (avec le message d'erreur) contre 8H pour un résultat non satisfaisant (tellement il a été compliqué d'y arriver).
Pour mes petits outils de gestion journalier ce sera NPyScreen.
Ressources
- An introduction to npyscreen (ReadTheDoc)
- Tutorial on nPyScreen (Google Doc, Wiki of the project)
A complete documentation about NPyScreen - Exemples de NPyScreen (Google Doc, examples)
- YouTube: Toute une série de vidéo d'introduction sur nPyScreen
Inscription à :
Articles (Atom)


