| Manera, Villiam 
    vmanera at manord.com Fri Jun 7 14:32:13 EST 2002 
 Wow!!!!! publisher.py patched with this function work fine!!!!
class File:
    """ Like a file, but also has headers and filename
    """
    def __init__(self, field):
        # steal all the file-like methods
        #for m in field.file.__methods__:
        #for m in dir(field.file):    #dont' work
        for m in self.sim_methods(field.file):
            self.__dict__[m] = getattr(field.file, m)
        self.headers = field.headers
        self.filename = field.filename
    
    def sim_methods(self,obj):
        from types import BuiltinMethodType   #parte aggiunta
        return filter(lambda s, t=obj:
           type(getattr(t, s)) == BuiltinMethodType, dir(obj))
thanks all
Villiam
-----Messaggio originale-----
Da: John D. Garberson [mailto:john.garberson at nexos.com]
Inviato: venerdì 7 giugno 2002 10.54
A: vmanera at manord.com
Cc: Mod_python at modpython.org
Oggetto: Re: [mod_python] problem in file download
Hi,
You wrote a few days back:
> 
> Hello,
> 
> I'm trying to download a file:
> 
....
....
....
a = getattr(file, name)
> 
> AttributeError: 'file' object has no attribute '__methods__'
> 
> 
> does anyone have any idea to solve this?
> 
> Villiam
Having to downgrade seems a bit extreme [;-)
I don't know much about the publisher.py module, never having used it.
But if you do this import:
------------------------------------------------------------------------
from types import BuiltinMethodType
------------------------------------------------------------------------
then this function:
------------------------------------------------------------------------
def sim_methods(obj):
    return filter(lambda s, t=obj:
           type(getattr(t, s)) == BuiltinMethodType,
                                             dir(obj))
--------------------------------------------------------------------------
works under both 2.0 and 2.2.1 (I don't have a 2.1 any more) and delivers
the list of methods that it seems you want, looking at the publisher.py
source.  If you're not a fan of the functional programming approach, then
a list comprehension:
-----------------------------------------------------------------------
def sim_methods(obj):
    return [m for m in dir(obj)
                   if type(getattr(obj, m)) == BuiltinMethodType]
-----------------------------------------------------------------------
works just as well.
You could just replace the 'for m in field.file.__methods__:'
with
'for m in sim_methods(field.file):'
Hope this helps.
John
     John Garberson                             nexos ag 
     john.garberson at nexos.com                   Frobenstrasse 66 
                                                CH-4053 Basel, Switzerland
                                                Tel. 41 61 283 55 03
                                                Fax  41 61 283 55 01
_______________________________________________
Mod_python mailing list
Mod_python at modpython.org
http://www.modpython.org/mailman/listinfo/mod_python
 |