Re: [Python] Digest di Python, Volume 62, Numero 21

2011-04-09 Per discussione Mario Linguito
>
> Postate il contratto !
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Spyro - web framework open source per Python3 in sviluppo ricerca collaboratori

2011-04-09 Per discussione lex mlist
> Dai una occhiata a come Flask usa le sessioni. Ti risparmieresti un sacco
>> di grattacapi (tra cui la necessita' di condividere le sessioni su piu'
>> server quando vuoi distribuire l'applicazione).
>>
>
> Ho realizzato qualcosa di molto simile a quello in uso da Flask, ma alla
fine sono giunto alla conclusione che non è poi così usabile come soluzione.
Se salvassi sul client un dizionario serializzato con pickle e poi con
codificato con base64 l'utente se a conoscenza dei dettagli di
implementazione dell'applicazione (in qualche modo viene a sapere che si usa
un framework opensource), potrebbe facilmente ricavarsi i dati di tale
implementazione, quindi decodificare il dizionario, modificarlo e modificare
il cookie con il nuovo valore.

Avere un hash da qualche parte per verificarne il contenuto implicherebbe
comunque una persistenza dei dati server side perchè finita la richiesta
perdiamo tutti i dati e bisogna salvare l'hash e quindi poi poterlo
riconoscere.
Potrei ovviare al problema usando una keyword "secret" e con un algoritmo di
crittazione a chiave simmetrica, in modo da ricostituire poi il testo
originale e ripete l'algoritmo all'inverso per deserializzare il dizionario,
ma a questo punto dovendo perdere tempo a fare tutti questi calcoli mi
chiedo se realmente sia significativamente più efficente di una classica
soluzione file-based o db based (attualmente non supportata).

Se sbaglio qualcosa correggetemi pure.

Riguardo la possibilità di race conditions per l'implementazione attuale,
come dovrebbe comportarsi il session manager quando il file è già sotto un
lock? Dovrebbe aspettare che il file sia accessibile? oppure dovrebbe
semplicemente sollevare una eccezione, o ritornare silenziosamente al flusso
dell'applicazione senza aver fatto nulla?

Grazie mille.
PS. se in qualche modo creo disturbi scrivendo qui vi prego di farmelo
sapere, grazie.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Spyro - web framework open source per Python3 in sviluppo ricerca collaboratori

2011-04-09 Per discussione Daniele Varrazzo
On Thu, 7 Apr 2011 20:40:05 +0200, lex mlist  wrote:

> Altro problemino sorge con i dati in input ma credo sia proprio un
problema
> di escaping fatto da wsgiref. Ovvero, inserendo in un campo input "ciao
> mondo" ottengo "ciao+mondo". Nelle specifiche WSGI non mi sembra di aver
> trovato niente di rilevante a tale scopo, quindi dovrei prima provarlo
con
> un altro server wsgi e poi vedo se è il caso di tenere conto di questo
> escaping.

Questo fa parte dell'html, wsgi si limita solo a passare questi dati da
una parte all'altra. È il normale formato
"application/x-www-form-urlencoded" con cui server e client html
tipicamente scambiano i dati delle form.

Le specifiche le trovi qui ad esempio
 e in python c'è il modulo
urllib che permette di fare encoding/decoding.

Spero tu ti renda conto che dicharare "sto scrivendo un framework web" è
un'affermazione abbastanza grossa. Il percent-encoding sta all'html come la
marmellata sta alla colazione: mi auguro tu sappia quello che stai facendo
:)


-- 
Daniele Varrazzo - Develer S.r.l. 
http://www.develer.com
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Spyro - web framework open source per Python3 in sviluppo ricerca collaboratori

2011-04-09 Per discussione lex mlist
Il giorno 09 aprile 2011 15:32, Daniele Varrazzo  ha
scritto:

> Le specifiche le trovi qui ad esempio
>  e in python c'è il modulo
> urllib che permette di fare encoding/decoding.
>
Ti ringrazio per il link, che quello è html ci arrivo, semplicemente mi
chiedevo se l'escaping dovrebbe essere a carico dell'applicazione (web
framework) o del server. Visto che wsgiref è un server minimale potrebbe non
includerlo, quando altri server potrebbero farlo e quindi fare l'escape a
livello del framework sarebbe poi inutile visto che non sarebbe mai usato
con un server di produzione.,

