Mercurial > caja-test
annotate pavement.py @ 1:00d50391d378
Added runserver target to paver.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Sun, 07 Jun 2009 20:20:17 -0700 |
parents | 633c9cb05555 |
children | 6737bc744b46 |
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. |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
21 output_filename = "output.co.js" |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
22 retval = subprocess.call([self.cajoler_path, |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
23 "-i", filename, |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
24 "-o", output_filename]) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
25 if retval == 0: |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
26 self.cache[hash] = open(output_filename).read() |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
27 os.remove(output_filename) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
28 else: |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
29 self.cache[hash] = None |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
30 return self.cache[hash] |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
31 |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
32 def app(self, env, start_response): |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
33 path = env['PATH_INFO'] |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
34 parts = path.split('/')[1:] |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
35 if len(parts) == 1: |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
36 filename = os.path.join('caja-js', parts[0]) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
37 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
|
38 cajoled = self.cajole(filename) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
39 if cajoled is None: |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
40 start_response('500 Internal Server Error', |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
41 [('Content-type', 'text/plain')]) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
42 return ["Cajoling failed."] |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
43 start_response('200 OK', |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
44 [('Content-type', 'text/javascript')]) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
45 return [cajoled] |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
46 start_response('404 Not Found', |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
47 [('Content-type', 'text/plain')]) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
48 return ['Not found: %s' % path] |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
49 |
0 | 50 @task |
1
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
51 @cmdopts((['port=', 'p', 'port to bind to'], |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
52 ['host=', 'o', 'host to bind to'], |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
53 ['cajoler-path=', 'c', 'path to cajole_html'])) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
54 def runserver(options): |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
55 port = int(options.get('port', DEFAULT_PORT)) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
56 host = options.get('host', DEFAULT_HOST) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
57 if not options.get('cajoler_path'): |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
58 raise Exception('Required option: --cajoler-path.') |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
59 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
|
60 port) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
61 app = CajolerWebApp(options.cajoler_path) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
62 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
|
63 server.serve_forever() |