Luca Montecchiani
l.montecchiani at teamsystem.com
Fri May 25 03:33:44 EDT 2007
Mike Looijmans wrote: > The suggested changes will break a lot more than they will fix. The > strange implementation of the > __repr__ functions have been done that way to remain compatible with the > existing code. read my reply to Graham, 3.3.1 is not compatible with 3.2.10 IMHO > The StringField can be made picklable by adding a __getstate__ and, if > needed, a __setstate__ > function, which will not break existing code. Probably, something like > this will do (untested code): > > ... > def __getstate__(self): > return {'name': self.name, 'value': self.value} > ... I try it and I can tell you that works. > That is a change that we could commit into the SVN archive i guess. Two other problems remain open: - StringField eval() problem with modpython 3.3.10 This could be solved using the Graham's suggestion it's up to you if this is a big compatibility issue - avoid to put the entire file content on Field __repr__ method This could be solved using the Graham's suggestion but I really don't like the idea of filling up a string with a 4x time the size of an uploaded binary file ;-) BTW this is in 3.2.10 too. > A Field instance (uploaded file with no size limit) should never be > pickled - it contains a handle > to a file that will be deleted when the current request handler ends. Yes I know and my pickle function check for data type, and only StringField,str and other basic type was allowed to be pickled. Looking at 3.3.1 util.py : 329 # make a Field 330 if disp_options.has_key("filename"): 331 field = Field(name) 332 field.filename = disp_options["filename"] 333 else: 334 field = StringField(file.read()) 335 field.name = name 336 field.file = file Why always assign the "file" member ? The docs says it works on demand and for StringField could be omitted preserving resource : 329 # make a Field 330 if disp_options.has_key("filename"): 331 field = Field(name) 332 field.filename = disp_options["filename"] 333 field.file = file 334 else: 335 field = StringField(file.read()) 336 field.name = name > Graham's suggestion to translate the fields into something neutral, i > suggest using a dictonary, is > simple enough, so I strongly advise taking that route. I'm going that way and I will happy if this thread will improve mopython internals. thanks again, luca -- Luca Montecchiani Software Di Base TeamSystem S.p.a. ------------------------------------------------------------------------------------------ Informativa ai sensi del D. Lgs. 196-30/06/2003. Il contenuto di questa e.mail e degli eventuali allegati, deve essere nella disponibilità del solo destinatario. Se ricevete per errore questa e-mail siete pregati di informarci (rispedendola al mittente) e di provvedere alla sua rimozione. Possono essere presenti informazioni riservate e non corrette (parzialmente o totalmente). Le e-mail in partenza e in arrivo possono essere oggetto di monitoraggio da parte di Teamsystem spa. Del contenuto è responsabile il mittente della presente. Chiunque venga in possesso non autorizzato di questa e-mail è vincolato dalla Legge a non leggerne il contenuto, a non copiarla, a non diffonderla e a non usarla. Informiamo che per l' esercizio dei diritti di cui all'art. 7 del d.lgs.196/2003 ci si può rivolgere al Titolare del trattamento Teamsystem S.r.l. via Gagarin 205 61100 PESARO per posta o fax, indicando sulla busta o sul foglio la dicitura "Inerente alla Privacy", o inviando una e-mail all' indirizzo privacy at teamsystem.com . ------------------------------------------------------------------------------------------
|