>
> Spero tu ti renda conto che dicharare "sto scrivendo un framework web" è
> un'affermazione abbastanza grossa. Il percent-encoding sta all'html come la
> marmellata sta alla colazione: mi auguro tu sappia quello che stai facendo
> :)
>
Ripeto, il mio dubbio era quello di chi dovesse effettuare l'escape, non
cosa fosse tale codifica.
Comunque sicuramente non sò tutto, questo è innegabile, e stando a quello
che dici tu oggi dovremmo ancora essere fermi all'assembly perchè all'epoca
non c'era conoscenza e quindi dire "sto creando un linguaggio più semplice"
era un azzardo :P
A scanso di equivoci, chiaramente non mi sono offeso, anzi ti ringrazio la
risposta.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Spyro - web framework open source per Python3 in sviluppo ricerca collaboratori

2011-04-09 Per discussione lex mlist
Il giorno 09 aprile 2011 15:32, Daniele Varrazzo  ha
scritto:

> Questo fa parte dell'html, wsgi si limita solo a passare questi dati da
> una parte all'altra.
>
Aggiungo, rileggendo il mio vecchio post ammetto di non essere stato chiaro,
davo per scontato quanto sopra, e per questo mi riferivo al protocollo WSGI,
per capire se definiva dove dovrebbe avvenire l'escape (se nel server o nel
framework), o almeno dare una linea di massima di come viene gestito nella
pluralità dei casi.

Buona giornata.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Spyro - web framework open source per Python3 in sviluppo ricerca collaboratori

2011-04-09 Per discussione Daniele Varrazzo
On Sat, 9 Apr 2011 15:38:45 +0200, lex mlist  wrote:

> Ti ringrazio per il link, che quello è html ci arrivo, semplicemente mi
> chiedevo se l'escaping dovrebbe essere a carico dell'applicazione (web
> framework) o del server. Visto che wsgiref è un server minimale potrebbe
> non
> includerlo, quando altri server potrebbero farlo e quindi fare l'escape
a
> livello del framework sarebbe poi inutile visto che non sarebbe mai
usato
> con un server di produzione.,

Nota che l'escaping che vedi non è fatto dal server, ma dal client. Tu
scrivi "ciao mondo" in una form del client, e il client prepara una
richiesta http che nel corpo (in caso di POST) o nella url (in caso di GET)
contiene una versione www-form-urlencoded di quei dati, in più dichiara
"Content-Type: application/x-www-form-urlencoded" nell'header della
richiesta.

Tutto questo credo avvenga ad un livello più elevato di wsgi. Quindi sì,
l'escaping avviene a livello dell'applicazione: il client dice al server
"ti sto per passare qualcosa con "Content-Type:
application/x-www-form-urlencoded", e giù dati. Il server li subisce e
basta (non so se alla richiesta precedente avrebbe potuto dichiarare un
accept diverso, o programmare la form in modo da generare una richiesta
diversa, ma che io sappia questo è l'unico formato in uso per le form web).

-- 
Daniele Varrazzo - Develer S.r.l. 
http://www.develer.com
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Spyro - web framework open source per Python3 in sviluppo ricerca collaboratori

2011-04-09 Per discussione lex mlist
Il giorno 09 aprile 2011 17:16, Daniele Varrazzo  ha
scritto:

> Nota che l'escaping che vedi non è fatto dal server, ma dal client. Tu
> scrivi "ciao mondo" in una form del client, e il client prepara una
> richiesta http che nel corpo (in caso di POST) o nella url (in caso di GET)
> contiene una versione www-form-urlencoded di quei dati, in più dichiara
> "Content-Type: application/x-www-form-urlencoded" nell'header della
> richiesta.
>
> Tutto questo credo avvenga ad un livello più elevato di wsgi. Quindi sì,
> l'escaping avviene a livello dell'applicazione
>

Chiarissimo.
Ho quindi implementato la modifica, ora è il framework che effettua
l'encoding.
Ho utilizzato come consigliavi tu stesso urllib (sotto python3 urllib.parse
fornisce le funzioni utili a questo scopo).

Ti ringrazio per la spiegazione, anche questo è un problema superato :-)
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Spyro - web framework open source per Python3 in sviluppo ricerca collaboratori

2011-04-09 Per discussione lex mlist
Ho appena fatto il commit con la modifica consigliata da Roberto al session
manager. Ora effettua il lock sul file (con flock) nel corpo dello statement
with per gestire i file. Uscendo dal blocco con la chiusura si toglie il
lock (ero insicuro se dichiararlo esplicitamente, ma ho fatto dei test).

