giovedì, dicembre 12, 2013

redturtle.entiterritoriali su Plone

Alzi la mano chi non ha avuto necessità di sviluppare qualche form con menù a tendina con i soliti filtri successivi per regione, provincia e comune. Almeno ai nostri utenti, ahimè, piacciono molto.

Il prodotto redturtle.entiterritoriali 0.2.2, realizzato da RedTurtle nell'ambito dell'iniziativa PloneGov, è utilissimo nel caso abbiate bisogno di gestire i noiosi menù di cui sopra.

Il prodotto utilizza come db sqlite e SQLAlchemy come wrapper.

In Plone l'alternativa a questa soluzione potrebbe essere quella di creare dei vocabolari con ATVocabularyManager, ma francamente mi sembra una fatica inutile quando c'è già un ottimo prodotto che si installa a costo zero.


Come procedere

Per prima cosa è necessario installare sqlite e gli header di sqlite. Su Ubuntu digitate:

sudo apt-get install sqlite3 libsqlite3-dev

Nel vostro buildout di Plone inserite le sezioni per sqlite e pysqlite:

parts +=
    sqlite
    pysqlite


[sqlite]
recipe = hexagonit.recipe.cmmi
url = http://www.sqlite.org/2013/sqlite-autoconf-3080200.tar.gz
ignore-existing = true

[pysqlite]
recipe = zc.recipe.egg:custom
egg = pysqlite
include-dirs = ${sqlite:location}/include
library-dirs = ${sqlite:location}/lib
libraries = sqlite
define = HAVE_LOAD_EXTENSION,ENABLE_DTRACE,NDEBUG
rpath = ${sqlite:location}/lib

Infine aggiungete tra i vostri eggs anche redturtle.entiterritoriali e sqlsoup:

eggs =
    sqlsoup
    redturtle.entiterritoriali

L'egg SQLSoup è necessario giacché nelle ultime versione di SQLAlchemy è stato rimosso in quanto è divenuto progetto indipendente: https://pypi.python.org/pypi/sqlsoup

Lanciate pure il vostro buildout e attendete la compilazione.

Prima di avviare la vostra istanza plone è necessario procedere alla modifica di una parte di codice del prodotto redturtle.entiterritoriali perché presuppone l'uso di una versione di SQLAlchemy che ancora conteneva SQLSoup.

Quindi andate nei vostri egg (di solito nella cartella buildout-cache/eggs), cercate il prodotto redturtle (redturtle.entiterritoriali-0.2.2-py2.7.egg), entrate nella cartella /redturtle/entiterritoriali/vocabulary e modificate il file __init__.py come segue:

La prima riga è quella dell'import di SQLSoup:
from sqlalchemy.ext.sqlsoup import SqlSoup

Cambiatela in:
import sqlsoup

Alla riga 14 trovate la stringa di connessione al db:
self.engine = SqlSoup('sqlite:////%s/sqlite3.db' % path)

Cambiatela in:
self.engine = sqlsoup.SQLSoup('sqlite:////%s/sqlite3.db' % path)

Salvate e avviate la vostra istanza, That's All!
Posta un commento