Source code for lexor.command.dist

"""Distribute

Package a style along with auxiliary and test files.

"""

import os
import textwrap
import glob
from glob import iglob
from imp import load_source
from zipfile import ZipFile
from lexor.command import error, warn
from lexor.command import config

DEFAULTS = {
    'path': '.'
}

DESC = """
Distribute a style along with auxiliary and test files.

"""


[docs]def style_completer(parsed_args, **_): """Return a list of valid files to edit.""" config.CONFIG['arg'] = parsed_args cfg = config.get_cfg('dist', DEFAULTS) root = cfg['lexor']['root'] path = cfg['dist']['path'] choices = [] if path[0] in ['/', '.']: abspath = path else: abspath = '%s/%s' % (root, path) try: if abspath == '.': choices.extend(glob.glob('*.py')) else: choices.extend(glob.glob('%s/*.py' % abspath)) except OSError: pass return choices
[docs]def add_parser(subp, fclass): """Add a parser to the main subparser. """ tmpp = subp.add_parser('dist', help='distribute a style', formatter_class=fclass, description=textwrap.dedent(DESC)) tmpp.add_argument('style', type=str, help='name of style to distribute' ).completer = style_completer tmpp.add_argument('--path', type=str, help='distribution directory')
[docs]def run(): """Run the command. """ arg = config.CONFIG['arg'] cfg = config.get_cfg('dist', DEFAULTS) root = cfg['lexor']['root'] path = cfg['dist']['path'] style = arg.style if path[0] in ['/', '.']: dirpath = path else: dirpath = '%s/%s' % (root, path) if '.py' not in style: style = '%s.py' % style if not os.path.exists(style): error("ERROR: No such file or directory.\n") moddir = os.path.splitext(style)[0] base, name = os.path.split(moddir) if base == '': base = '.' mod = load_source('tmp_name', style) info = mod.INFO if info['to_lang']: filename = '%s/lexor.%s.%s.%s.%s-%s.zip' filename = filename % (dirpath, info['lang'], info['type'], info['to_lang'], info['style'], info['ver']) else: filename = '%s/lexor.%s.%s.%s-%s.zip' filename = filename % (dirpath, info['lang'], info['type'], info['style'], info['ver']) warn('Writing %s ...\n' % filename) zipf = ZipFile(filename, 'w') warn(' including %s\n' % style) zipf.write(style) for path in iglob('%s/*.py' % moddir): warn(' including %s\n' % path) zipf.write(path) for path in iglob('%s/test_%s/*.py' % (base, name)): warn(' including %s\n' % path) zipf.write(path) zipf.close()