Use list.sort's keyword parameters
[joel/kofoto.git] / src / packages / kofoto / gkofoto / main.py
1 import codecs
2 import os
3 import sys
4 from kofoto.clientutils import expanduser, get_file_encoding
5 from kofoto.config import DEFAULT_CONFIGFILE_LOCATION
6 from kofoto.gkofoto.environment import env
7 from kofoto.gkofoto.controller import Controller
8 from optparse import OptionParser
9
10 def setupWindowsEnvironment():
11     # Allow (default) datafile location to be determined under Windows 98.
12     if expanduser("~") == "~":
13         # Probably running under Windows 98 or similar OS where the
14         # environment variables HOMEPATH and HOMEDRIVE (and HOME) are not
15         # set. We have to fake it instead.
16         try:
17             import _winreg
18
19             # Look up where "My Documents" lives.
20             key = _winreg.OpenKey(
21                 _winreg.HKEY_CURRENT_USER,
22                 "Software\\Microsoft\\Windows\\CurrentVersion"
23                 "\\Explorer\\Shell Folders")
24             home, dummy = _winreg.QueryValueEx(key, "Personal")
25             # At this point home is _probably_ a Unicode string.
26         except EnvironmentError:
27             home = None
28
29         if home == None:
30             # Unable to look up the location so just make one up, however
31             # nasty that location may be. We do output where the data
32             # location is on gkofoto startup.
33             home = "C:\\"
34
35         os.environ["HOME"] = home
36         # Note: Use os.environ as os.putenv() at least in Windows 98 only
37         # changes variable for sub processes; this process would not see
38         # the change.
39
40 def main(bindir, argv):
41     argv = [x.decode(env.filesystemEncoding) for x in argv]
42
43     sys.stdin = codecs.getreader(get_file_encoding(sys.stdin))(sys.stdin)
44     sys.stdout = codecs.getwriter(get_file_encoding(sys.stdout))(sys.stdout)
45     sys.stderr = codecs.getwriter(get_file_encoding(sys.stderr))(sys.stderr)
46
47     parser = OptionParser(version=env.version)
48     parser.add_option(
49         "--configfile",
50         type="string",
51         dest="configfile",
52         help="use configuration file CONFIGFILE instead of the default (%s)" % (
53             DEFAULT_CONFIGFILE_LOCATION),
54         default=None)
55     parser.add_option(
56         "--database",
57         type="string",
58         dest="database",
59         help="use metadata database DATABASE instead of the default (specified in the configuration file)",
60         default=None)
61     parser.add_option(
62         "--debug",
63         action="store_true",
64         help="print debug messages to stdout",
65         default=False)
66     options, args = parser.parse_args(argv[1:])
67
68     if len(args) != 0:
69         parser.error("incorrect number of arguments")
70
71     if sys.platform == "win32":
72         setupWindowsEnvironment()
73
74     setupOk = env.setup(
75         bindir, options.debug, options.configfile, options.database)
76     env.controller = Controller()
77     env.controller.start(setupOk)