[Python] Mother

2006-11-09 Per discussione efphe
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

Ciao a tutti,

mi sono iscritto da una settimana circa in ML con l'intento di
promuovere un modulo python che sto scrivendo, con la speranza di
trovare qualche interessato con cui condividere l'avventura.

Mi e' gia' capitato di parlarne con Eriol.

Il modulo si chiama Mother ed e' un ORM, cioe' un'astrazione per il
linguaggio SQL, come SQLAlchemy o SQLobject.
Utilizza l'ottimo psycopg.

Il punto e' che ha delle caratteristiche peculiari e, spero, interessanti:

 * E' non tipato. Non occorre specificare il tipo dei campi delle
   tabelle.
 * E' non dichiarato: Mother e' introspettivo e conosce automaticamente
   i campi di ogni tabella. Questa grazie a un'inizializzazione,
   automatica, che viene eseguita una tantum.
 * Ogni classe puo' ottenere, senza necessita' di definizioni, i metodi
   per gestire automaticamente Figli, Relazioni e Join.
 * Connessione al DB persistente.
 * Un ottimo logger (speaker.py), che permette di loggare tramite
   syslog o su stdout.

Per il momento solo postgres e' supportato, ma l'esclusiva mi attrae
quasi :)

Mi chiedo se non ci sia interesse da parte della comunita' italiana
Python ad adottare il progetto, trasformandlo magari in una fucina
attraverso la quale si possa prima di tutto divertirsi e imparare, ma
anche portare avanti un progetto che potrebbe diventare piu' importante.
Per questo sono a vostra disposizione.

Al momento il codice e' accessibile tramite svn, (c'e' anche un Howto):

$ svn co svn://siddharta.efphe.net/mother mother

Spero di non avervi annoiato troppo.
In seguito riporto qualche esempio (in verita' si tratta solo di qualche
comando minimale) di utlizzo, per chiarire meglio le
caratteristiche che ho cercato di descrivervi.

Ciao e buon lavoro

- --
efphe

#
## Esempi, ricorda che i tipi non contano...uso uno pseudo SQL
#
CREATE TABLE ABC (a,b,c);
CREATE TABLE DEF (d,e,f);
CREATE TABLE AD (a,d, a foreign key (ABC.a),d foreign key(DEF.d))

>>> MyAbc=ClsAbc(dict(a=1,b='ciao mondo',c=27))
>>> MyAbc.insert()
>>> MyDef=ClsDef(dict(d=2,e=78,f=42))
>>> MyDef.insert()
>>> # Ora chiamo un metodo mai definito, ma automaticamente
>>> # creato: crea un record in AD, mettendo in relazione
>>> # Abc con Def
>>> MyAbc.assignDef(MyDef)

>>> # Ora voglio ottenere tutti i record relazionati:
>>> # il metodo "joinDef()" e' gratuito e non occorre
>>> # definirlo
>>> MyAbc=ClsAbc(dict(a=1))
>>> MyDef_list= MyAbc.joinDef()
>>> # oppure
>>> MyDef_list= MyAbc.joinDef(filter="WHERE e=78")
>>> # oppure
>>> MyDef_list= MyAbc.joinDef(filter={e:78})


-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.5 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFFU6EQi7obm7aBjHcRAmRTAJ0Q+x1UDFfBcZ3BT8GHnOwFWYm7TwCfQTuZ
wunl26ayJloYroCiLKFmLEY=
=25jM
-END PGP SIGNATURE-
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Mother

2006-11-09 Per discussione efphe
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

Giovanni Porcari wrote:
> Ciao
> 
> stiamo facendo anche noi un progetto analogo.
> Potrebbe essere interessante collaborare. Se lo desideri fatti sentire.

Di che progetto si tratta? Un altro orm?

- --
efphe
-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.5 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFFU7UOi7obm7aBjHcRAsnBAJ9PJ3HDXZNTvDYVKHYVqVIf3iCXqACfdQo1
ArAyzv2/Hbu1tL+laqUE8h4=
=0pls
-END PGP SIGNATURE-
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] exporting di classi

2006-12-01 Per discussione efphe

Manlio Perillo wrote:

Federico Tomassini ha scritto:

Ciao a tutti,

ho un dubbio sui python internal.
Ecco la situazione; ho due classi:

###
class Foo:
  def __init__(self):
   self.x= 0
  def inc(self):
   self.x+= 1

class Bar:
  def __init__(self):
   self.x= 0

foo=Foo()
bar=Bar()
###

Poi, eseguo cio' che chiamo un'exporting di classe:

###
attr= getattr(foo, 'inc')
setattr(bar, 'inc', attr)
###

In questo modo la classe `bar` avra' il metodo 'inc',
richiamabile tramite `self.inc`.

Se a questo punto qualcuno si chiedesse perche' non
eredito, la risposta e' la seguente: l'ereditarieta'
costringe, per ogni classe, a inizializzare un nuovo
padre; queso in genere non e' un problema, ma nel mio
caso voglio che le mie classi utilizzino tutte lo
*stesso padre*, e non un' istanza ciascuna.



In Python la classe base non è inizializzata a meno che  non lo richieda 
tu esplicitamente.


Mi sembrava che la frase:

"""
ma nel mio caso voglio che le mie classi utilizzino 
tutte lo *stesso padre*

"""

fosse chiara.

Il problema non sta nell'inizializzazione, e non si 
aggira non inizializzando nulla.


Mi spiego in altre parole: ho bisogno di *un*'istanza 
Foo che venga utilizzata da *ogni* istanza Bar, in modo 
che l'istanza Foo sia condivisa, persistente e shared 
per ogni classe Bar.


Al tempo stesso, mi chiedo se sia possibile (di certo 
lo e', basta fare abbastanza hack) e come possa essere 
implementato un meccanismo di "esportazione di tipo 
ereditaria": il metodo inc, in altre parole, dovrebbe 
inizializzare il primo argomento (self) a Bar.bar e non 
a Foo.foo.


Ma attenzione, se ho due istanza Bar, B e C, devo avere:

memory_address(B.inc)= memory_address(C.inc)

--
efphe









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


Re: [Python] exporting di classi

2006-12-01 Per discussione efphe

Manlio Perillo wrote:

Al tempo stesso, mi chiedo se sia possibile (di certo lo e', basta fare 
abbastanza hack) e come possa essere implementato un meccanismo di 
"esportazione di tipo ereditaria": il metodo inc, in altre parole, 
dovrebbe inizializzare il primo argomento (self) a Bar.bar e non a Foo.foo.


Ma attenzione, se ho due istanza Bar, B e C, devo avere:

memory_address(B.inc)= memory_address(C.inc)



Se è proprio questo quello che vuoi, puoi fare:

import types

bar.inc = types.MethodType(foo.inc.im_func, bar)


Yep, grazie, proprio quello che intendevo  ;)

--
efphe





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


Re: [Python] script per file di log ( linee guida)

2007-01-18 Per discussione efphe
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

Salvatore MONACO wrote:

> il file test.txt contiene
> 
> Data Corrente 18/01/2007

Se non ho capito male devi vedere se quella e' la data di oggi?

In caso:

>>> fil= open(tuo_file)
>>> s= fil.read()
>>> dstr= s.split(' ')[-1]
>>> import datetime
>>> o= datetime.datetime.today()
>>> ostr= oggi.strftime('%d/%m/%Y')
>>> if ostr== dstr:
>>>  print 'Ok'

Ma secondo me stai sbagliando.
Visto che viene prodotto un file di log ogni giorno, la data
specificata sul file coincide con la data d creazione del file.
Quindi, puoi fare:

>>> from stat import CTIME
>>> import os
>>> try:
>>>  stats= os.stat(tuo_file)
>>> except:
>>>  print 'unexistent file'
>>> today= datetime.datetime.today()
>>> file_time= stats[CTIME]
>>> ctime= datetime.datetime.fromtimestamp(ctime)
>>> are_equal= (today- ctime).days and False or True


Spero sia utile

- --
efphe
Today is Pungenday, the 18th day of Chaos in the YOLD 3173
-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.5 (GNU/Linux)

iD8DBQFFr9Dgi7obm7aBjHcRAq+SAJ9tue+Pldz6n9fwAYK7XcK87XtV4ACffos/
sU0Som4TZqYIkWTOiz77Mr0=
=AMFi
-END PGP SIGNATURE-
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] script per file di log ( linee guida)

2007-01-18 Per discussione efphe
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1


