Passa ai contenuti principali

Ricerca Rubrica per Plone

Ultimamente mi sono dedicato allo studio di diversi CMS. Una delle prime scelte, attratto dalle potenzialità e dal sistema interno di sicurezza è caduta su Plone [1]. Plone è un prodotto che poggia principalmente sul server Zope[2] ed è scritto interamente in Python. A differenza della maggior parte dei CMS che poggiano sulla piattaforma data dall'accoppiata Apache + MySQL + PHP questo CMS poggia sull'unico blocco Zope.Quello che ho provato a fare e che voglio condividere è la seguente cosa. In una rete intranet abbiamo l'esigenza di condividere e dare una certa versatilità alla rubrica dei numeri interni. Fino adesso si è usato un file excel.L'idea è quindi quella di recuperare i dati dal file xls preventivamente salvato con estensione csv (comma separeted virgola) e andare a cercare con espressioni regolari quello che ci serve.Dobbiamo usare un form in termine html e una pagina per l'elaborazione del risultato. In Plone dobbiamo creare un controller page template con le istruzioni del form e farlo puntare ad un external method scritto in Python. Tutto questo lo facciamo da ZMI, l'interfaccia di controllo di Zope. Non sono molto dettagliato perchè le basi sono tutte contenute nell'ottima guida The Definitive Guide to Plone (in versione online [3]).Quello che mi interessa è mostrare il codice python che potrebbe tornare utile anche a voi.
Notate che dovrete creare un external method per ogni funzione dello script qui sotto che vorrete usare. Ricerca per area e per ufficio è un esempio su come restringere il campo di ricerca.



#/usr/bin/python -w
# v.0.0.4
# Giuseppe Caliendo
#
# script per la ricerca da un file csv i dati relativi ai numeri di telefono di un dipendente
# questo script e' pensato per girare sul server ZOPE e per essere integrato nel CMS Plone
#
# www.plone.org
#

# MODULI IMPORTATI ################################################
import string # gestione stringhe
import re # gestione espressione regolari

# COSTANTI ######################################################
BACK="http://172.24.200.45/centralino" # indirizzo della pagina da dove si proviene
PATH="C:/Programmi/Plone 2/Data/Extensions/rubrica.csv" # path che punta al file csv della rubrica
SEPARATORE = ';' # carattere di separazione per i file csv

# flag di ricerca e del file csv della rubrica
COGNOME = 0
NOME = 1
AREA = 2
UFFICIO = 3
SEDE = 4
NUMERO = 5
CELLULARE = 6

#per la GUI
STILE = # codice stile

# CODICE ##########################################################

# METODI DI RICERCA

# ricerca_libera
# scandisce tutto il file csv e trova tutti i match del file
def cerca(query):
#variabili
result_set = [] # array per contenere i dati della query di ricerca
# apro il file della rubrica
rubrica = open(PATH,"r")
# metto l'intero file riga per riga in un array
righe = rubrica.readlines()
#chiudo il file della rubrica
rubrica.close()

# cerco liberamente nell'arrary scandendolo, se trovo una sottostringa la metto in un array
for i in righe:
 # faccio una ricerca non case-sensitive
 if re.search(query,i,re.I):
  result_set.append(i)
# passo al metodo di formattazione i risultati
return risultato(result_set)

# ricerca per area
def cerca_area(query):
tmp = cerca_dettaglio(query,AREA)
return risultato(tmp)

# ricerca per ufficio
def cerca_ufficio(query):
tmp = cerca_dettaglio(query,UFFICIO)
return risultato(tmp)

# ricerca per dettaglio
def cerca_dettaglio(query,flag):
#variabili
result_set = [] # array con i risultati
# apro il file della rubrica
rubrica = open(PATH,"r")
# metto l'intero file riga per riga in un array
righe = rubrica.readlines()
#chiudo il file della rubrica
rubrica.close()

# analizzo riga per riga
for r in righe:
 # separo il contenuto della riga in campi
 campi = r.rsplit(SEPARATORE)
 # a seconda del flag scelto imposto la ricerca, se trovo nel campo cercato il valore di query allora inserisco l'intera riga in result_set
 if flag == AREA: # caso ricerca per area
  if re.search(query,campi[AREA],re.I):
   result_set.append(r)
 if flag == UFFICIO: # caso ufficio
  if re.search(query,campi[UFFICIO],re.I):
   result_set.append(r)
return result_set

# FORMATTAZIONE RISULTATO

# risultato
# metodo per formattare la pagina
# scandite l'array del risultato e costruite una pagina HTML


[1] http://www.plone.org/
[2] http://www.zope.it/
[3] http://docs.neuroinf.de/PloneBook/

Post popolari in questo blog

Se excel non aggiorna le formule

Oggi in ufficio è capitata una richiesta particolare. In un documento excel dopo aver eseguito un copia-incolla di una formula non si aggiornavano i risultati nelle celle interessate. Dopo attimi di perplessità dal fondo dell'ufficio il capo ci illumina con una funzione ai più sconosciuta e che ha risolto il problema: il tasto F9. Scusate la mia ignoranza in excel ma questo blog è pensato proprio per appuntare esperienze di vita informatica. Tutto sta nel fatto che i "calcolatori d'un tempo" non disponevano di una adeguata potenza di calcolo e nelle operazioni di copia-incolla si verificavano lunghe attese per l'aggiornamento. La soluzione adottata da MS è stata quella di inserire un'opzione per impedire l'aggiornamento automatico e forzarlo con una combinazione di tasti... il tasto F9!
Combinazioni utili per il calcolo delle formule F9 = calcola le formule modificate dall'ultimo calcolo in tutte le cartelle e fogli di lavoro aperte. MAIUSC + F9 = c…

Dove si trova il mio ISP?

Il link di oggi è My IP Address Lookup. Questo servizio spagnolo mostra dove si trova fisicamente il vostro ISP. Quando vi collegate ad internet in realtà prima fate una richiesta (il vostro modem o router) ad una macchina del vostro ISP e poi vi viene assegnato un indirizzo IP. Se volete sapere dove si trova la macchina che vi permette di accedere alla rete visitate pure
http://www.ip-adress.com/

Potrete inoltre conoscere il vostro IP e il provider che ve lo offre

RaspberryPi: Controllare il desktop da remoto con VNC

Premessa
A volte può essere utile avere l'accesso da remoto ad un desktop grafico sul nostro raspberrypi. Il metodo più diffuso è quello di installare un server VNC e collegarsi poi con un client da un altro computer. Per il raspberrypi possiamo scegliere tra due strade a seconda dell'utilizzo che se ne vuole fare:

Installare TightVNC Server: crea una sessione diversa per ogni connessione non cifrataInstallare x11vnc: permette di comandare il desktop dell'utente corrente sul raspberrypi
Tra i due metodi ho preferito il secondo visto che il mio raspi è collegato direttamente ad un televisore CRT. In questo modo posso navigare in internet su schermo grande direttamente dal tablet comodamente seduto sul divano. Unica nota negativa è che questo meccanismo non funziona per pilotare XBMC, per il quale è meglio utilizzare il client per android per esempio.

Installare TightVNC Server
1. Da linea di comando eseguire
sudo apt-get install tightvncserver
2. Avviare il server con il coman…