Mercurial > caja-test
annotate pavement.py @ 2:6737bc744b46
Added a TODO.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Sun, 07 Jun 2009 20:21:24 -0700 |
parents | 00d50391d378 |
children | cf673c093b61 |
rev | line source |
---|---|
1
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
1 import md5 |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
2 import os |
0 | 3 import subprocess |
1
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
4 import wsgiref |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
5 import wsgiref.simple_server |
0 | 6 from paver.easy import * |
7 | |
1
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
8 DEFAULT_PORT = 8080 |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
9 DEFAULT_HOST = '127.0.0.1' |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
10 |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
11 class CajolerWebApp(object): |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
12 def __init__(self, cajoler_path): |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
13 self.cajoler_path = cajoler_path |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
14 self.cache = {} |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
15 |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
16 def cajole(self, filename): |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
17 contents = open(filename).read() |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
18 hash = md5.md5(contents).hexdigest() |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
19 if hash not in self.cache: |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
20 # TODO: This isn't threadsafe. |
2 | 21 # TODO: There's no way to evict entries from the cache. |
1
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
22 output_filename = "output.co.js" |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
23 retval = subprocess.call([self.cajoler_path, |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
24 "-i", filename, |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
25 "-o", output_filename]) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
26 if retval == 0: |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
27 self.cache[hash] = open(output_filename).read() |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
28 os.remove(output_filename) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
29 else: |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
30 self.cache[hash] = None |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
31 return self.cache[hash] |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
32 |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
33 def app(self, env, start_response): |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
34 path = env['PATH_INFO'] |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
35 parts = path.split('/')[1:] |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
36 if len(parts) == 1: |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
37 filename = os.path.join('caja-js', parts[0]) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
38 if os.path.exists(filename) and not os.path.isdir(filename): |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
39 cajoled = self.cajole(filename) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
40 if cajoled is None: |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
41 start_response('500 Internal Server Error', |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
42 [('Content-type', 'text/plain')]) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
43 return ["Cajoling failed."] |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
44 start_response('200 OK', |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
45 [('Content-type', 'text/javascript')]) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
46 return [cajoled] |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
47 start_response('404 Not Found', |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
48 [('Content-type', 'text/plain')]) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
49 return ['Not found: %s' % path] |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
50 |
0 | 51 @task |
1
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
52 @cmdopts((['port=', 'p', 'port to bind to'], |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
53 ['host=', 'o', 'host to bind to'], |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
54 ['cajoler-path=', 'c', 'path to cajole_html'])) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
55 def runserver(options): |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
56 port = int(options.get('port', DEFAULT_PORT)) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
57 host = options.get('host', DEFAULT_HOST) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
58 if not options.get('cajoler_path'): |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
59 raise Exception('Required option: --cajoler-path.') |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
60 print "Running server at %s port %d, press Ctrl-C to stop." % (host, |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
61 port) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
62 app = CajolerWebApp(options.cajoler_path) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
63 server = wsgiref.simple_server.make_server(host, port, app.app) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
64 server.serve_forever() |