ERRATA CORRIGE

>>>> from stat import ST_CTIME
  
>>>> import os
>>>> try:
>>>>  stats= os.stat(tuo_file)
>>>> except:
>>>>  print 'unexistent file'
>>>> today= datetime.datetime.today()
>>>> file_time= stats[ST_CTIME]
     >>>> ctime=
datetime.datetime.fromtimestamp(ctime)
>>>> are_equal= (today- ctime).days and False or True
- --
efphe
Today is Pungenday, the 18th day of Chaos in the YOLD 3173
-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.5 (GNU/Linux)

iD8DBQFFr9JLi7obm7aBjHcRAnRLAJ4mr6xgpY+Zj/rOX9to4CyEVIYV7gCfZSP4
QlPcUQUK4SshF4gD565WG18=
=JXdl
-END PGP SIGNATURE-
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Richiesta di consiglio...

2007-01-20 Per discussione efphe
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

Roberto Bettazzoni wrote:
> Marco ha scritto:
>> Salve
>> io vorrei far lanciare a un programma python un programma esterno,
>> se uso il comando
>> status = os.system(cmd)
>> python si ferma e resta in attesa del programma esterno.
>> A me servirebbe invece che il programma esterno fosse indipendente ma 
>> recuperare il numero del processo per poterlo killare successimante.
>> 

ma perche' invece di dichiarare del codice come stringa, poi salvarlo
su file ed eseguire quest'ultimo, non usi semplicemente fork?

Tra le altre cose, il codice:

 >>> while 1:
 >>>  sleep(0.1)

e' devastante. Usa pause, o poll, o select.

I principi della programmazione Unix non vanno piu' di moda? :)

- --
efphe
Today is Setting Orange, the 20th day of Chaos in the YOLD 3173
-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.5 (GNU/Linux)

iD8DBQFFsfxSi7obm7aBjHcRAo5IAJ9iRLzJjfrRJhtzA7j5QO2d1jeqQACfaqbr
OND/EmxgoYI8gvRoiX52MyU=
=l/qT
-END PGP SIGNATURE-
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Parere su DejaVu

2007-03-25 Per discussione efphe
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

Joril wrote:
> Ciao a tutti!
> Sono nella fase di dover scegliere un ORM per Python, e mi sarei orientato 
> verso DejaVu per via del suo approccio.. Qualcuno ha esperienze in merito? La 
> cosa che mi preoccupa di piu' e' che in una settimana non sono riuscito ad 
> avere segni di vita ne' dalla ML ne' dall'owner.. X-)
> Grazie dell'attenzione!

Se usi postgres, potrebbe essere interessante anche questo progetto
che, insieme ad altri ragazzi, abbiamo sviluppato e continuiamo a
mantenere:

http://www.dbmother.org

Spero possa essere utile.

Ciao

- --
efphe
Today is Prickle-Prickle, the 11st day of Discord in the YOLD 3173
-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.5 (GNU/Linux)

iD8DBQFGBoJ+i7obm7aBjHcRAsp/AJ9Y3uKt5bmxmoeSChOOKLzL7QHzvgCeIDgm
JOe0dEau5iHToYGBwCdlGQU=
=YYG0
-END PGP SIGNATURE-
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Re: Parere su DejaVu

2007-03-25 Per discussione efphe
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

Joril wrote:

> Ah, l'avevo visto sulla ML di Freshmeat, pero' non vorrei legarmi ad un DBMS 
> particolare.. Grazie della segnalazione cmq :)

Eh, all'inizio pensavo anch'io fosse un limite grave.
Nel TODO si era introdotta l'espansione ad altri db.

Poi, pero', ci siamo resi conto di due cose:

1- la specializzazione su postgres permette features irrinunciabili,
rendendo mother unica nel suo genere (ed era proprio il nostro
obiettivo, altrimenti perche' sviluppare un altro orm?)

2- Oltre a postgres e (forse) Oracle, esistono forse altri db? ;)

In ogni caso, credo che dovresti prendere la decisione considerando
anche l'ambiente in cui ti muovi: in alcuni framework, per esempio,
sqlalchemy e' gia' integrato. In questo caso credo sia opportuno.

Per quanto riguarda Mother, il successo piu' grande finora pervenuto
e' un prodotto Zope: si tratta di un gestionale con 75 tables.

