annotate examples/trac/trac/web/cgi_frontend.py @ 39:93b4dcbafd7b trunk

Copy Trac to main branch.
author cmlenz
date Mon, 03 Jul 2006 18:53:27 +0000
parents
children
rev   line source
39
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
1 # -*- coding: utf-8 -*-
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
2 #
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
3 # Copyright (C) 2005 Edgewall Software
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
4 # Copyright (C) 2005 Christopher Lenz <cmlenz@gmx.de>
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
5 # Copyright (C) 2005 Matthew Good <trac@matt-good.net>
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
6 # All rights reserved.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
7 #
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
8 # This software is licensed as described in the file COPYING, which
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
9 # you should have received as part of this distribution. The terms
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
10 # are also available at http://trac.edgewall.com/license.html.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
11 #
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
12 # This software consists of voluntary contributions made by many
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
13 # individuals. For the exact contribution history, see the revision
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
14 # history and logs, available at http://projects.edgewall.com/trac/.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
15 #
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
16 # Author: Christopher Lenz <cmlenz@gmx.de>
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
17 # Matthew Good <trac@matt-good.net>
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
18
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
19 import os
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
20 import sys
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
21
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
22 from trac.web.main import dispatch_request
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
23 from trac.web.wsgi import WSGIGateway
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
24
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
25
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
26 class CGIGateway(WSGIGateway):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
27
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
28 wsgi_multithread = False
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
29 wsgi_multiprocess = False
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
30 wsgi_run_once = True
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
31
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
32 def __init__(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
33 WSGIGateway.__init__(self, dict(os.environ))
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
34
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
35 def _write(self, data):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
36 assert self.headers_set, 'Response not started'
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
37
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
38 if not self.headers_sent:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
39 status, headers = self.headers_sent = self.headers_set
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
40 sys.stdout.write('Status: %s\r\n' % status)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
41 for header in headers:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
42 sys.stdout.write('%s: %s\r\n' % header)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
43 sys.stdout.write('\r\n')
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
44 sys.stdout.flush()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
45
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
46 sys.stdout.write(data)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
47 sys.stdout.flush()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
48
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
49
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
50 def run():
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
51 try: # Make FreeBSD use blocking I/O like other platforms
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
52 import fcntl
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
53 for stream in [sys.stdin, sys.stdout]:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
54 fd = stream.fileno()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
55 flags = fcntl.fcntl(fd, fcntl.F_GETFL)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
56 fcntl.fcntl(fd, fcntl.F_SETFL, flags & ~os.O_NONBLOCK)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
57 except ImportError:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
58 pass
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
59
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
60 try: # Use binary I/O on Windows
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
61 import msvcrt
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
62 msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
63 msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
64 except ImportError:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
65 pass
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
66
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
67 gateway = CGIGateway()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
68 gateway.run(dispatch_request)
Copyright (C) 2012-2017 Edgewall Software