~abentley/charms/precise/charmworld/charm-import-limit

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#!/usr/bin/env python

from ConfigParser import ConfigParser, NoSectionError
from random import getrandbits
import sys


def update_config(parser, items):
    configurable = set(['session.secret', 'mongo.host', 'mongo.port'])
    for key, value in items:
        if key not in configurable:
            continue
        parser.set('app:main', key, value)


def read_config(files):
    new_config = ConfigParser()
    new_config.read(files)
    return new_config


def write_new_config(changes, default, override, target):
    new_config = read_config([default, override])
    old_config = read_config(target)
    try:
        update_config(new_config, old_config.items('app:main', raw=True))
    except NoSectionError:
        pass
    update_config(new_config, changes)
    if new_config.get('app:main', 'session.secret') == '':
        new_config.set('app:main', 'session.secret', str(getrandbits(32)))
    with open(target, 'w') as output:
        new_config.write(output)


class UsageError(Exception):
    """An error triggered by incorrect usage"""


def main():
    if len(sys.argv) < 4:
        raise UsageError('Usage: %s DEFAULTS OVERRIDES TARGET [HOST [PORT]]')
    changes = {}
    if len(sys.argv) > 4:
        changes['mongo.host'] = sys.argv[4]
    if len(sys.argv) > 5:
        changes['mongo.port'] = sys.argv[5]
    parser = write_new_config(changes.items(), default=sys.argv[1],
                              override=sys.argv[2], target=sys.argv[3])


if __name__ == '__main__':
    try:
        main()
    except UsageError as e:
        sys.stderr.write(str(e))
        sys.exit(1)