def process_license(name, data): ORIGIN_NAME = name log.info('license', color.cyan(ORIGIN_NAME)) # reset the name name = name.lower() if name == 'bsd': name = 'bsd3' elif name == 'gpl': name = 'gpl3' if 'organization' not in data: username = os.environ.get('USER') or os.environ.get('USERNAME') user = data.get('user', username) if user: data['organization'] = user if 'year' not in data: data['year'] = str(datetime.datetime.utcnow().year) if 'project' not in data and 'name' in data: data['project'] = data['name'] content = license.parse(name, **data) if not content: return log.warn('license not found', color.cyan(ORIGIN_NAME)) f = open('LICENSE', 'w') f.write(content) f.close()
def process_write(rootdir, data): log.info('templates from', color.cyan(rootdir)) for root, dirs, files in os.walk(rootdir): for filename in files: filepath = os.path.join(root, filename) dest = os.path.relpath(filepath, rootdir) log.verbose.info('writing', color.cyan(dest)) t = Template(filepath=filepath) t.write(dest, **data)
def install(name): """ Install or update a template from Git repo. """ folder = os.path.join(TEMPLATE_DIR, name) if os.path.exists(folder): origin = git.origin(folder) if not origin: raise RuntimeError('%s has no origin remote' % name) log.info('git pull', color.cyan(origin)) return git.pull(cwd=folder) url = _url(name) log.info('git clone', color.cyan(url)) return git.clone(url, folder)
def process_rename(renames, data): if not renames: return c = color.cyan for k, v in renames.items(): t = Template(v) v = t.render(**data) if '{{' in v: log.error('error renaming', c(k), 'to', c(v)) elif os.path.exists(v): log.warn('rewriting', c(v)) shutil.rmtree(v) shutil.move(k, v) else: log.info('renaming', c(k), 'to', c(v)) shutil.move(k, v)
def test_log(): log.info('hello test') log.start('start a level') log.info('info in a level') log.warn('warn in a level') log.error('error in a level') log.debug('debug info') log.verbose.info('will not print this') log.config(verbose=True) log.verbose.info('will print this') log.start('start second level') log.verbose.debug('hello debug') log.end() log.config(quiet=True) log.info('will not print') log.end('close a level') log.message('foo', 'bar')
from terminal.builtin import log log.start('terminal build') log.info('build foo') log.debug('read file foo.py') log.warn('not found foo.py') log.info('build bar') log.debug('read file bar.py') log.start('sub read') log.info('parse bar.py') log.info('bar is python') log.end('parse end') log.error('syntax error') log.end('end build')
from terminal.builtin import log log.start("terminal build") log.info("build foo") log.debug("read file foo.py") log.warn("not found foo.py") log.info("build bar") log.debug("read file bar.py") log.start("sub read") log.info("parse bar.py") log.info("bar is python") log.end("parse end") log.error("syntax error") log.end("end build")
def init(name): """ The main interface for this program. Define a template yourself, the folder structure of a template:: template.py config.json (optional) root/ In your ``template.py``, define a ``prompt`` function to collect information:: def main(): # prompt for user, and get data from user # return data """ folder = os.path.join(TEMPLATE_DIR, name) if not os.path.exists(folder): install(name) log.info('loading', color.cyan(name)) template = None for name in ['template.yml', 'template.yaml', 'template']: template = os.path.join(folder, name) if os.path.exists(template): break if not template: log.error('template not found.') return config = _get_config(template) if 'register' in config and os.path.exists(config['register']): q = confirm( 'This is not an empty directory, do you want to rewrite it') if not q: return sys.exit(2) # a blank line for seprating the logs and prompts print('') data = process_prompts(config) print('') # write from templates process_write(os.path.join(folder, 'root'), data) # create license if 'license' in data: process_license(data['license'], data) process_rename(config.get('rename', {}), data) footer = config.get('footer') if isinstance(footer, (list, tuple)): footer = '\n'.join(footer) if footer: print('\n%s\n' % footer) return