Mercurial > hg > martINI
annotate martini/main.py @ 21:85bbb83703fa
python3
| author | Jeff Hammel <k0scist@gmail.com> | 
|---|---|
| date | Sat, 24 Apr 2021 14:58:56 -0700 | 
| parents | 4faed08eb8d8 | 
| children | 112cb171b419 | 
| rev | line source | 
|---|---|
| 0 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 1 #!/usr/bin/env python | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 2 | 
| 5 | 3 """ | 
| 4 main front-end functions for command-line programs | |
| 5 """ | |
| 6 | |
| 0 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 7 import config | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 8 import os | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 9 import sys | 
| 2 
d172c078f4a2
add -O option for specifying output file
 k0s <k0scist@gmail.com> parents: 
1diff
changeset | 10 from optparse import OptionParser | 
| 0 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 11 | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 12 sep = '--' # section separator | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 13 | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 14 def parse_args(*args): | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 15 """ | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 16 convert command line options to files, sections, and options | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 17 returns a tuple: | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 18 ( [files], { 'section': { 'option': 'value', 'option2': 'value2' } } ) | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 19 """ | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 20 | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 21 # find the files | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 22 # XXX note this prohibits files starting with -- | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 23 index = None | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 24 for index, value in enumerate(args): | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 25 if value.startswith(sep): | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 26 break | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 27 else: | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 28 return (args, []) | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 29 | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 30 files = args[:index] | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 31 args = args[index:] | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 32 | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 33 # find the sections | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 34 ini = [] | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 35 for arg in args: | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 36 if arg.startswith(sep): | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 37 arg = arg[len(sep):] | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 38 assert arg | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 39 section = [] | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 40 ini.append((arg, section)) | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 41 else: | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 42 section.append(arg) | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 43 | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 44 return (files, ini) | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 45 | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 46 def parse_options(*args): | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 47 files, sections = parse_args(*args) | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 48 ini = {} | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 49 for section, options in sections: | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 50 ini[section] = {} | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 51 for option in options: | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 52 key, value = option.split('=', 1) | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 53 ini[section][key] = value | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 54 | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 55 return (files, ini) | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 56 | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 57 def set(args=None): | 
| 4 
f7f335561ceb
make special usage strings for each program; again, really should abstract this
 k0s <k0scist@gmail.com> parents: 
2diff
changeset | 58 | 
| 
f7f335561ceb
make special usage strings for each program; again, really should abstract this
 k0s <k0scist@gmail.com> parents: 
2diff
changeset | 59 usage = "%s file1 [file2] [...] --section1 option1=value1 option2=value2 --section2 option3=value3" | 
| 12 | 60 | 
| 0 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 61 # process arguments | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 62 if args is None: | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 63 args = sys.argv[1:] | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 64 files, sections = parse_options(*args) | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 65 | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 66 # display usage information | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 67 if not files: | 
| 12 | 68 print ('Usage:') | 
| 69 print (usage % os.path.basename(sys.argv[0])) | |
| 0 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 70 sys.exit(0) | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 71 | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 72 # process the files | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 73 for f in files: | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 74 if f == '-': | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 75 fp = sys.stdin | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 76 else: | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 77 fp = file(f) | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 78 munger = config.ConfigMunger(fp, sections) | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 79 | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 80 if f == '-': | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 81 fp = sys.stdout | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 82 else: | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 83 fp.close() | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 84 fp = file(f, "w") | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 85 munger.write(fp=fp) | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 86 | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 87 def get(args=None): | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 88 | 
| 4 
f7f335561ceb
make special usage strings for each program; again, really should abstract this
 k0s <k0scist@gmail.com> parents: 
2diff
changeset | 89 usage = "%s file1 [file2] [...] --section1 option1 option2 --section2 option3" | 
| 
f7f335561ceb
make special usage strings for each program; again, really should abstract this
 k0s <k0scist@gmail.com> parents: 
2diff
changeset | 90 | 
| 0 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 91 # process arguments | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 92 if args is None: | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 93 args = sys.argv[1:] | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 94 files, sections = parse_args(*args) | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 95 | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 96 # display usage information | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 97 if not files: | 
| 21 | 98 print('Usage:') | 
| 99 print(usage % os.path.basename(sys.argv[0])) | |
| 0 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 100 sys.exit(0) | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 101 | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 102 # process the files | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 103 for f in files: | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 104 if f == '-': | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 105 fp = sys.stdin | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 106 else: | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 107 fp = file(f) | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 108 munger = config.ConfigMunger(fp) | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 109 for section, options in sections: | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 110 if section in munger.sections(): | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 111 if options: | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 112 for option in options: | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 113 value = munger.get(section, option) | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 114 if value is not None: | 
| 21 | 115 print(value) | 
| 0 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 116 else: | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 117 config.ConfigMunger({section: munger[section]}).write() | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 118 | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 119 def delete(args=None): | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 120 | 
| 4 
f7f335561ceb
make special usage strings for each program; again, really should abstract this
 k0s <k0scist@gmail.com> parents: 
