mirror of
https://github.com/kennethreitz-archive/plac.git
synced 2026-06-16 21:50:58 +00:00
55 lines
1.8 KiB
Python
55 lines
1.8 KiB
Python
# ishelve.py
|
|
import os, shelve, plac
|
|
|
|
DEFAULT_SHELVE = os.path.expanduser('~/conf.shelve')
|
|
|
|
@plac.annotations(
|
|
help=('show help', 'flag'),
|
|
showall=('show all parameters in the shelve', 'flag'),
|
|
clear=('clear the shelve', 'flag'),
|
|
delete=('delete an element', 'option'),
|
|
filename=('filename of the shelve', 'option'),
|
|
params='names of the parameters in the shelve',
|
|
setters='setters param=value')
|
|
def main(help, showall, clear, delete, filename=DEFAULT_SHELVE,
|
|
*params, **setters):
|
|
"A simple interface to a shelve. Use .help to see the available commands."
|
|
sh = shelve.open(filename)
|
|
try:
|
|
if not any([help, showall, clear, delete, params, setters]):
|
|
yield 'no arguments passed, use .help to see the available commands'
|
|
elif help: # custom help
|
|
yield 'Commands: .help, .showall, .clear, .delete'
|
|
yield '<param> ...'
|
|
yield '<param=value> ...'
|
|
elif showall:
|
|
for param, name in sh.items():
|
|
yield '%s=%s' % (param, name)
|
|
elif clear:
|
|
sh.clear()
|
|
yield 'cleared the shelve'
|
|
elif delete:
|
|
try:
|
|
del sh[delete]
|
|
except KeyError:
|
|
yield '%s: not found' % delete
|
|
else:
|
|
yield 'deleted %s' % delete
|
|
for param in params:
|
|
try:
|
|
yield sh[param]
|
|
except KeyError:
|
|
yield '%s: not found' % param
|
|
for param, value in setters.items():
|
|
sh[param] = value
|
|
yield 'setting %s=%s' % (param, value)
|
|
finally:
|
|
sh.close()
|
|
|
|
main.add_help = False # there is a custom help, remove the default one
|
|
main.prefix_chars = '.' # use dot-prefixed commands
|
|
|
|
if __name__ == '__main__':
|
|
for output in plac.call(main):
|
|
print(output)
|