degal/main.py
author Tero Marttila <terom@fixme.fi>
Fri, 05 Jun 2009 23:05:49 +0300
changeset 72 168a2d065f17
parent 48 20355dd2e61a
child 76 e22d9f699081
permissions -rw-r--r--
use new command/gallery stuff in main.py
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
72
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    18
    parser.add_option('-G', "--gallery-path", dest='gallery_path', help="Use DIR as the Gallery path [default: CWD]", metavar='DIR', default=None)
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    19
    parser.add_option('-R', "--read-only", dest='read_only', help="Do not attempt to modify the gallery", default=True)
48
20355dd2e61a new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
    
20355dd2e61a new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
    return parser
20355dd2e61a new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
72
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    23
def build_config (options) :
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    24
    """
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    25
        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
    26
    """
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    27
    
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    28
    # build default config
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    29
    config = config_module.Configuration()
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    30
    
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    31
    # apply options
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    32
    if options.gallery_path :
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    33
        config.gallery_path = options.gallery_path
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    34
    
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    35
    if options.read_only :
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    36
        config.read_only = True
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    37
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    38
    # XXX: load config file(s)
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
    return config
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    41
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    42
def load_gallery (config) :
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
        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
    45
    """
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    46
    
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    47
    # read path from config
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    48
    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
    49
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    50
def load_command (options, args) :
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    51
    """
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    52
        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
    53
    """
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
    # XXX: hardcoded
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    56
    return commands.main, args
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    57
48
20355dd2e61a new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
def main (argv) :
20355dd2e61a new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
    """
20355dd2e61a new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
        Main entry point
20355dd2e61a new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
    """
20355dd2e61a new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
72
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    63
    # load commands
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    64
    commands = load_commands()
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    65
48
20355dd2e61a new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
    # build optparser
20355dd2e61a new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
    parser = option_parser(argv[0])
20355dd2e61a new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
    
20355dd2e61a new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
    # parse the given argv
72
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    70
    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
    71
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    72
    # build our config
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    73
    config = build_config(options)
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    74
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    75
    # open gallery
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    76
    gallery = load_gallery(config)
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    77
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    78
    # figure out what command to run
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    79
    command_func, command_args = load_command(options, args)
48
20355dd2e61a new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    80
    
20355dd2e61a new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
    # run the selected command
72
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    82
    ret = command_func(gallery, *command_args)
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    83
    
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    84
    if ret is None :
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    85
        # success
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    86
        return 0
48
20355dd2e61a new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    87
72
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    88
    else :
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    89
        # exit with error code
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    90
        assert isinstance(ret, int)
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    91
        return ret
168a2d065f17 use new command/gallery stuff in main.py
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    92