Mercurial > caja-test
annotate pavement.py @ 4:cf673c093b61 default tip
paver runserver now shows errors if cajoling failed.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Sun, 07 Jun 2009 20:44:44 -0700 |
parents | 6737bc744b46 |
children |
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. |
4
cf673c093b61
paver runserver now shows errors if cajoling failed.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
22 cajoled_filename = "output.co.js" |
cf673c093b61
paver runserver now shows errors if cajoling failed.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
23 output_filename = "output.txt" |
cf673c093b61
paver runserver now shows errors if cajoling failed.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
24 popen = subprocess.Popen([self.cajoler_path, |
1
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
25 "-i", filename, |
4
cf673c093b61
paver runserver now shows errors if cajoling failed.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
26 "-o", cajoled_filename], |
cf673c093b61
paver runserver now shows errors if cajoling failed.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
27 stdout=open(output_filename, 'w'), |
cf673c093b61
paver runserver now shows errors if cajoling failed.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
28 stderr=subprocess.STDOUT) |
cf673c093b61
paver runserver now shows errors if cajoling failed.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
29 popen.wait() |
cf673c093b61
paver runserver now shows errors if cajoling failed.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
30 if popen.returncode == 0: |
cf673c093b61
paver runserver now shows errors if cajoling failed.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
31 content = open(cajoled_filename).read() |
cf673c093b61
paver runserver now shows errors if cajoling failed.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
32 self.cache[hash] = Bunch(success = True, |
cf673c093b61
paver runserver now shows errors if cajoling failed.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
33 content = content) |
cf673c093b61
paver runserver now shows errors if cajoling failed.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
34 os.remove(cajoled_filename) |
1
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
35 else: |
4
cf673c093b61
paver runserver now shows errors if cajoling failed.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
36 output = open(output_filename).read() |
cf673c093b61
paver runserver now shows errors if cajoling failed.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
37 self.cache[hash] = Bunch(success = False, |
cf673c093b61
paver runserver now shows errors if cajoling failed.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
38 content = output) |
cf673c093b61
paver runserver now shows errors if cajoling failed.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
39 os.remove(output_filename) |
1
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
40 return self.cache[hash] |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
41 |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
42 def app(self, env, start_response): |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
43 path = env['PATH_INFO'] |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
44 parts = path.split('/')[1:] |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
45 if len(parts) == 1: |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
46 filename = os.path.join('caja-js', parts[0]) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
47 if os.path.exists(filename) and not os.path.isdir(filename): |
4
cf673c093b61
paver runserver now shows errors if cajoling failed.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
48 result = self.cajole(filename) |
cf673c093b61
paver runserver now shows errors if cajoling failed.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
49 if not result.success: |
1
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
50 start_response('500 Internal Server Error', |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
51 [('Content-type', 'text/plain')]) |
4
cf673c093b61
paver runserver now shows errors if cajoling failed.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
52 return ["Cajoling failed:\n\n%s" % result.content] |
1
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
53 start_response('200 OK', |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
54 [('Content-type', 'text/javascript')]) |
4
cf673c093b61
paver runserver now shows errors if cajoling failed.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
55 return [result.content] |
1
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
56 start_response('404 Not Found', |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
57 [('Content-type', 'text/plain')]) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
58 return ['Not found: %s' % path] |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
59 |
0 | 60 @task |
1
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
61 @cmdopts((['port=', 'p', 'port to bind to'], |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
62 ['host=', 'o', 'host to bind to'], |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
63 ['cajoler-path=', 'c', 'path to cajole_html'])) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
64 def runserver(options): |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
65 port = int(options.get('port', DEFAULT_PORT)) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
66 host = options.get('host', DEFAULT_HOST) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
67 if not options.get('cajoler_path'): |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
68 raise Exception('Required option: --cajoler-path.') |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
69 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
|
70 port) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
71 app = CajolerWebApp(options.cajoler_path) |
00d50391d378
Added runserver target to paver.
Atul Varma <varmaa@toolness.com>
parents:
0
diff
changeset
|
72 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
|
73 server.serve_forever() |