Grazie ancora a Roberto per la segnalazione :)
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Spyro - web framework open source per Python3 in sviluppo ricerca collaboratori

2011-04-09 Per discussione Roberto De Ioris

> Ho appena fatto il commit con la modifica consigliata da Roberto al
> session
> manager. Ora effettua il lock sul file (con flock) nel corpo dello
> statement
> with per gestire i file. Uscendo dal blocco con la chiusura si toglie il
> lock (ero insicuro se dichiararlo esplicitamente, ma ho fatto dei test).
>
> Grazie ancora a Roberto per la segnalazione :)

Visto che ci sei ti consiglio di generalizzarlo un pochino, in modo che
sia facile subclassarlo per poter usare altri motori di storage (database,
nosql, cache engine...)

Non sottovalutare questo aspetto, poter condividere le sessioni tra piu'
macchine e' una parte vitale.

-- 
Roberto De Ioris
http://unbit.it
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Spyro - web framework open source per Python3 in sviluppo ricerca collaboratori

2011-04-09 Per discussione lex mlist
Il giorno 09 aprile 2011 19:49, Roberto De Ioris  ha
scritto:

> Visto che ci sei ti consiglio di generalizzarlo un pochino, in modo che
> sia facile subclassarlo per poter usare altri motori di storage (database,
> nosql, cache engine...)
>
> Non sottovalutare questo aspetto, poter condividere le sessioni tra piu'
> macchine e' una parte vitale.
>
>
Ci stavo proprio pensando prima, cosi forza troppo l'utente ad usare uno
storage su file. Ci lavorerò su, pensavo quasi di fare un'altro settaggio
per le sessioni chiamato "engine" o  "storage" per poter definire facilmente
qualche backend usare, e quindi a runtime, quando crea l'oggetto
Session(self) (in webpage.py, assegnandolo a self.session) usare il backend
appropriato.

Ora finisco una piccola modifica al file rawquery, al posto della funzione
sql_query metterò una classe SQLQuery cosi sfruttando questa classe sarà
possibile implementare anche più facilmente un sistema di sessioni basato su
database facendo collaborare il database manager e il session manager.

Non ho messo molti dettagli, ma se hai altri consigli sono tutt'orecchie :-)
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Abuso di generatori?

2011-04-09 Per discussione Pietro Battiston
Salve a tutti,

ho del codice che fa alcuni write su una porta seriale. Tra l'uno e
l'altro, voglio far passare un poco di tempo. Ma non voglio usare
time.sleep o analoghi per non bloccare l'interfaccia (e preferisco
evitare di usare thread).

Una soluzione l'ho trovata (uso le glib, ma il principio mi sembra
chiaro):


class ScrittoreDiSerial(object):
def __init__(self):
schiavo = self.lavoratore()
# Effettua la seguente chiamata ogni 20 millisecondi:
glib.timeout_add( 20, schiavo.next )

def lavoratore(self):
fai_qualcosa()
yield True

fai_qualcos_altro()
yield True

# E posso fare anche:
while una_condizione():
   ripeti_un_azione()
   yield True

# Infine:
yield



L'unica cosa scocciante è appena mi si complica un attimo "lavoratore":
non posso separare il suo codice in diversi metodi che siano ognuno
capace di fare "pause": se uno chiama yield, allora devo istanziarlo,
chiamarlo in un loop... è un po' una palla.

Per dirne una, in "lavoratore" ho cose tipo

# Aspetta al massimo un secondo:
for i in range(50):
if leggoqualcosadallaseriale():
break
yield
if nonholettoancoranulladallaseriale():
spara_messaggio_di_errore()


E idealmente tutto ciò sarebbe contenuto in una funzione in modo che da
"lavoratore" io potessi fare semplicemente

self.aspetta(num_secondi)

mentre ovviamente non funziona, perché "yield" non si propaga.

Avete idee più brillanti su come organizzare il mio codice?
Fare dei generatori che si chiamano l'un l'altro è una soluzione che non
mi piace...
Nel mio caso particolare, una soluzione forse più comoda è utilizzare,
per le pause, un (opportuno metodo, con dentro un) loop che chiama
gtk.mainiteration() finché non è passato il tempo desiderato. Ma dovrei
studiarmi ogni quanto chiamare gtk.mainiteration()... insomma, anche
questa è un po' noiosa.

grazie

Pietro

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python