~nicolas-dumoulin/+junk/djangopld

« back to all changes in this revision

Viewing changes to index.cgi

  • Committer: Nicolas Dumoulin
  • Date: 2011-02-23 11:44:53 UTC
  • Revision ID: nicolas@dumoulin63.net-20110223114453-1mef2j4e89h3i2ig
initial version

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/env python
 
2
# encoding: utf-8
 
3
"""
 
4
django.cgi
 
5
 
 
6
A simple cgi script which uses the django WSGI to serve requests.
 
7
 
 
8
Code copy/pasted from PEP-0333 and then tweaked to serve django.
 
9
http://www.python.org/dev/peps/pep-0333/#the-server-gateway-side
 
10
 
 
11
This script assumes django is on your sys.path, and that your site code is at
 
12
/home/mycode/mysite. Copy this script into your cgi-bin directory (or do
 
13
whatever you need to to make a cgi script executable on your system), and then
 
14
update the paths at the bottom of this file to suit your site.
 
15
 
 
16
This is probably the slowest way to serve django pages, as the python
 
17
interpreter, the django code-base and your site code has to be loaded every
 
18
time a request is served. FCGI and mod_python solve this problem, use them if
 
19
you can.
 
20
 
 
21
In order to speed things up it may be worth experimenting with running
 
22
uncompressed zips on the sys.path for django and the site code, as this can be
 
23
(theorectically) faster. See PEP-0273 (specifically Benchmarks).
 
24
http://www.python.org/dev/peps/pep-0273/
 
25
 
 
26
Make sure all python files are compiled in your code base. See
 
27
http://docs.python.org/lib/module-compileall.html
 
28
 
 
29
"""
 
30
 
 
31
import os, sys 
 
32
 
 
33
# insert a sys.path.append("whatever") in here if django is not
 
34
# on your sys.path.
 
35
sys.path.insert(0,"/homez.165/dumoulin/Django-1.2.3")
 
36
sys.path.append("/homez.165/dumoulin/osm/pld")
 
37
import django.core.handlers.wsgi
 
38
 
 
39
def run_with_cgi(application):
 
40
    
 
41
    environ                      = dict(os.environ.items())
 
42
    environ['wsgi.input']        = sys.stdin
 
43
    environ['wsgi.errors']       = sys.stderr
 
44
    environ['wsgi.version']      = (1,0)
 
45
    environ['wsgi.multithread']  = False
 
46
    environ['wsgi.multiprocess'] = True
 
47
    environ['wsgi.run_once']     = True
 
48
    
 
49
    if environ.get('HTTPS','off') in ('on','1'):
 
50
        environ['wsgi.url_scheme'] = 'https'
 
51
    else:
 
52
        environ['wsgi.url_scheme'] = 'http'
 
53
    
 
54
    headers_set  = []
 
55
    headers_sent = []
 
56
    
 
57
    def write(data):
 
58
        if not headers_set:
 
59
             raise AssertionError("write() before start_response()")
 
60
        
 
61
        elif not headers_sent:
 
62
             # Before the first output, send the stored headers
 
63
             status, response_headers = headers_sent[:] = headers_set
 
64
             sys.stdout.write('Status: %s\r\n' % status)
 
65
             for header in response_headers:
 
66
                 sys.stdout.write('%s: %s\r\n' % header)
 
67
             sys.stdout.write('\r\n')
 
68
        
 
69
        sys.stdout.write(data)
 
70
        sys.stdout.flush()
 
71
    
 
72
    def start_response(status,response_headers,exc_info=None):
 
73
        if exc_info:
 
74
            try:
 
75
                if headers_sent:
 
76
                    # Re-raise original exception if headers sent
 
77
                    raise exc_info[0], exc_info[1], exc_info[2]
 
78
            finally:
 
79
                exc_info = None     # avoid dangling circular ref
 
80
        elif headers_set:
 
81
            raise AssertionError("Headers already set!")
 
82
        
 
83
        headers_set[:] = [status,response_headers]
 
84
        return write
 
85
    
 
86
    result = application(environ, start_response)
 
87
    try:
 
88
        for data in result:
 
89
            if data:    # don't send headers until body appears
 
90
                write(data)
 
91
        if not headers_sent:
 
92
            write('')   # send headers now if body was empty
 
93
    finally:
 
94
        if hasattr(result,'close'):
 
95
            result.close()
 
96
 
 
97
os.environ['DJANGO_SETTINGS_MODULE'] = 'pld.settings'
 
98
 
 
99
try:
 
100
  f=open('/homez.165/dumoulin/osm/pld/log', 'w')
 
101
  f.write(str(sys.path)+"\n")
 
102
  f.write(str(django.VERSION))
 
103
  run_with_cgi(django.core.handlers.wsgi.WSGIHandler()) 
 
104
except Exception, inst:
 
105
  f=open('/homez.165/dumoulin/osm/pld/error', 'w')
 
106
  f.write(inst)
 
107
  print "Content-type: text/html\n\n"
 
108
  print inst
 
109
  #pass
 
110
  
 
 
b'\\ No newline at end of file'