Add ~/lib/python to sys.path on startup
[zeroinstall/solver.git] / 0store
blob81d64ea9f49eab3e03df822039b14b368cfe407b
1 #!/usr/bin/env python
3 import locale
4 from logging import warn
5 try:
6 locale.setlocale(locale.LC_ALL, '')
7 except locale.Error:
8 warn('Error setting locale (eg. Invalid locale)')
10 import os, sys; sys.path.append(os.path.expanduser('~/lib/python'))
11 from optparse import OptionParser
12 import logging
13 from zeroinstall import SafeException
15 from zeroinstall.zerostore import cli, BadDigest
17 parser = OptionParser(usage="usage: %prog " +
18 '\n %prog '.join([c.__doc__ for c in cli.commands]))
19 parser.add_option("-v", "--verbose", help="more verbose output", action='count')
20 parser.add_option("-V", "--version", help="display version information", action='store_true')
21 parser.disable_interspersed_args()
23 (options, args) = parser.parse_args()
25 if options.verbose:
26 logger = logging.getLogger()
27 if options.verbose == 1:
28 logger.setLevel(logging.INFO)
29 else:
30 logger.setLevel(logging.DEBUG)
31 hdlr = logging.StreamHandler()
32 fmt = logging.Formatter("%(levelname)s:%(message)s")
33 hdlr.setFormatter(fmt)
34 logger.addHandler(hdlr)
36 if options.version:
37 import zeroinstall
38 print "0store (zero-install) " + zeroinstall.version
39 print "Copyright (C) 2009 Thomas Leonard"
40 print "This program comes with ABSOLUTELY NO WARRANTY,"
41 print "to the extent permitted by law."
42 print "You may redistribute copies of this program"
43 print "under the terms of the GNU Lesser General Public License."
44 print "For more information about these matters, see the file named COPYING."
45 sys.exit(0)
47 if len(args) < 1:
48 parser.print_help()
49 sys.exit(1)
51 try:
52 cli.init_stores()
54 pattern = args[0].lower()
55 matches = [c for c in cli.commands if c.__name__[3:].startswith(pattern)]
56 if len(matches) == 0:
57 parser.print_help()
58 sys.exit(1)
59 if len(matches) > 1:
60 raise SafeException("What do you mean by '%s'?\n%s" %
61 (pattern, '\n'.join(['- ' + x.__name__[3:] for x in matches])))
62 matches[0](args[1:])
63 except KeyboardInterrupt, ex:
64 print >>sys.stderr, "Interrupted"
65 sys.exit(1)
66 except OSError, ex:
67 if options.verbose: raise
68 print >>sys.stderr, str(ex)
69 sys.exit(1)
70 except IOError, ex:
71 if options.verbose: raise
72 print >>sys.stderr, str(ex)
73 sys.exit(1)
74 except cli.UsageError, ex:
75 print >>sys.stderr, str(ex)
76 print >>sys.stderr, "usage: " + sys.argv[0] + " " + matches[0].__doc__
77 sys.exit(1)
78 except SafeException, ex:
79 if options.verbose: raise
80 print >>sys.stderr, str(ex)
81 sys.exit(1)