Package backend :: Package wsgi :: Module wsgiHandler
[hide private]
[frames] | no frames]

Source Code for Module backend.wsgi.wsgiHandler

 1  # 
 2  # Copyright (c) 2010--2016 Red Hat, Inc. 
 3  # 
 4  # This software is licensed to you under the GNU General Public License, 
 5  # version 2 (GPLv2). There is NO WARRANTY for this software, express or 
 6  # implied, including the implied warranties of MERCHANTABILITY or FITNESS 
 7  # FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2 
 8  # along with this software; if not, see 
 9  # http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. 
10  # 
11  # Red Hat trademarks are not licensed under GPLv2. No permission is 
12  # granted to use or replicate Red Hat trademarks that are incorporated 
13  # in this software or its documentation. 
14  # 
15  # 
16   
17  from wsgi import wsgiRequest 
18   
19   
20 -def handle(environ, start_response, server, component_type, servertype="spacewalk.server.apacheServer"):
21 # wsgi seems to capitalize incoming headers and add HTTP- to the front :/ 22 # so we strip out the first 5 letters, and transform it into what we want. 23 replacements = {'_': '-', 'Rhn': 'RHN', 'Md5Sum': 'MD5sum', 'Xml': 'XML', 'Actualuri': 'ActualURI'} 24 for key in environ.keys(): 25 if key[:5] == "HTTP_": 26 new_key = key[5:].title() 27 for k, v in replacements.items(): 28 new_key = new_key.replace(k, v) 29 environ[new_key] = environ[key] 30 31 req = wsgiRequest.WsgiRequest(environ, start_response) 32 req.set_option("SERVER", server) 33 req.set_option("RHNComponentType", component_type) 34 35 parseServ = get_handle(servertype, "HeaderParserHandler") 36 ret = parseServ(req) 37 38 if len(req.output) > 0 or ret != 0: 39 if not req.sent_header: 40 req.send_http_header(status=ret) 41 return req.output 42 43 appServ = get_handle(servertype, "Handler") 44 ret = appServ(req) 45 46 if not ret: 47 ret = None 48 49 if not req.sent_header: 50 req.send_http_header(status=ret) 51 52 # exporter doesn't have a logHandler 53 if servertype != 'spacewalk.satellite_exporter.satexport': 54 logServ = get_handle(servertype, "LogHandler") 55 logServ(req) 56 cleanServ = get_handle(servertype, "CleanupHandler") 57 cleanServ(req) 58 59 return req.output
60 61
62 -def get_handle(servertype, name):
63 handler_module = __import__(servertype, globals(), locals(), [servertype.split('.')[-1]]) 64 return getattr(handler_module, name)
65