Mercurial > hg > config
comparison python/install_config.py @ 591:542d329835ec
STUB: python/install_config.py
| author | Jeff Hammel <k0scist@gmail.com> |
|---|---|
| date | Fri, 24 Jan 2014 18:40:45 -0800 |
| parents | e93b81d8a586 |
| children | 33b313fa1eb0 |
comparison
equal
deleted
inserted
replaced
| 590:e93b81d8a586 | 591:542d329835ec |
|---|---|
| 9 # TODO: | 9 # TODO: |
| 10 # - dl and get ~/web/sync.ini : | 10 # - dl and get ~/web/sync.ini : |
| 11 # ln -s /home/jhammel/web/sync.ini /home/jhammel/.silvermirror | 11 # ln -s /home/jhammel/web/sync.ini /home/jhammel/.silvermirror |
| 12 # - handle cases where config is autogenerated BUT you still want | 12 # - handle cases where config is autogenerated BUT you still want |
| 13 # to have some base (e.g. .gkrellm2/user_config) | 13 # to have some base (e.g. .gkrellm2/user_config) |
| 14 # - scp k0s.org:~/web/sync.ini ~/.silvermirror | |
| 15 # - make idempotent | |
| 14 | 16 |
| 15 # imports | 17 # imports |
| 16 import imp | 18 import imp |
| 17 import optparse | 19 import optparse |
| 18 import os | 20 import os |
| 21 | 23 |
| 22 # globals | 24 # globals |
| 23 SRC = 'http://k0s.org/hg/config' # config repository | 25 SRC = 'http://k0s.org/hg/config' # config repository |
| 24 HOME = os.environ['HOME'] # home directory | 26 HOME = os.environ['HOME'] # home directory |
| 25 | 27 |
| 28 | |
| 26 ### standalone functions | 29 ### standalone functions |
| 30 | |
| 31 def class_mapping(_type): | |
| 32 """returns a dict of (name, class) for objects in the current globals() of _type""" | |
| 33 return {name:cls for name, cls in globals().items() if cls.issubclass(_type)} | |
| 34 | |
| 27 | 35 |
| 28 def execute(*commands, **kwargs): | 36 def execute(*commands, **kwargs): |
| 29 """execute a series of commands""" | 37 """execute a series of commands""" |
| 30 for command in commands: | 38 for command in commands: |
| 31 print (subprocess.list2cmdline(' '.join(command)) | 39 print (subprocess.list2cmdline(' '.join(command))) |
| 32 code = subprocess.call(command, **kwargs) | 40 code = subprocess.call(command, **kwargs) |
| 41 if code: | |
| 42 raise subprocess.CalledProcessError(code, command) | |
| 33 | 43 |
| 34 def install_develop(package): | 44 def install_develop(package): |
| 35 """install k0s.ware for development""" | 45 """install k0s.ware for development""" |
| 36 | 46 |
| 37 src = 'http://k0s.org/hg/%s' % package | 47 src = 'http://k0s.org/hg/%s' % package |
| 44 os.chdir(directory) | 54 os.chdir(directory) |
| 45 command = ['../../bin/python', 'setup.py', 'develop'] | 55 command = ['../../bin/python', 'setup.py', 'develop'] |
| 46 execute(command) | 56 execute(command) |
| 47 os.chdir(old_directory) | 57 os.chdir(old_directory) |
| 48 | 58 |
| 59 | |
| 49 ### generic step framework | 60 ### generic step framework |
| 50 | |
| 51 | |
| 52 | 61 |
| 53 class Step(object): | 62 class Step(object): |
| 54 @classmethod | 63 @classmethod |
| 55 def check(cls): | 64 def check(cls): |
| 56 """checks if the step may be run""" | 65 """checks if the step may be run""" |
| 169 help="display debian packages to install") | 178 help="display debian packages to install") |
| 170 parser.add_option('-l', '--list', '--list-steps', | 179 parser.add_option('-l', '--list', '--list-steps', |
| 171 dest='list_steps', | 180 dest='list_steps', |
| 172 action='store_true', default=False, | 181 action='store_true', default=False, |
| 173 help="list steps to be run and exit") | 182 help="list steps to be run and exit") |
| 183 parser.add_option('--all', dest='all', | |
| 184 action='store_true', default=False, | |
| 185 help="list all actions") | |
| 186 parser.add_option('--run', dest='run', | |
| 187 action='append', | |
| 188 help="run particular actions, in order") | |
| 174 options, args = parser.parse_args() | 189 options, args = parser.parse_args() |
| 175 | 190 |
| 176 # plan steps | 191 # plan steps |
| 177 steps = [InitializeRepository, DebianPackages] | 192 steps = [InitializeRepository, DebianPackages] |
| 178 if options.debian_packages: | 193 if options.debian_packages: |
| 182 # list steps if specified | 197 # list steps if specified |
| 183 for step in steps: | 198 for step in steps: |
| 184 print(step.name()) | 199 print(step.name()) |
| 185 parser.exit() | 200 parser.exit() |
| 186 | 201 |
| 202 if options.all: | |
| 203 # list available steps | |
| 204 for sorted([]): | |
| 205 raise NotImplementedError("TODO") | |
| 206 | |
| 187 # execute steps | 207 # execute steps |
| 188 for step in steps: | 208 for step in steps: |
| 189 instance = step() | 209 instance = step() |
| 190 instance() | 210 instance() |
| 191 | 211 |
