main: Add an argparse-based command line interface
[package-cache.git] / package_cache / main.py
1 # Copyright
2
3 import argparse as _argparse
4 import logging as _logging
5 import wsgiref.simple_server as _wsgiref_simple_server
6
7 from . import __version__
8 from . import server as _server
9
10
11 LOG = _logging.getLogger(__name__)
12
13
14 def run(*args, **kwargs):
15     """Run the package-cache server using Python's WSGI reference server
16     """
17     parser = _argparse.ArgumentParser(description=__doc__)
18     parser.add_argument(
19         '--version', action='version',
20         version='%(prog)s {}'.format(__version__))
21     parser.add_argument(
22         '--host', metavar='HOSTNAME', default='localhost',
23         help='Host to listen as')
24     parser.add_argument(
25         '--port', metavar='INT', default=4000, type=int,
26         help='Port to listen to')
27     parser.add_argument(
28         '--source', metavar='URL', action='append',
29         help='URL for an upstream mirror')
30     parser.add_argument(
31         '--cache', metavar='PATH', default='/tmp/package-cache',
32         help='Path to the package cache directory')
33
34     args = parser.parse_args()
35
36     server = _server.Server(sources=args.source or [], cache=args.cache)
37     wsgi = _wsgiref_simple_server.make_server(
38         host=args.host, port=args.port, app=server)
39     LOG.info('serving WSGI on {}:{}'.format(args.host, args.port))
40     wsgi.serve_forever()