author | Tero Marttila <terom@fixme.fi> |
Thu, 11 Jun 2009 21:26:05 +0300 | |
branch | threaded-tasks |
changeset 89 | 4b254a90d6d0 |
parent 87 | a7a18893730d |
permissions | -rw-r--r-- |
48
20355dd2e61a
new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
1 |
""" |
20355dd2e61a
new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
2 |
Main entry point for the command-line interface |
20355dd2e61a
new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
3 |
""" |
20355dd2e61a
new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
4 |
|
72
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
5 |
import gallery, commands, config as config_module |
48
20355dd2e61a
new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
6 |
|
20355dd2e61a
new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
7 |
from optparse import OptionParser |
20355dd2e61a
new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
8 |
|
20355dd2e61a
new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
9 |
def option_parser (command_name) : |
20355dd2e61a
new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
10 |
""" |
20355dd2e61a
new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
11 |
Build the OptionParser that we use |
20355dd2e61a
new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
12 |
""" |
20355dd2e61a
new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
13 |
|
20355dd2e61a
new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
14 |
# create parser using the given command |
20355dd2e61a
new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
15 |
parser = OptionParser(prog=command_name) |
20355dd2e61a
new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
16 |
|
20355dd2e61a
new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
17 |
# define options |
87
a7a18893730d
implement up-to-date checking for commands.main, and add --force-update option
Tero Marttila <terom@fixme.fi>
parents:
76
diff
changeset
|
18 |
parser.add_option('-G', "--gallery-path", metavar='DIR', dest='gallery_path', default=None, |
a7a18893730d
implement up-to-date checking for commands.main, and add --force-update option
Tero Marttila <terom@fixme.fi>
parents:
76
diff
changeset
|
19 |
help="Use DIR as the Gallery path [default: CWD]") |
a7a18893730d
implement up-to-date checking for commands.main, and add --force-update option
Tero Marttila <terom@fixme.fi>
parents:
76
diff
changeset
|
20 |
|
a7a18893730d
implement up-to-date checking for commands.main, and add --force-update option
Tero Marttila <terom@fixme.fi>
parents:
76
diff
changeset
|
21 |
parser.add_option('-R', "--read-only", dest='read_only', action="store_true", default=False, |
a7a18893730d
implement up-to-date checking for commands.main, and add --force-update option
Tero Marttila <terom@fixme.fi>
parents:
76
diff
changeset
|
22 |
help="Do not attempt to modify the gallery") |
a7a18893730d
implement up-to-date checking for commands.main, and add --force-update option
Tero Marttila <terom@fixme.fi>
parents:
76
diff
changeset
|
23 |
|
a7a18893730d
implement up-to-date checking for commands.main, and add --force-update option
Tero Marttila <terom@fixme.fi>
parents:
76
diff
changeset
|
24 |
parser.add_option('-F', "--force-update", dest='force_update', action="store_true", default=False, |
a7a18893730d
implement up-to-date checking for commands.main, and add --force-update option
Tero Marttila <terom@fixme.fi>
parents:
76
diff
changeset
|
25 |
help="Force updates, even for fresh items") |
89
4b254a90d6d0
add task_threads config setting
Tero Marttila <terom@fixme.fi>
parents:
87
diff
changeset
|
26 |
|
4b254a90d6d0
add task_threads config setting
Tero Marttila <terom@fixme.fi>
parents:
87
diff
changeset
|
27 |
parser.add_option('-j', "--jobs", metavar='COUNT', type="int", dest='task_threads', default=None, |
4b254a90d6d0
add task_threads config setting
Tero Marttila <terom@fixme.fi>
parents:
87
diff
changeset
|
28 |
help="Set threaded concurrency level for tasks") |
48
20355dd2e61a
new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
29 |
|
20355dd2e61a
new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
30 |
return parser |
20355dd2e61a
new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
31 |
|
72
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
32 |
def build_config (options) : |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
33 |
""" |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
34 |
Build a configuration object with the given options |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
35 |
""" |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
36 |
|
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
37 |
# build default config |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
38 |
config = config_module.Configuration() |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
39 |
|
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
40 |
# apply options |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
41 |
if options.gallery_path : |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
42 |
config.gallery_path = options.gallery_path |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
43 |
|
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
44 |
if options.read_only : |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
45 |
config.read_only = True |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
46 |
|
87
a7a18893730d
implement up-to-date checking for commands.main, and add --force-update option
Tero Marttila <terom@fixme.fi>
parents:
76
diff
changeset
|
47 |
if options.force_update : |
a7a18893730d
implement up-to-date checking for commands.main, and add --force-update option
Tero Marttila <terom@fixme.fi>
parents:
76
diff
changeset
|
48 |
config.force_update = True |
a7a18893730d
implement up-to-date checking for commands.main, and add --force-update option
Tero Marttila <terom@fixme.fi>
parents:
76
diff
changeset
|
49 |
|
89
4b254a90d6d0
add task_threads config setting
Tero Marttila <terom@fixme.fi>
parents:
87
diff
changeset
|
50 |
if options.task_threads : |
4b254a90d6d0
add task_threads config setting
Tero Marttila <terom@fixme.fi>
parents:
87
diff
changeset
|
51 |
config.task_threads = options.task_threads |
4b254a90d6d0
add task_threads config setting
Tero Marttila <terom@fixme.fi>
parents:
87
diff
changeset
|
52 |
|
72
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
53 |
# XXX: load config file(s) |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
54 |
|
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
55 |
return config |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
56 |
|
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
57 |
def load_gallery (config) : |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
58 |
""" |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
59 |
Create the Gallery object that we are manipulating |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
60 |
""" |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
61 |
|
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
62 |
# read path from config |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
63 |
return gallery.Gallery(config.gallery_path, config) |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
64 |
|
76 | 65 |
def load_command (config, args) : |
72
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
66 |
""" |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
67 |
Figure out what command to run and with what args |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
68 |
""" |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
69 |
|
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
70 |
# XXX: hardcoded |
76 | 71 |
return commands.main, args, {} |
72 |
||
73 |
def run_command (config, gallery, command, args, kwargs) : |
|
74 |
""" |
|
75 |
Run the given command |
|
76 |
""" |
|
77 |
||
78 |
# setup the command execution context |
|
79 |
command_ctx = command.setup(config, gallery) |
|
80 |
||
81 |
try : |
|
82 |
# run it |
|
83 |
return command_ctx(*args, **kwargs) |
|
84 |
||
85 |
except : |
|
86 |
command_ctx.handle_error() |
|
72
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
87 |
|
48
20355dd2e61a
new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
88 |
def main (argv) : |
20355dd2e61a
new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
89 |
""" |
20355dd2e61a
new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
90 |
Main entry point |
20355dd2e61a
new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
91 |
""" |
20355dd2e61a
new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
92 |
|
76 | 93 |
## load commands |
94 |
#commands = load_commands() |
|
72
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
95 |
|
48
20355dd2e61a
new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
96 |
# build optparser |
20355dd2e61a
new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
97 |
parser = option_parser(argv[0]) |
20355dd2e61a
new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
98 |
|
20355dd2e61a
new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
99 |
# parse the given argv |
72
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
100 |
options, args = parser.parse_args(argv[1:]) |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
101 |
|
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
102 |
# build our config |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
103 |
config = build_config(options) |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
104 |
|
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
105 |
# open gallery |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
106 |
gallery = load_gallery(config) |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
107 |
|
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
108 |
# figure out what command to run |
76 | 109 |
command, args, kwargs = load_command(config, args) |
110 |
||
48
20355dd2e61a
new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
111 |
# run the selected command |
76 | 112 |
ret = run_command(config, gallery, command, args, kwargs) |
72
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
113 |
|
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
114 |
if ret is None : |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
115 |
# success |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
116 |
return 0 |
48
20355dd2e61a
new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
117 |
|
72
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
118 |
else : |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
119 |
# exit with error code |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
120 |
assert isinstance(ret, int) |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
121 |
return ret |
168a2d065f17
use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
122 |