2diff
changeset | 121 usage = "%s file1 [file2] [...] --section1 option1 option2 --section2 option3" | 
| 
f7f335561ceb
make special usage strings for each program; again, really should abstract this
 k0s <k0scist@gmail.com> parents: 
2diff
changeset | 122 | 
| 0 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 123 # process arguments | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 124 if args is None: | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 125 args = sys.argv[1:] | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 126 files, sections = parse_args(*args) | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 127 | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 128 # display usage information | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 129 if not files: | 
| 21 | 130 print('Usage:') | 
| 131 print(usage % os.path.basename(sys.argv[0])) | |
| 0 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 132 sys.exit(0) | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 133 | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 134 # process the files | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 135 for f in files: | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 136 if f == '-': | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 137 fp = sys.stdin | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 138 else: | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 139 fp = file(f) | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 140 conf = config.ConfigMunger(fp).dict() | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 141 for section, options in sections: | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 142 if section in conf: | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 143 if options: | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 144 for option in options: | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 145 if option in conf[section]: | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 146 conf[section].pop(option) | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 147 else: | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 148 conf.pop(section) | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 149 if f == '-': | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 150 fp = sys.stdout | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 151 else: | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 152 fp.close() | 
| 21 | 153 fp = open(f, 'w') | 
| 0 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 154 config.ConfigMunger(conf).write(fp) | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 155 | 
| 1 | 156 def munge(args=None): | 
| 157 | |
| 4 
f7f335561ceb
make special usage strings for each program; again, really should abstract this
 k0s <k0scist@gmail.com> parents: 
2diff
changeset | 158 usage = "%s file1 [file2] [...]" | 
| 
f7f335561ceb
make special usage strings for each program; again, really should abstract this
 k0s <k0scist@gmail.com> parents: 
2diff
changeset | 159 | 
| 1 | 160 # process arguments | 
| 161 if args is None: | |
| 162 args = sys.argv[1:] | |
| 2 
d172c078f4a2
add -O option for specifying output file
 k0s <k0scist@gmail.com> parents: 
1diff
changeset | 163 | 
| 
d172c078f4a2
add -O option for specifying output file
 k0s <k0scist@gmail.com> parents: 
1diff
changeset | 164 parser = OptionParser() | 
| 
d172c078f4a2
add -O option for specifying output file
 k0s <k0scist@gmail.com> parents: 
1diff
changeset | 165 parser.add_option('-O', dest='output', | 
| 
d172c078f4a2
add -O option for specifying output file
 k0s <k0scist@gmail.com> parents: 
1diff
changeset | 166 help="name of file to output (stdout if not specified)") | 
| 
d172c078f4a2
add -O option for specifying output file
 k0s <k0scist@gmail.com> parents: 
1diff
changeset | 167 options, args = parser.parse_args(args) | 
| 1 | 168 files, sections = parse_options(*args) | 
| 169 | |
| 170 # display usage information | |
| 171 if not files: | |
| 21 | 172 print('Usage:') | 
| 173 print(usage % os.path.basename(sys.argv[0])) | |
| 1 | 174 sys.exit(0) | 
| 175 | |
| 176 # munge the files | |
| 21 | 177 conf = list(files) | 
| 1 | 178 conf.append(sections) | 
| 179 munger = config.ConfigMunger(*conf) | |
| 2 
d172c078f4a2
add -O option for specifying output file
 k0s <k0scist@gmail.com> parents: 
1diff
changeset | 180 if options.output: | 
| 
d172c078f4a2
add -O option for specifying output file
 k0s <k0scist@gmail.com> parents: 
1diff
changeset | 181 fp = file(options.output, 'w') | 
| 
d172c078f4a2
add -O option for specifying output file
 k0s <k0scist@gmail.com> parents: 
1diff
changeset | 182 else: | 
| 
d172c078f4a2
add -O option for specifying output file
 k0s <k0scist@gmail.com> parents: 
1diff
changeset | 183 fp = sys.stdout | 
| 
d172c078f4a2
add -O option for specifying output file
 k0s <k0scist@gmail.com> parents: 
1diff
changeset | 184 munger.write(fp) | 
| 0 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 185 | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 186 if __name__ == '__main__': | 
| 
3c3522ce6e3a
initial import of martINI from https://svn.openplans.org/svn/standalone/martINI/
 k0s <k0scist@gmail.com> parents: diff
changeset | 187 set(sys.argv[1:]) | 
