Ignore:
Timestamp:
15/06/10 14:34:23 (10 years ago)
Author:
pjkersha
Message:

Incomplete - task 9: Data Browser Replacement

  • Major fix for handling environSCRIPT_NAME?
  • removed reconstruct_url function - not needed.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • ceda_http_fileserver/trunk/ceda_http_fileserver/ceda/server/wsgi/fileserver/app.py

    r7024 r7031  
    3333 
    3434log = logging.getLogger(__name__) 
    35  
    36  
    37 def reconstruct_url(environ): 
    38     """Make URL from environ keys""" 
    39     # From WSGI spec, PEP 333 
    40     url = environ['wsgi.url_scheme']+'://' 
    41     if environ.get('HTTP_HOST'):  
    42         url += environ['HTTP_HOST'] 
    43     else: 
    44         url += environ['SERVER_NAME'] 
    45         if environ['wsgi.url_scheme'] == 'https': 
    46             if environ['SERVER_PORT'] != '443': 
    47                 url += ':' + environ['SERVER_PORT'] 
    48         else: 
    49             if environ['SERVER_PORT'] != '80': 
    50                 url += ':' + environ['SERVER_PORT'] 
    51                 
    52     url += urllib.quote(environ.get('SCRIPT_NAME','')) 
    53      
    54     pathInfo = environ.get('PATH_INFO','') 
    55     url += urllib.quote(pathInfo).replace(url.replace(':', '%3A'), '') 
    56      
    57     if environ.get('QUERY_STRING'): 
    58         url += '?' + environ['QUERY_STRING'] 
    59     environ['reconstructed_url'] = url 
    60      
    61     return url 
    6235     
    6336     
     
    11083    DEFAULT_WRITE_BLK_SIZE = 1024 
    11184    DEFAULT_CONTENT_TYPE = 'text/plain; charset=utf-8' 
    112     DEFAULT_MOUNT_POINT = '/' 
     85    DEFAULT_MOUNT_POINT = '' 
    11386     
    11487    statusCode2Msg = staticmethod(_statusCode2Msg) 
     
    301274     
    302275    def handler(self, environ, start_response): 
    303         """Application to serve out windmill provided""" 
    304         url = urlparse(reconstruct_url(environ)) 
    305          
    306         if self.mountPoint is not None: 
    307             #split_url = url.path.split(self.mountPoint, 1) 
    308             split_url = url[2].split(self.mountPoint, 1) 
    309              
    310             if len(split_url) < 2: 
    311                 log.error('Error splitting URI %r with mount point %r: ' 
    312                           'returning 404 Not Found response', 
    313                           url, self.mountPoint) 
    314                  
    315                 status = FileServerApp.statusCode2Msg(httplib.NOT_FOUND) 
    316                 response = status 
    317                 start_response(status, 
    318                                [('Content-length', str(len(response))), 
    319                                 ('Content-type', 'text/plain')]) 
    320                 return [response] 
    321                  
    322             relativeURI = split_url[1] 
     276        """Translate URI path to local file system path and map correct  
     277        callback from the HTTP request method 
     278        """ 
     279        if self.mountPoint: 
     280            splitPath = environ['PATH_INFO'].split(self.mountPoint, 1) 
     281            if len(splitPath) < 2: 
     282                log.error('Error splitting environ["PATH_INFO"]=%r with mount ' 
     283                          'point %r: returning 404 Not Found response', 
     284                          environ['PATH_INFO'], self.mountPoint) 
     285              
     286            relativeURI = splitPath[1] 
    323287        else: 
    324             relativeURI = url[2] 
    325          
     288            relativeURI = environ['PATH_INFO'] 
     289             
    326290        fileSysSubDir = urllib.url2pathname(relativeURI) 
    327291         
     
    366330                           [('Content-Type', 'text/plain'), 
    367331                            ('Content-length', str(len(response)))]) 
     332            return [response] 
     333         
     334        elif not os.path.exists(filePath): 
     335            response = status = FileServerApp.statusCode2Msg(httplib.NOT_FOUND) 
     336            log.error('Requesting URI path %r, corresponding file path %r ' 
     337                      'doesn\'t exist: returning %s response', 
     338                      environ['PATH_INFO'], 
     339                      filePath, 
     340                      status) 
     341            start_response(status,  
     342                           [('Content-Type', 'text/plain'), 
     343                            ('Content-Length', str(len(response)))]) 
     344             
    368345            return [response] 
    369346             
     
    387364                        '<br>'.join(lines)) 
    388365     
    389             start_response('200 OK',  
     366            start_response(FileServerApp.statusCode2Msg(httplib.OK),  
    390367                           [('Cache-Control','no-cache'),  
    391368                            ('Pragma','no-cache'), 
Note: See TracChangeset for help on using the changeset viewer.