Skip to content

Instantly share code, notes, and snippets.

@podhmo
Created March 11, 2015 15:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save podhmo/67c54ef42101764bf47e to your computer and use it in GitHub Desktop.
Save podhmo/67c54ef42101764bf47e to your computer and use it in GitHub Desktop.
import sys
import logging
from os.path import(
exists,
join
)
from os import(
mkdir
)
import sys
class AskStringCache(object):
prompt = "{varname} ({description})[{default!r}]:"
def __init__(self, inp=sys.stdin, err=sys.stderr):
self.description_map = {}
self.default_map = {}
self.cache = {}
self.inp = inp
self.err = err
self.hooks = []
def __getitem__(self, name):
try:
return self.cache[name]
except KeyError:
return self.load(name)
def load(self, name):
description = self.description_map.get(name, "")
default = self.default_map.get(name)
self.err.write(self.prompt.format(varname=name, description=description, default=default))
self.err.flush()
value = self.inp.readline().rstrip() or self.default_map.get(name, "")
self.cache[name] = value
return value
def add_description(self, name, description):
self.description_map[name] = description
def add_default(self, name, default):
self.default_map[name] = default
_ask_string_cache = AskStringCache()
def get_ask_string_cache():
global _ask_string_cache
return _ask_string_cache
def set_ask_string_cache(cache):
global _ask_string_cache
_ask_string_cache = cache
class AskString(object):
def __init__(self, name, description=None, default=None, cache=None):
self.cache = cache or get_ask_string_cache()
self.name = name
if description is not None:
self.cache.add_description(name, description)
if default is not None:
self.cache.add_default(name, default)
def __str__(self):
return self.cache[self.name]
_G0 = AskString('yourname', description='what is your name', default='foo')
logger = logging.getLogger(__name__)
def gen(rootpath):
file0 = join(rootpath, '').replace('<<_G0>>', str(_G0))
file1 = join(rootpath, 'greeting').replace('<<_G0>>', str(_G0))
file2 = join(rootpath, 'greeting/hello.txt').replace('<<_G0>>', str(_G0))
val0 = '''<<_G0>>: hello.'''.replace('<<_G0>>', str(_G0))
file3 = join(rootpath, 'greeting/bye.txt').replace('<<_G0>>', str(_G0))
val1 = '''<<_G0>>: bye.'''.replace('<<_G0>>', str(_G0))
file4 = join(rootpath, 'greeting/is_angry.txt').replace('<<_G0>>', str(_G0))
val2 = '''<<_G0>>: HEY!'''.replace('<<_G0>>', str(_G0))
if not (exists(file0)):
logger.info('[d] create: %s', file0)
mkdir(file0)
if not (exists(file1)):
logger.info('[d] create: %s', file1)
mkdir(file1)
logger.info('[f] create: %s', file2)
with open(file2, 'w') as wf:
wf.write(val0)
logger.info('[f] create: %s', file3)
with open(file3, 'w') as wf:
wf.write(val1)
logger.info('[f] create: %s', file4)
with open(file4, 'w') as wf:
wf.write(val2)
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO)
gen(sys.argv[1])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment