2009-09-13 17 views
0

Hey, aucune idée de ce qui est l'erreur de délai d'attente que je reçois ici:Time out erreur tout en créant l'objet cgi.FieldStorage

trace d'erreur:

File "/array/purato/python2.6/lib/python2.6/site-packages/cherrypy/_cprequest.py", line 606, in respond               
    cherrypy.response.body = self.handler()                              
    File "/array/purato/python2.6/lib/python2.6/site-packages/cherrypy/_cpdispatch.py", line 25, in __call__              
    return self.callable(*self.args, **self.kwargs)                            
    File "sync_server.py", line 853, in put_file                             
    return RequestController_v1_0.put_file(self, *args, **kw)                          
    File "sync_server.py", line 409, in put_file                             
    saved_path, tgt_path, root_folder = self._save_file(client_id, theFile)                      
    File "sync_server.py", line 404, in _save_file                             
    saved_path, tgt_path, root_folder = get_posted_file(cherrypy.request, 'theFile', staging_path)                
    File "sync_server.py", line 1031, in get_posted_file                           
    , keep_blank_values=True)                                  
    File "/array/purato/python2.6/lib/python2.6/cgi.py", line 496, in __init__                      
    self.read_multi(environ, keep_blank_values, strict_parsing)                         
    File "/array/purato/python2.6/lib/python2.6/cgi.py", line 620, in read_multi                     
    environ, keep_blank_values, strict_parsing)                             
    File "/array/purato/python2.6/lib/python2.6/cgi.py", line 498, in __init__                      
    self.read_single()                                   
    File "/array/purato/python2.6/lib/python2.6/cgi.py", line 635, in read_single                     
    self.read_lines()                                    
    File "/array/purato/python2.6/lib/python2.6/cgi.py", line 657, in read_lines                     
    self.read_lines_to_outerboundary()                               
    File "/array/purato/python2.6/lib/python2.6/cgi.py", line 685, in read_lines_to_outerboundary                 
    line = self.fp.readline(1<<16)                                
    File "/array/purato/python2.6/lib/python2.6/site-packages/cherrypy/wsgiserver/__init__.py", line 206, in readline            
    data = self.rfile.readline(size)                                
    File "/array/purato/python2.6/lib/python2.6/site-packages/cherrypy/wsgiserver/__init__.py", line 868, in readline            
    data = self.recv(self._rbufsize)                                
    File "/array/purato/python2.6/lib/python2.6/site-packages/cherrypy/wsgiserver/__init__.py", line 747, in recv             
    return self._sock.recv(size)                                 
timeout: timed out       

Voici le code qui s'appelle :

def get_posted_file(request, form_field_name, tgt_folder, tgt_fname=None):                      
     logger.debug('get_posted_file: %s' % request.headers['Last-Modified'])                      

     lowerHeaderMap = {}                                   
     for key, value in request.headers.items():                             
      lowerHeaderMap[key.lower()] = value                              

---> dataDict = TmpFieldStorage(fp=request.rfile, headers=lowerHeaderMap, environ={'REQUEST_METHOD':'POST'}              
            , keep_blank_values=True)                           

et:

class TmpFieldStorage(cgi.FieldStorage):                               
    """                                       
    Use a named temporary file to allow creation of hard link to final destination                    
    """                                       
    def make_file(self, binary=None):                                
     tmp_folder = os.path.join(get_filer_root(cherrypy.request.login), 'sync_tmp')                    
     if not os.path.exists(tmp_folder):                              
      os.makedirs(tmp_folder)                                
     return tempfile.NamedTemporaryFile(dir=tmp_folder)  

Répondre

0

environ = { 'REQUEST_METHOD': 'POST'}

qui semble un environ plutôt déficient. La spécification CGI nécessite beaucoup plus de variables d'environnement, dont certaines auront besoin du module cgi.

En particulier, il n'y a pas d'en-tête CONTENT_LENGTH. Sans cela, cgi est par défaut pour lire tout le contenu du flux jusqu'à EOF. Mais puisqu'il s'agit (probablement) d'un flux réseau plutôt que d'un fichier, il n'y aura pas d'EOF (ou du moins pas directement à la fin de la soumission), donc le lecteur de formulaires sera assis là à attendre plus de données. . Temps libre.

+0

L'en-tête CONTENT_LENGTH ne doit être défini dans l'environnement que s'il n'est pas présent dans les en-têtes. Dans son cas, je suppose que c'est déjà là. – Sushant