Mercurial > hg > simpypi
annotate simpypi/factory.py @ 62:7c154953acc4
test reading the pages
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Thu, 01 Mar 2012 16:20:44 -0800 |
parents | 8804fc4e403f |
children | 8fa30276b3e0 |
rev | line source |
---|---|
19
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
1 #!/usr/bin/env python |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
2 |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
3 """ |
30 | 4 WSGI factories for simpypi |
19
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
5 """ |
0 | 6 |
19
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
7 import optparse |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
8 import os |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
9 import shutil |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
10 import sys |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
11 import tempfile |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
12 |
27 | 13 from fileserver import DirectoryServer |
19
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
14 from wsgi import SimPyPI |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
15 from wsgiref import simple_server |
0 | 16 |
23
e72d9655d753
start stubbing a directory server
Jeff Hammel <jhammel@mozilla.com>
parents:
20
diff
changeset
|
17 class NamespacedFileserver(DirectoryServer): |
16
d3efc504c0b1
more towards the type of fileserver we actually care about
Jeff Hammel <jhammel@mozilla.com>
parents:
12
diff
changeset
|
18 |
d3efc504c0b1
more towards the type of fileserver we actually care about
Jeff Hammel <jhammel@mozilla.com>
parents:
12
diff
changeset
|
19 def __init__(self, app, directory, namespace): |
23
e72d9655d753
start stubbing a directory server
Jeff Hammel <jhammel@mozilla.com>
parents:
20
diff
changeset
|
20 DirectoryServer.__init__(self, directory) |
e72d9655d753
start stubbing a directory server
Jeff Hammel <jhammel@mozilla.com>
parents:
20
diff
changeset
|
21 self.app = app |
16
d3efc504c0b1
more towards the type of fileserver we actually care about
Jeff Hammel <jhammel@mozilla.com>
parents:
12
diff
changeset
|
22 self.namespace = namespace |
d3efc504c0b1
more towards the type of fileserver we actually care about
Jeff Hammel <jhammel@mozilla.com>
parents:
12
diff
changeset
|
23 |
d3efc504c0b1
more towards the type of fileserver we actually care about
Jeff Hammel <jhammel@mozilla.com>
parents:
12
diff
changeset
|
24 def __call__(self, environ, start_response): |
d3efc504c0b1
more towards the type of fileserver we actually care about
Jeff Hammel <jhammel@mozilla.com>
parents:
12
diff
changeset
|
25 path = environ['PATH_INFO'] |
d3efc504c0b1
more towards the type of fileserver we actually care about
Jeff Hammel <jhammel@mozilla.com>
parents:
12
diff
changeset
|
26 if path == self.namespace: |
d3efc504c0b1
more towards the type of fileserver we actually care about
Jeff Hammel <jhammel@mozilla.com>
parents:
12
diff
changeset
|
27 environ['PATH_INFO'] = '/' |
24 | 28 return DirectoryServer.__call__(self, environ, start_response) |
16
d3efc504c0b1
more towards the type of fileserver we actually care about
Jeff Hammel <jhammel@mozilla.com>
parents:
12
diff
changeset
|
29 elif path.startswith(self.namespace + '/'): |
d3efc504c0b1
more towards the type of fileserver we actually care about
Jeff Hammel <jhammel@mozilla.com>
parents:
12
diff
changeset
|
30 environ['PATH_INFO'] = path[len(self.namespace):] |
24 | 31 return DirectoryServer.__call__(self, environ, start_response) |
0 | 32 return self.app(environ, start_response) |
33 | |
23
e72d9655d753
start stubbing a directory server
Jeff Hammel <jhammel@mozilla.com>
parents:
20
diff
changeset
|
34 |
1 | 35 def factory(**app_conf): |
0 | 36 """create a webob view and wrap it in middleware""" |
4 | 37 directory = app_conf['directory'] |
19
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
38 app = SimPyPI(**app_conf) |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
39 return NamespacedFileserver(app, directory, '/index') |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
40 |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
41 def main(args=sys.argv[:]): |
0 | 42 |
19
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
43 # parse command line options |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
44 usage = '%prog [options]' |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
45 parser = optparse.OptionParser(usage=usage) |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
46 parser.add_option('-p', '--port', dest='port', |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
47 type='int', default=8080, |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
48 help="port to run the server on") |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
49 parser.add_option('-d', '--directory', dest='directory', |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
50 help='directory to serve') |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
51 options, args = parser.parse_args(args) |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
52 |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
53 # create a temporary directory, if none specified |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
54 tmpdir = None |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
55 if not options.directory: |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
56 tmpdir = tempfile.mkdtemp() |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
57 options.directory = tmpdir |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
58 |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
59 # serve |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
60 print "http://localhost:%d/" % options.port |
2 | 61 try: |
19
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
62 app = factory(directory=options.directory) |
20 | 63 server = simple_server.make_server(host='0.0.0.0', port=options.port, app=app) |
3 | 64 server.serve_forever() |
2 | 65 finally: |
19
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
66 if tmpdir: |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
67 shutil.rmtree(tmpdir) |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
68 |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
69 if __name__ == '__main__': |
bf70fc5a115f
make a real python program
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
70 main() |