Derniers billets de blog
Connecting to Oracle with SQLAchemy and very simple Plone integration
Requirements
- Python 2.4 or higher.
- easy_install (see http://peak.telecommunity.com/DevCenter/EasyInstall).
- Oracle 9i or higher.
SQLAlchemy installation
cx_oracle
See http://cx-oracle.sourceforge.net/ for the good version, depending on your Python and Oracle versions.
$ export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server $ export PATH=$PATH:$ORACLE_HOME/bin $ path_to_python/bin/easy_install cx_oracle $ path_to_python/bin/python [...] >>> import cx_Oracle >>> cx_Oracle <module 'cx_Oracle' from '[...]/cx_Oracle.so'>
SQLAlchemy
$ path/to/python/bin/easy_install sqlalchemy $ path_to_python/bin/python [...] >>> import sqlalchemy >>> sqlalchemy.__version__ '0.5.4'
Simple connection to Oracle with Python
$ path_to_python/bin/python [...] >>> import sqlalchemy >>> sqlalchemy.create_engine('oracle://username:password@database') >>> connection = oracle_db.connect() >>> result = connection.execute("SELECT test_column FROM test_table") >>> for row in result: ... print row ... ('NAME 1',) ('NAME 2',) [...] >>> connection.close()
Plone/Zope integration
Integration in buildout.cfg
As cx_oracle and SQLAlchemy are already installed in our python, we don't need to list them as dependencies in the buildout.cfg file.
However we have to declare in buildout.cfg where are the Oracle binaries:
$ vi buildout.cfg ... environment-vars = ... ORACLE_HOME /usr/lib/oracle/xe/app/oracle/product/10.2.0/server PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin: /usr/lib/oracle/xe/app/oracle/product/10.2.0/server ...
A browser view example
$ vi browser.py # Zope imports from zope.interface import implements from Products.Five.browser import BrowserView from plone.memoize import ram # Python import from time import time import sqlalchemy # Product imports from interfaces import IExampleBrowserView class ExampleBrowserView(BrowserView): """ See IExampleBrowserView for documentation """ implements(IExampleBrowserView) def __init__(self, context, request): self.context = context self.request = request @ram.cache(lambda *args: time() // (60 * 60)) # 60 minutes def getOracleParamDatas(self): oracle_db = sqlalchemy.create_engine('oracle://username:password@database') connection = oracle_db.connect() datas = [] try: result = connection.execute("SELECT name, value, description FROM params") for row in result: datas.append({'name': row.name, 'value': row.value, 'description': row.description}) finally: connection.close() # Always return simple python data structure for catching purpose return datas
Références
Getting Subclipse (and JavaHL) to work in Ubuntu Intrepid Ibex with Eclipse 3.4.2
First of all I use an Eclipse Bundle built with the Yoxos Eclipse service, but without Subclipse.
The requirements for Subclipse 1.4 are Subversion 1.5 and the JavaHL library.
Subversion 1.5
$ sudo apt-get install subversion $ svn --version svn, version 1.5.1 ...
Java and JavaHL
You need to use Java provided by Sun.
$ sudo apt-get install sun-java6-jre
Note: libsvn-javahl is a dummy package to assist with upgrades from Debian 3.0, as libsvn-javahl has been renamed to libsvn-java.
$ sudo apt-get install libsvn-java $ ls /usr/lib/jni libsvnjavahl-1.so libsvnjavahl-1.so.0 libsvnjavahl-1.so.0.0.0
And set Sun-Java as your default JVM:
$ sudo update-java-alternatives -s java-6-sun
eclipse.ini
We need to edit the eclipse.ini file to add a line which says where are the JavaHL librairies.
$ gedit ~/.../eclipse.ini Add at the end the line: -Djava.library.path=/usr/lib/jni
My eclipse.ini file contains:
-startup plugins/org.eclipse.equinox.launcher_1.0.101.R34x_v20081125.jar -showsplash org.eclipse.platform --launcher.XXMaxPermSize 256m -vmargs -Xms40m -Xmx256m -Djava.library.path=/usr/lib/jni
Now, restart Eclipse.
Subclipse
Follow the screenshot tour of the Subclipse installation process in Eclipse 3.x.
Astuce: Eviter l'envoi de courriels malencontreux avec Postfix
Ajouter la ligne suivante à la fin du fichier /etc/postfix/main.cf:
default_transport = error:outside mail is not deliverable
Marre de redémarrer Zope2 & Plone ?
Plone 3 & plone.reload
Installer plone.reload 0.9
Editer votre buildout.cfg pour y intégrer plone.reload:
[project] ... eggs= ... plone.reload zcml= ... plone.reload [versions] ... plone.reload = 0.9
Puis relancer votre buildout:
$ ./bin/buildout -c buildout.cfg
Utiliser plone.reload
Si votre Zope écoute sur le port 8080 de localhost, rendez-vous à l'adresse suivante: http://localhost:8080/@@reload
L'interface vous propose deux actions:
- Reload code: Tous les modules modifiés depuis leur dernier chargement sont rechargés.
- Reload code and ZCML: Recharge également tous les modules modifiés mais aussi toutes les directives de configuration ZCML.
Attention: plone.reload reste expérimental et possède certaines limites, notament pour les méthodes décorées qui ne sont pas rechargées correctement.
Plone 2.5 & RefreshNG
Pourquoi ne pas utiliser plone.reload ?
Et bien tout simplement car je n'ai pas réussi ;) et que plone.reload s'est très fortement inspiré du produit Zope RefreshNG.
Installer RefreshNG 0.1
Editer votre buildout.cfg pour y intégrer RefreshNG:
[project] ... urls= ... http://launchpad.net/refreshng/0.1/0.1/+download/RefreshNG-0.1.tar.gz
Puis relancer votre buildout:
$ ./bin/buildout -c buildout.cfg
Utiliser RefreshNG
Pour activer la fonction "refresh" pour un de vos produits en cours de développement (ex: MyProduct), il suffit de rajouter dans le produit un fichier vide nommé "refresh.txt".
Rendez-vous alors via la ZMI sur la page "Control_Panel > Products > MyProduct" puis cliquez sur l'onglet "refresh".
L'interfarce vous propose alors de recharger le produit (Refresh this product) et même de marquer le produit comme "auto-recharcheable" (auto refresh mode).
Attention: Tous les produits ne sont pas compatibles avec cette fonctionnalité, cf. le README du produit RefreshNG pour en savoir plus.
Buildout Quick Reference Card -> très pratique !!!
Excellent résumé pour ceux qui utilise buildout pour leurs déploiements.
Buildout Quick Reference Card" sur sixfeetup.com
Au programme:
- Démarrer avec un buildout Plone
- Configuration
- Versions
- Utilisation en ligne de commande
- Options
- Commandes
- Assignements
- et liens pour en savoir plus
Un grand merci à Six Feet Up !!!
La nouvelle version d'OpenERP 5.0 est là!
Apparemment tout plein de nouveautés, aussi bien pour le logiciel que pour l'organisation de la communauté OpenERP et la gestion de la maintenance fournit par Tiny.
Parmi les nouveautés de cette nouvelle version majeure:
- Un wiki
- Un webmail
- Un cube OLAP (Business Intelligence)
- Une boîte à idée
- Une gestion documentaire
- Une intégration eCommerce
- etc...
[edit 2015 : OpenERP est maintenant Odoo]