4 <h1><a name=
"app_engine" id=
"app_engine">App Engine
</a></h1>
9 <a href=
"http://code.google.com/appengine/" class=
"urlextern" title=
"http://code.google.com/appengine/" rel=
"nofollow">Google App Engine
</a>:
<a href=
"http://en.wikipedia.org/wiki/Google_App_Engine" class=
"interwiki iw_wp" title=
"http://en.wikipedia.org/wiki/Google_App_Engine">Google App Engine
</a> <br/>
12 <div class=
"plugin_uparrow">
13 <a href=
"#" title=
"Back to top">
14 <img src=
"lib/plugins/uparrow/images/tango-small.png" alt=
"Back to top"/>
19 <!-- SECTION "App Engine" [1-130] -->
20 <h2><a name=
"example" id=
"example">Example
</a></h2>
22 <pre class=
"code python"><span class=
"kw1">from
</span> google.
<span class=
"me1">appengine
</span>.
<span class=
"me1">ext
</span> <span class=
"kw1">import
</span> webapp
23 <span class=
"kw1">from
</span> google.
<span class=
"me1">appengine
</span>.
<span class=
"me1">ext
</span>.
<span class=
"me1">webapp
</span>.
<span class=
"me1">util
</span> <span class=
"kw1">import
</span> run_wsgi_app
24 <span class=
"kw1">from
</span> google.
<span class=
"me1">appengine
</span>.
<span class=
"me1">ext
</span> <span class=
"kw1">import
</span> db
25 <span class=
"kw1">import
</span> <span class=
"kw3">urllib
</span>
26 <span class=
"kw1">from
</span> <span class=
"kw3">HTMLParser
</span> <span class=
"kw1">import
</span> <span class=
"kw3">HTMLParser
</span>
27 <span class=
"kw1">import
</span> <span class=
"kw3">re
</span>
29 <span class=
"kw1">class
</span> MyHTMLParser
<span class=
"br0">(</span><span class=
"kw3">HTMLParser
</span><span class=
"br0">)</span>:
30 <span class=
"kw1">def
</span> <span class=
"kw4">__init__
</span><span class=
"br0">(</span><span class=
"kw2">self
</span><span class=
"br0">)</span>:
31 <span class=
"kw3">HTMLParser
</span>.
<span class=
"kw4">__init__
</span><span class=
"br0">(</span><span class=
"kw2">self
</span><span class=
"br0">)</span>
32 <span class=
"kw2">self
</span>.
<span class=
"me1">s
</span> =
<span class=
"st0">''
</span>
34 <span class=
"kw1">def
</span> handle_starttag
<span class=
"br0">(</span><span class=
"kw2">self
</span>, tag, attrs
<span class=
"br0">)</span>:
35 <span class=
"kw1">if
</span> tag ==
<span class=
"st0">'embed'
</span>:
36 <span class=
"kw1">for
</span> attr
<span class=
"kw1">in
</span> attrs:
37 <span class=
"kw1">if
</span> attr
<span class=
"br0">[</span><span class=
"nu0">0</span><span class=
"br0">]</span> ==
<span class=
"st0">'flashvars'
</span>:
38 <span class=
"kw2">self
</span>.
<span class=
"me1">s
</span> = attr
<span class=
"br0">[</span>1<span class=
"br0">]</span>
40 <span class=
"kw1">def
</span> feed
<span class=
"br0">(</span><span class=
"kw2">self
</span>, data
<span class=
"br0">)</span>:
41 <span class=
"kw3">HTMLParser
</span>.
<span class=
"me1">feed
</span><span class=
"br0">(</span><span class=
"kw2">self
</span>, data
<span class=
"br0">)</span>
42 <span class=
"kw1">return
</span> <span class=
"kw2">self
</span>
44 <span class=
"kw1">def
</span> get_s
<span class=
"br0">(</span><span class=
"kw2">self
</span><span class=
"br0">)</span>:
45 <span class=
"kw1">return
</span> <span class=
"kw2">self
</span>.
<span class=
"me1">s
</span>
47 <span class=
"kw1">class
</span> Level
<span class=
"br0">(</span>db.
<span class=
"me1">Model
</span><span class=
"br0">)</span>:
48 content = db.
<span class=
"me1">TextProperty
</span><span class=
"br0">(</span><span class=
"br0">)</span>
50 <span class=
"kw1">class
</span> Current
<span class=
"br0">(</span>db.
<span class=
"me1">Model
</span><span class=
"br0">)</span>:
51 x = db.
<span class=
"me1">IntegerProperty
</span><span class=
"br0">(</span><span class=
"br0">)</span>
52 y = db.
<span class=
"me1">IntegerProperty
</span><span class=
"br0">(</span><span class=
"br0">)</span>
53 d = db.
<span class=
"me1">IntegerProperty
</span><span class=
"br0">(</span><span class=
"br0">)</span>
54 n = db.
<span class=
"me1">IntegerProperty
</span><span class=
"br0">(</span><span class=
"br0">)</span>
55 m = db.
<span class=
"me1">IntegerProperty
</span><span class=
"br0">(</span><span class=
"br0">)</span>
56 l = db.
<span class=
"me1">IntegerProperty
</span><span class=
"br0">(</span><span class=
"br0">)</span>
58 <span class=
"kw1">class
</span> Wrong
<span class=
"br0">(</span>db.
<span class=
"me1">Model
</span><span class=
"br0">)</span>:
59 x = db.
<span class=
"me1">IntegerProperty
</span><span class=
"br0">(</span><span class=
"br0">)</span>
60 y = db.
<span class=
"me1">IntegerProperty
</span><span class=
"br0">(</span><span class=
"br0">)</span>
61 d = db.
<span class=
"me1">IntegerProperty
</span><span class=
"br0">(</span><span class=
"br0">)</span>
62 l = db.
<span class=
"me1">IntegerProperty
</span><span class=
"br0">(</span><span class=
"br0">)</span>
64 <span class=
"kw1">class
</span> CrossPage
<span class=
"br0">(</span>webapp.
<span class=
"me1">RequestHandler
</span><span class=
"br0">)</span>:
65 <span class=
"kw1">def
</span> get
<span class=
"br0">(</span><span class=
"kw2">self
</span><span class=
"br0">)</span>:
66 url =
<span class=
"st0">'http://www.hacker.org/cross/index.php?name=kauesilv
&password=a1b2c3d4'
</span>
67 regex = r
<span class=
"st0">'boardinit =
"([^
"]*)
"'
</span>
68 debug =
<span class=
"kw2">self
</span>.
<span class=
"me1">request
</span>.
<span class=
"me1">get
</span><span class=
"br0">(</span><span class=
"st0">'debug'
</span><span class=
"br0">)</span>
69 s =
<span class=
"kw2">self
</span>.
<span class=
"me1">request
</span>.
<span class=
"me1">get
</span><span class=
"br0">(</span><span class=
"st0">'s'
</span><span class=
"br0">)</span>
70 path =
<span class=
"kw2">self
</span>.
<span class=
"me1">request
</span>.
<span class=
"me1">get
</span><span class=
"br0">(</span><span class=
"st0">'path'
</span><span class=
"br0">)</span>
71 <span class=
"kw2">self
</span>.
<span class=
"me1">response
</span>.
<span class=
"me1">headers
</span><span class=
"br0">[</span><span class=
"st0">'Content-Type'
</span><span class=
"br0">]</span> =
<span class=
"st0">'text/plain'
</span>
72 <span class=
"kw1">if
</span> s ==
<span class=
"st0">'
1'
</span>:
73 <span class=
"kw3">urllib
</span>.
<span class=
"me1">urlopen
</span><span class=
"br0">(</span>url +
<span class=
"st0">'
&sol='
</span> + path
<span class=
"br0">)</span>.
<span class=
"me1">read
</span><span class=
"br0">(</span><span class=
"br0">)</span>
74 s =
<span class=
"kw3">urllib
</span>.
<span class=
"me1">urlopen
</span><span class=
"br0">(</span>url
<span class=
"br0">)</span>.
<span class=
"me1">read
</span><span class=
"br0">(</span><span class=
"br0">)</span>
75 <span class=
"co1">#self.response.out.write(s + '\n')
</span>
76 board =
<span class=
"kw3">re
</span>.
<span class=
"kw2">compile
</span><span class=
"br0">(</span>regex
<span class=
"br0">)</span>.
<span class=
"me1">search
</span><span class=
"br0">(</span>s
<span class=
"br0">)</span>.
<span class=
"me1">groups
</span><span class=
"br0">(</span><span class=
"br0">)</span><span class=
"br0">[</span><span class=
"nu0">0</span><span class=
"br0">]</span>.
<span class=
"me1">split
</span><span class=
"br0">(</span><span class=
"st0">','
</span><span class=
"br0">)</span>
77 <span class=
"kw2">self
</span>.
<span class=
"me1">response
</span>.
<span class=
"me1">out
</span>.
<span class=
"me1">write
</span><span class=
"br0">(</span><span class=
"kw2">str
</span><span class=
"br0">(</span><span class=
"kw2">len
</span><span class=
"br0">(</span>board
<span class=
"br0">)</span><span class=
"br0">)</span> +
<span class=
"st0">'
<span class=
"es0">\n
</span>'
</span> +
<span class=
"kw2">str
</span><span class=
"br0">(</span><span class=
"kw2">len
</span><span class=
"br0">(</span>board
<span class=
"br0">[</span><span class=
"nu0">0</span><span class=
"br0">]</span><span class=
"br0">)</span><span class=
"br0">)</span> +
<span class=
"st0">'
<span class=
"es0">\n
</span>'
</span><span class=
"br0">)</span>
78 <span class=
"kw1">for
</span> line
<span class=
"kw1">in
</span> board:
79 <span class=
"kw2">self
</span>.
<span class=
"me1">response
</span>.
<span class=
"me1">out
</span>.
<span class=
"me1">write
</span><span class=
"br0">(</span><span class=
"kw2">str
</span><span class=
"br0">(</span>line
<span class=
"br0">)</span> +
<span class=
"st0">'
<span class=
"es0">\n
</span>'
</span><span class=
"br0">)</span>
81 <span class=
"kw1">class
</span> MainPage
<span class=
"br0">(</span>webapp.
<span class=
"me1">RequestHandler
</span><span class=
"br0">)</span>:
82 <span class=
"kw1">def
</span> get
<span class=
"br0">(</span><span class=
"kw2">self
</span><span class=
"br0">)</span>:
83 delete =
<span class=
"kw2">self
</span>.
<span class=
"me1">request
</span>.
<span class=
"me1">get
</span><span class=
"br0">(</span><span class=
"st0">'delete'
</span><span class=
"br0">)</span>
84 <span class=
"kw1">if
</span> delete ==
<span class=
"st0">'
1'
</span>:
85 db.
<span class=
"me1">delete
</span><span class=
"br0">(</span>Wrong.
<span class=
"kw2">all
</span><span class=
"br0">(</span><span class=
"br0">)</span>.
<span class=
"me1">fetch
</span><span class=
"br0">(</span>100<span class=
"br0">)</span><span class=
"br0">)</span>
86 <span class=
"kw1">if
</span> Wrong.
<span class=
"kw2">all
</span><span class=
"br0">(</span><span class=
"br0">)</span>.
<span class=
"me1">count
</span><span class=
"br0">(</span>1<span class=
"br0">)</span> ==
1:
87 <span class=
"kw1">return
</span>
89 url =
<span class=
"st0">'http://www.hacker.org/coil/index.php?name=kauesilv
&password=a1b2c3d4'
</span>
90 regex = r
<span class=
"st0">'x=(
<span class=
"es0">\d
</span>*)
&y=(
<span class=
"es0">\d
</span>*)
&board=(.*)'
</span>
91 regexLevel = r
<span class=
"st0">'Level: (
<span class=
"es0">\d
</span>*)'
</span>
92 <span class=
"kw2">self
</span>.
<span class=
"me1">response
</span>.
<span class=
"me1">headers
</span><span class=
"br0">[</span><span class=
"st0">'Content-Type'
</span><span class=
"br0">]</span> =
<span class=
"st0">'text/plain'
</span>
93 debug =
<span class=
"kw2">self
</span>.
<span class=
"me1">request
</span>.
<span class=
"me1">get
</span><span class=
"br0">(</span><span class=
"st0">'debug'
</span><span class=
"br0">)</span>
94 s =
<span class=
"kw2">self
</span>.
<span class=
"me1">request
</span>.
<span class=
"me1">get
</span><span class=
"br0">(</span><span class=
"st0">'s'
</span><span class=
"br0">)</span>
95 r =
<span class=
"kw2">self
</span>.
<span class=
"me1">request
</span>.
<span class=
"me1">get
</span><span class=
"br0">(</span><span class=
"st0">'r'
</span><span class=
"br0">)</span>
96 x =
<span class=
"kw2">self
</span>.
<span class=
"me1">request
</span>.
<span class=
"me1">get
</span><span class=
"br0">(</span><span class=
"st0">'x'
</span><span class=
"br0">)</span>
97 y =
<span class=
"kw2">self
</span>.
<span class=
"me1">request
</span>.
<span class=
"me1">get
</span><span class=
"br0">(</span><span class=
"st0">'y'
</span><span class=
"br0">)</span>
98 d =
<span class=
"kw2">self
</span>.
<span class=
"me1">request
</span>.
<span class=
"me1">get
</span><span class=
"br0">(</span><span class=
"st0">'d'
</span><span class=
"br0">)</span>
99 w =
<span class=
"kw2">self
</span>.
<span class=
"me1">request
</span>.
<span class=
"me1">get
</span><span class=
"br0">(</span><span class=
"st0">'w'
</span><span class=
"br0">)</span>
100 path =
<span class=
"kw2">self
</span>.
<span class=
"me1">request
</span>.
<span class=
"me1">get
</span><span class=
"br0">(</span><span class=
"st0">'path'
</span><span class=
"br0">)</span>
102 levels = Level.
<span class=
"kw2">all
</span><span class=
"br0">(</span><span class=
"br0">)</span>
103 currents = Current.
<span class=
"kw2">all
</span><span class=
"br0">(</span><span class=
"br0">)</span>
105 <span class=
"kw1">if
</span> s ==
<span class=
"st0">'
1'
</span>:
106 <span class=
"kw3">urllib
</span>.
<span class=
"me1">urlopen
</span><span class=
"br0">(</span>url +
<span class=
"st0">'
&x='
</span> + x +
<span class=
"st0">'
&y='
</span> + y +
<span class=
"st0">'
&path='
</span> + path
<span class=
"br0">)</span>.
<span class=
"me1">read
</span><span class=
"br0">(</span><span class=
"br0">)</span>
108 <span class=
"kw1">if
</span> w ==
<span class=
"st0">'
1'
</span>:
109 wrong = Wrong
<span class=
"br0">(</span><span class=
"br0">)</span>
110 wrong.
<span class=
"me1">x
</span> =
<span class=
"kw2">int
</span><span class=
"br0">(</span>x
<span class=
"br0">)</span>
111 wrong.
<span class=
"me1">y
</span> =
<span class=
"kw2">int
</span><span class=
"br0">(</span>y
<span class=
"br0">)</span>
112 wrong.
<span class=
"me1">d
</span> =
<span class=
"kw2">int
</span><span class=
"br0">(</span>d
<span class=
"br0">)</span>
113 wrong.
<span class=
"me1">l
</span> = currents.
<span class=
"me1">fetch
</span><span class=
"br0">(</span>1<span class=
"br0">)</span><span class=
"br0">[</span>0<span class=
"br0">]</span>.
<span class=
"me1">l
</span>
114 wrong.
<span class=
"me1">put
</span><span class=
"br0">(</span><span class=
"br0">)</span>
116 <span class=
"kw1">if
</span> s ==
<span class=
"st0">'
1'
</span> <span class=
"kw1">or
</span> r ==
<span class=
"st0">'
1'
</span>:
117 s =
<span class=
"kw3">urllib
</span>.
<span class=
"me1">urlopen
</span><span class=
"br0">(</span>url
<span class=
"br0">)</span>.
<span class=
"me1">read
</span><span class=
"br0">(</span><span class=
"br0">)</span>
118 x, y, board =
<span class=
"kw3">re
</span>.
<span class=
"kw2">compile
</span><span class=
"br0">(</span>regex
<span class=
"br0">)</span>.
<span class=
"me1">search
</span><span class=
"br0">(</span>MyHTMLParser
<span class=
"br0">(</span><span class=
"br0">)</span>.
<span class=
"me1">feed
</span><span class=
"br0">(</span>s
<span class=
"br0">)</span>.
<span class=
"me1">get_s
</span><span class=
"br0">(</span><span class=
"br0">)</span><span class=
"br0">)</span>.
<span class=
"me1">groups
</span><span class=
"br0">(</span><span class=
"br0">)</span>
119 lvl, =
<span class=
"kw3">re
</span>.
<span class=
"kw2">compile
</span><span class=
"br0">(</span>regexLevel
<span class=
"br0">)</span>.
<span class=
"me1">search
</span><span class=
"br0">(</span>s
<span class=
"br0">)</span>.
<span class=
"me1">groups
</span><span class=
"br0">(</span><span class=
"br0">)</span>
120 db.
<span class=
"me1">delete
</span><span class=
"br0">(</span>Level.
<span class=
"kw2">all
</span><span class=
"br0">(</span><span class=
"br0">)</span>.
<span class=
"me1">fetch
</span><span class=
"br0">(</span>1000000<span class=
"br0">)</span><span class=
"br0">)</span>
121 db.
<span class=
"me1">delete
</span><span class=
"br0">(</span>Current.
<span class=
"kw2">all
</span><span class=
"br0">(</span><span class=
"br0">)</span>.
<span class=
"me1">fetch
</span><span class=
"br0">(</span><span class=
"nu0">1000000</span><span class=
"br0">)</span><span class=
"br0">)</span>
123 level = Level
<span class=
"br0">(</span><span class=
"br0">)</span>
124 level.
<span class=
"me1">content
</span> = x +
<span class=
"st0">'
<span class=
"es0">\n
</span>'
</span> + y +
<span class=
"st0">'
<span class=
"es0">\n
</span>'
</span> + board +
<span class=
"st0">'
<span class=
"es0">\n
</span>'
</span>
125 level.
<span class=
"me1">put
</span><span class=
"br0">(</span><span class=
"br0">)</span>
127 current = Current
<span class=
"br0">(</span><span class=
"br0">)</span>
128 current.
<span class=
"me1">x
</span> = current.
<span class=
"me1">y
</span> = current.
<span class=
"me1">d
</span> =
0
129 current.
<span class=
"me1">n
</span> =
<span class=
"kw2">int
</span><span class=
"br0">(</span>x
<span class=
"br0">)</span>
130 current.
<span class=
"me1">m
</span> =
<span class=
"kw2">int
</span><span class=
"br0">(</span>y
<span class=
"br0">)</span>
131 current.
<span class=
"me1">l
</span> =
<span class=
"kw2">int
</span><span class=
"br0">(</span>lvl
<span class=
"br0">)</span>
132 current.
<span class=
"me1">put
</span><span class=
"br0">(</span><span class=
"br0">)</span>
134 cur = currents.
<span class=
"me1">fetch
</span><span class=
"br0">(</span>1<span class=
"br0">)</span><span class=
"br0">[</span>0<span class=
"br0">]</span>
135 <span class=
"kw1">while
</span><span class=
"br0">(</span><span class=
"kw2">True
</span><span class=
"br0">)</span>:
136 cur.
<span class=
"me1">d
</span> = cur.
<span class=
"me1">d
</span> +
1
137 <span class=
"kw1">if
</span><span class=
"br0">(</span>cur.
<span class=
"me1">d
</span> ==
4<span class=
"br0">)</span>:
138 cur.
<span class=
"me1">d
</span> =
0
139 cur.
<span class=
"me1">y
</span> = cur.
<span class=
"me1">y
</span> +
1
140 <span class=
"kw1">if
</span><span class=
"br0">(</span>cur.
<span class=
"me1">y
</span> == cur.
<span class=
"me1">m
</span><span class=
"br0">)</span>:
141 cur.
<span class=
"me1">y
</span> =
0
142 cur.
<span class=
"me1">x
</span> = cur.
<span class=
"me1">x
</span> +
1
143 <span class=
"kw1">if
</span><span class=
"br0">(</span>cur.
<span class=
"me1">x
</span> == cur.
<span class=
"me1">n
</span><span class=
"br0">)</span>:
144 cur.
<span class=
"me1">x
</span> =
<span class=
"nu0">0</span>
145 cur.
<span class=
"me1">put
</span><span class=
"br0">(</span><span class=
"br0">)</span>
146 wrong = Wrong
<span class=
"br0">(</span><span class=
"br0">)</span>.
<span class=
"me1">gql
</span><span class=
"br0">(</span><span class=
"st0">"WHERE x = :
1 AND y = :
2 AND d = :
3 AND l = :
4"</span>, cur.
<span class=
"me1">x
</span>, cur.
<span class=
"me1">y
</span>, cur.
<span class=
"me1">d
</span>, cur.
<span class=
"me1">l
</span><span class=
"br0">)</span>
147 <span class=
"kw1">if
</span><span class=
"br0">(</span>wrong.
<span class=
"me1">count
</span><span class=
"br0">(</span>1<span class=
"br0">)</span> ==
0<span class=
"br0">)</span>:
148 <span class=
"kw1">break
</span>
150 <span class=
"kw2">self
</span>.
<span class=
"me1">response
</span>.
<span class=
"me1">out
</span>.
<span class=
"me1">write
</span><span class=
"br0">(</span><span class=
"kw2">str
</span><span class=
"br0">(</span>cur.
<span class=
"me1">x
</span><span class=
"br0">)</span> +
<span class=
"st0">'
<span class=
"es0">\n
</span>'
</span> +
<span class=
"kw2">str
</span><span class=
"br0">(</span>cur.
<span class=
"me1">y
</span><span class=
"br0">)</span> +
<span class=
"st0">'
<span class=
"es0">\n
</span>'
</span> +
<span class=
"kw2">str
</span><span class=
"br0">(</span>cur.
<span class=
"me1">d
</span><span class=
"br0">)</span> +
<span class=
"st0">'
<span class=
"es0">\n
</span>'
</span> +
<span class=
"kw2">str
</span><span class=
"br0">(</span>cur.
<span class=
"me1">l
</span><span class=
"br0">)</span> +
<span class=
"st0">'
<span class=
"es0">\n
</span>'
</span><span class=
"br0">)</span>
151 <span class=
"kw2">self
</span>.
<span class=
"me1">response
</span>.
<span class=
"me1">out
</span>.
<span class=
"me1">write
</span><span class=
"br0">(</span>levels.
<span class=
"me1">fetch
</span><span class=
"br0">(</span>1<span class=
"br0">)</span><span class=
"br0">[</span>0<span class=
"br0">]</span>.
<span class=
"me1">content
</span><span class=
"br0">)</span>
153 <span class=
"kw1">if
</span> debug ==
<span class=
"st0">'
1'
</span>:
154 <span class=
"kw2">self
</span>.
<span class=
"me1">response
</span>.
<span class=
"me1">out
</span>.
<span class=
"me1">write
</span><span class=
"br0">(</span><span class=
"st0">'
<span class=
"es0">\n
</span><span class=
"es0">\n
</span>----DEBUG----
<span class=
"es0">\n
</span><span class=
"es0">\n
</span>wrongs
<span class=
"es0">\n
</span>'
</span><span class=
"br0">)</span>
155 wrongs = Wrong.
<span class=
"me1">gql
</span><span class=
"br0">(</span><span class=
"st0">"WHERE l = :
1"</span>, cur.
<span class=
"me1">l
</span><span class=
"br0">)</span>
156 <span class=
"kw1">for
</span> wrong
<span class=
"kw1">in
</span> wrongs:
157 <span class=
"kw2">self
</span>.
<span class=
"me1">response
</span>.
<span class=
"me1">out
</span>.
<span class=
"me1">write
</span><span class=
"br0">(</span><span class=
"kw2">str
</span><span class=
"br0">(</span>wrong.
<span class=
"me1">x
</span><span class=
"br0">)</span> +
<span class=
"st0">' '
</span> +
<span class=
"kw2">str
</span><span class=
"br0">(</span>wrong.
<span class=
"me1">y
</span><span class=
"br0">)</span> +
<span class=
"st0">' '
</span> +
<span class=
"kw2">str
</span><span class=
"br0">(</span>wrong.
<span class=
"me1">d
</span><span class=
"br0">)</span> +
<span class=
"st0">' '
</span> +
<span class=
"kw2">str
</span><span class=
"br0">(</span>wrong.
<span class=
"me1">l
</span><span class=
"br0">)</span> +
<span class=
"st0">'
<span class=
"es0">\n
</span>'
</span><span class=
"br0">)</span>
159 <span class=
"kw2">self
</span>.
<span class=
"me1">response
</span>.
<span class=
"me1">out
</span>.
<span class=
"me1">write
</span><span class=
"br0">(</span><span class=
"st0">'
<span class=
"es0">\n
</span>currents
<span class=
"es0">\n
</span>'
</span><span class=
"br0">)</span>
160 <span class=
"kw1">for
</span> current
<span class=
"kw1">in
</span> currents:
161 <span class=
"kw2">self
</span>.
<span class=
"me1">response
</span>.
<span class=
"me1">out
</span>.
<span class=
"me1">write
</span><span class=
"br0">(</span><span class=
"kw2">str
</span><span class=
"br0">(</span>current.
<span class=
"me1">x
</span><span class=
"br0">)</span> +
<span class=
"st0">' '
</span> +
<span class=
"kw2">str
</span><span class=
"br0">(</span>current.
<span class=
"me1">y
</span><span class=
"br0">)</span> +
<span class=
"st0">' '
</span> +
<span class=
"kw2">str
</span><span class=
"br0">(</span>current.
<span class=
"me1">d
</span><span class=
"br0">)</span> +
<span class=
"st0">' '
</span> +
<span class=
"kw2">str
</span><span class=
"br0">(</span>current.
<span class=
"me1">l
</span><span class=
"br0">)</span> +
<span class=
"st0">'
<span class=
"es0">\n
</span>'
</span><span class=
"br0">)</span>
163 application = webapp.
<span class=
"me1">WSGIApplication
</span><span class=
"br0">(</span><span class=
"br0">[</span><span class=
"br0">(</span><span class=
"st0">'/'
</span>, MainPage
<span class=
"br0">)</span>,
<span class=
"br0">(</span><span class=
"st0">'/cross'
</span>, CrossPage
<span class=
"br0">)</span><span class=
"br0">]</span>, debug=
<span class=
"kw2">True
</span><span class=
"br0">)</span>
165 <span class=
"kw1">def
</span> main
<span class=
"br0">(</span><span class=
"br0">)</span>:
166 run_wsgi_app
<span class=
"br0">(</span>application
<span class=
"br0">)</span>
168 <span class=
"kw1">if
</span> __name__ ==
<span class=
"st0">"__main__
"</span>:
169 main
<span class=
"br0">(</span><span class=
"br0">)</span></pre>
170 <div class=
"plugin_uparrow">
171 <a href=
"#" title=
"Back to top">
172 <img src=
"lib/plugins/uparrow/images/tango-small.png" alt=
"Back to top"/>
177 <!-- SECTION "Example" [131-] -->