Quali sono le tue esigenze da questo punto di vista? Cosa ti attingi a
sviluppare?

- --
efphe
Today is Prickle-Prickle, the 11st day of Discord in the YOLD 3173
-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.5 (GNU/Linux)

iD8DBQFGBptZi7obm7aBjHcRAj3XAKCIB1Ay3/jZB2W3Fl8qiM6ycI2dKgCfSzNk
OFmKvKn973igYP1TLoByTIw=
=l7Ni
-END PGP SIGNATURE-
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Pattern singleton e chiamata __call__

2007-03-28 Per discussione efphe
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

Sbaush wrote:
> Ciao a tutti. Sto sviluppando una applicazione Python e mi sono trovato a
> dover implementare il pattern Singleton, seguendo quanto descritto in [1].
> Ho trovato diverse soluzioni su internet già scritte quindi il mio lavoro si
> è trasformato nel dover scegliere quella che sembrava adattarsi meglio alla
> vera natura del problema ed alla più corretta implementazione della
> soluzione.

Il mio piu' caldo, personale consiglio e' quello di evitare
*assolutamente* questo design pattern in python. Produce del maligno
(problemi con ereditarieta' ed ereditarieta' multipla e codice
illeggibile, almeno).

Non abbiamo bisogno del singleton, ne del borg. Li abbiamo gia'.

Usa le classi (senza istanziarle) e gli staticmethods.

Esempio:

  ### BEGIN ###
  class A:

   bar= 1

   @staticmethod
   def foo():
print 'foo'

   @staticmethod
   def set_bar(value):
A.bar= value

   @staticmethod
   def get_bar():
return A.bar

  class B(A):
   pass

  A.get_bar()
  A.set_bar(11)
  b= B()
  c= B()
  b.get_bar()
  c.get_bar()
  b.set_bar(10)
  c.get_bar()
  ### END ###


Non istanziare A, usala direttamente.
Puoi invece instanziare tranquillamente delle sottoclassi di A.

In conclusione, il mio consiglio (da adattare piu' o meno alle tue
esigenze) e':

1- dichiara una classe e dotala di tutti gli statimethods di cui
necessiti.
2- quando una classe dovra' incarnare il tuo singleton, basta ereditare.


- --
efphe
Today is Boomtime, the 14th day of Discord in the YOLD 3173
-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.5 (GNU/Linux)

iD8DBQFGCv9Vi7obm7aBjHcRAjbNAJ4srvslbZw7qTXf5fPRWqQM0/sdOACcC1Py
QHRjh6apBi6TfEyJDqkW5F4=
=1PGi
-END PGP SIGNATURE-
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Pattern singleton e chiamata __call__

2007-03-28 Per discussione efphe
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

Lawrence Oluyede wrote:
>> Non abbiamo bisogno del singleton, ne del borg. Li abbiamo gia'.
> 
> Non che mi sia mai servito ma perché dovremmo evitare Borg?

La domanda dovrebbe essere esattamente invertita: perche' dovremmo
usarlo, invece di preferire le classi e gli static methods?

- --
efphe
Today is Boomtime, the 14th day of Discord in the YOLD 3173
-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.5 (GNU/Linux)

iD4DBQFGCwQGi7obm7aBjHcRAhwGAJj/t32oecJOOMwntlYIqloHEioIAJsEkzKc
CHMU3X+ALVlQDm2+zx3eZg==
=y0RP
-END PGP SIGNATURE-
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Il modo migliore per generare file Microsoft Word

2007-03-30 Per discussione efphe

Luca wrote:

Salve a tutti.

Dovrei generare file in formato Microsoft Word dal contenuto piuttosto
semplice ma in modo dinamico da una procedura python.

Sapete consigliarmi cosa guardare e utilizzare? La piattaforma di sviluppo è
win32 ma avere un metodo che sia multipiattaforma e portabile su Linux non
guasterebbe per niente...


Anche a me e' capitata la stessa esigenza.
Ho scritto un template RTF, con dei nomi tipo: CODICE_FISCALE.

Poi apro il file in lettura, lo leggo, sostituisco CODICE_FISCALE 
con il mio valore, e salvo il nuovo documento ottenuto.


E' rozzo, ma funziona.

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