summaryrefslogtreecommitdiff
path: root/paste/echo.py
blob: 1a1c91f428803ba88badc29c07525a546514750f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
r"""\
WSGI application

Does things as requested.  Takes variables:

header.header-name=value, like
  header.location=http://yahoo.com

error=code, like
  error=301 (temporary redirect)
  error=assert (assertion error)

environ=true,
  display all the environmental variables, like
  key=str(value)\n

message=string
  display string
"""

import cgi
import httpexceptions

def application(environ, start_response):
    form = cgi.FieldStorage(fp=environ['wsgi.input'],
                            environ=environ,
                            keep_blank_values=True)
    headers = {}
    for key in form.keys():
        if key.startswith('header.'):
            headers[key[len('header.'):]] = form[key].value
            
    if form.getvalue('error') and form['error'].value != 'iter':
        if form['error'].value == 'assert':
            assert 0, "I am asserting zero!"
        raise httpexceptions.get_exception(int(form['error'].value))(
            headers=headers)

    if form.getvalue('environ'):
        write = start_response('200 OK', [('Content-type', 'text/plain')])
        items = environ.items()
        items.sort()
        return ['%s=%s\n' % (name, value)
                for name, value in items]

    if form.has_key('message'):
        write = start_response('200 OK', [('Content-type', 'text/plain')])
        write(form['message'].value)
        return []

    if form.getvalue('error') == 'iter':
        return BadIter()
        
    write = start_response('200 OK', [('Content-type', 'text/html')])
    return ['hello world!']

class BadIter(object):
    def __iter__(self):
        assert 0, "I am assert zero in the iterator!"