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: Abilitare l'audio analogico

Introduzione
Il mio raspi è collegato ad una vecchia TV CRT che ho convertito in una smartTV. RaspberryPi infatti è un ottimo prodotto per configurare un media center con connessione ad internet ed altre amenità. Se usate una vecchia TV come nel mio cavo potrebbe interessarvi come abilitare l'uscita analogica per l'audio, il jack da 3,5 mm per intenderci. Per fare ciò dobbiamo assicurarci di avere i moduli giusti del kernel caricati e configurare il raspi ad utilizzare la giusta uscita audio, infatti di default utilizza la porta HDMI.

Controllo della presenza del modulo snd_bcm2835
1 Per controllare che il modulo giusto sia presente da linea di comando eseguire

sudo lsmod | grep snd_bcm2835

2 Se non vedete alcun output vuol dire che il modulo non è ancora caricato altrimenti potete passare al prossimo paragrafo.
3 Proviamo a caricare  il modulo con il seguente comando da terminale

sudo modprobe snd_bcm2835

Se l'output del comando è una cosa del genere

FATAL: Module snd_bcm2835…