def handler(req): options = req.get_options() if options.has_key('TracLocale'): locale.setlocale(locale.LC_ALL, options['TracLocale']) else: locale.setlocale(locale.LC_ALL, '') # Allow specifying the python eggs cache directory using SetEnv if req.subprocess_env.has_key('PYTHON_EGG_CACHE'): os.environ['PYTHON_EGG_CACHE'] = req.subprocess_env['PYTHON_EGG_CACHE'] mpr = ModPythonRequest(req, options) project_opts = dict_translate(options, ('TracEnv', 'TRAC_ENV'), ('TracEnvParentDir', 'TRAC_ENV_PARENT_DIR'), ('TracEnvIndexTemplate', 'TRAC_ENV_INDEX_TEMPLATE'), ('TracTemplateVars', 'TRAC_TEMPLATE_VARS')) env = get_environment(mpr, project_opts) if not env: send_project_index(mpr, project_opts) return apache.OK req.content_type = 'text/html' try: dispatch_request(mpr.path_info, mpr, env) except Exception, e: send_pretty_error(e, env, mpr)
def run(): try: # Make FreeBSD use blocking I/O like other platforms import fcntl for stream in [sys.stdin, sys.stdout]: fd = stream.fileno() flags = fcntl.fcntl(fd, fcntl.F_GETFL) fcntl.fcntl(fd, fcntl.F_SETFL, flags & ~os.O_NONBLOCK) except ImportError: pass try: # Use binary I/O on Windows import msvcrt msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY) msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) except ImportError: pass locale.setlocale(locale.LC_ALL, '') req = CGIRequest() env = get_environment(req, os.environ, threaded=False) if not env: send_project_index(req, os.environ) return try: dispatch_request(req.path_info, req, env) except Exception, e: send_pretty_error(e, env, req)
def _handler(_req): req = CGIRequest(_req.params, _req.stdin, _req.stdout) env = get_environment(req, os.environ) if not env: send_project_index(req, os.environ) return try: dispatch_request(req.path_info, req, env) except Exception, e: send_pretty_error(e, env, req)
def run(): locale.setlocale(locale.LC_ALL, '') req = CGIRequest() env = get_environment(req, os.environ, threaded=False) if not env: send_project_index(req, os.environ) return try: dispatch_request(req.path_info, req, env) except Exception, e: send_pretty_error(e, env, req)
class TracHTTPRequestHandler(BaseHTTPRequestHandler): server_version = 'tracd/' + __version__ url_re = re.compile('/(?P<project>[^/\?]+)' '(?P<path_info>/?[^\?]*)?' '(?:\?(?P<query_string>.*))?') env = None log = None project_name = None def finish(self): """We need to help the garbage collector a little.""" BaseHTTPRequestHandler.finish(self) self.wfile = None self.rfile = None def do_POST(self): self._do_trac_req() def do_HEAD(self): self.do_GET() def do_GET(self): self._do_trac_req() def _do_trac_req(self): if self.path == '/': path_info = '/' req = TracHTTPRequest(self, '', '') self.server.send_project_index(req) return m = self.url_re.findall(self.path) if not m: self.send_error(400, 'Bad Request') return project_name, path_info, query_string = m[0] project_name = urllib.unquote(project_name) path_info = urllib.unquote(path_info) req = TracHTTPRequest(self, project_name, query_string) try: opts = self.server.get_env_opts(project_name) except KeyError: # unrecognized project self.server.send_project_index(req) return env = get_environment(req, opts) if not env: self.server.send_project_index(req) return req.remote_user = None if path_info == '/login': auth = self.server.auths.get(project_name) if not auth: raise util.TracError('Authentication not enabled. ' 'Please use the tracd --auth option.\n') req.remote_user = auth.do_auth(self) if not req.remote_user: return try: start = time.time() dispatch_request(path_info, req, env) env.log.debug('Total request time: %f s', time.time() - start) except socket.error, (code, msg): if code == errno.EPIPE or code == 10053: # Windows env.log.info('Lost connection to client: %s' % self.address_string()) else: raise except Exception, e: try: send_pretty_error(e, env, req) except socket.error, (code, msg): if code == errno.EPIPE or code == 10053: # Windows env.log.info('Lost connection to client: %s' % self.address_string()) else: raise