def test_task_with_distutils_dep(): _sdist.reset() @tasks.task @tasks.needs("paver.tests.test_setuputils.sdist") def sdist(): assert _sdist.called env = _set_environment(sdist=sdist) env.options = options.Bunch(setup=options.Bunch()) install_distutils_tasks() d = _get_distribution() d.cmdclass['sdist'] = _sdist task_obj = env.get_task('sdist') assert task_obj == sdist needs_obj = env.get_task(task_obj.needs[0]) assert isinstance(needs_obj, DistutilsTask) assert needs_obj.command_class == _sdist tasks._process_commands(['sdist', "-f"]) assert sdist.called assert _sdist.called cmd = d.get_command_obj('sdist') print_("Cmd is: %s" % cmd) assert cmd.foo assert _sdist.foo_set
def _launch_pavement(args): mod = types.ModuleType("pavement") environment.pavement = mod if not exists(environment.pavement_file): environment.pavement_file = None six.exec_("from paver.easy import *\n", mod.__dict__) _process_commands(args) return mod.__file__ = environment.pavement_file try: pf = open(environment.pavement_file) try: source = pf.read() finally: pf.close() exec(compile(source, environment.pavement_file, "exec"), mod.__dict__) auto_task = getattr(mod, "auto", None) auto_pending = isinstance(auto_task, Task) from paver.misctasks import generate_setup, minilib resident_tasks = {"help": help, "generate_setup": generate_setup, "minilib": minilib} mod.__dict__.update(resident_tasks) _process_commands(args, auto_pending=auto_pending) except PavementError: e = sys.exc_info()[1] # this is hacky, but it is needed if problem would occur within # argument parsing, which is actually quite common if getattr(environment.options, "propagate_traceback", False) or "--propagate-traceback" in args: raise print_("\n\n*** Problem with pavement:\n%s\n%s\n\n" % (abspath(environment.pavement_file), e))
def test_cogging_with_markers_removed(): if not paver.doctools.has_cog: raise SkipTest("Cog must be installed for this test") _no25() env = tasks.Environment(doctools) tasks.environment = env opt = env.options opt.cog = Bunch() basedir = path(__file__).dirname() opt.cog.basedir = basedir opt.cog.pattern = "*.rst" opt.cog.includedir = basedir / "data" opt.cog.delete_code = True env.options = opt textfile = basedir / "data/textfile.rst" with open(textfile) as f: original_data = f.read() try: doctools.cog() with open(textfile) as f: data = f.read() print_(data) assert "[[[cog" not in data finally: with open(textfile, "w") as f: f.write(original_data)
def display_help(self, parser=None): if not parser: parser = self.parser for opt_str in parser.options_to_hide_from_help: try: parser.remove_option(opt_str) except ValueError: environment.error("Option %s added for hiding, but it's not in parser...?" % opt_str) name = self.name print_("\n%s" % name) print_("-" * len(name)) parser.print_help() print_() print_(self.__doc__) print_()
def test_basic_command_line(): @tasks.task def t1(): pass _set_environment(t1=t1) try: tr, args = tasks._parse_command_line(['foo']) print_(tr) assert False, "Expected BuildFailure exception for unknown task" except tasks.BuildFailure: pass task, args = tasks._parse_command_line(['t1']) assert task == t1 task, args = tasks._parse_command_line(['t1', 't2']) assert task == t1 assert args == ['t2']
def test_cogging(): _no25() env = tasks.Environment(doctools) tasks.environment = env opt = env.options opt.cog = options.Bunch() basedir = path(__file__).dirname() opt.cog.basedir = basedir opt.cog.pattern = "*.rst" opt.cog.includedir = basedir / "data" env.options = opt doctools.cog() textfile = basedir / "data/textfile.rst" with open(textfile) as f: data = f.read() print_(data) assert "print sys.path" in data doctools.uncog() with open(textfile) as f: data = f.read() assert "print sys.path" not in data
def help(args, help_function): """This help display.""" if args: task_name = args[0] task = environment.get_task(task_name) if not task: print_("Task not found: %s" % (task_name)) return task.display_help() return help_function() task_list = environment.get_tasks() if six.PY3: task_list = sorted(task_list, key=_task_names_key) else: task_list = sorted(task_list, cmp=_cmp_task_names) maxlen, task_list = _group_by_module(task_list) fmt = " %-" + str(maxlen) + "s - %s" for group_name, group in task_list: print_("\nTasks from %s:" % (group_name)) for task in group: if not getattr(task, "no_help", False): print_(fmt % (task.shortname, task.description))
def _launch_pavement(args): mod = types.ModuleType("pavement") environment.pavement = mod if not exists(environment.pavement_file): environment.pavement_file = None six.exec_("from paver.easy import *\n", mod.__dict__) _process_commands(args) return mod.__file__ = environment.pavement_file try: pf = open(environment.pavement_file) try: source = pf.read() finally: pf.close() exec(compile(source, environment.pavement_file, 'exec'), mod.__dict__) auto_task = getattr(mod, 'auto', None) auto_pending = isinstance(auto_task, Task) from paver.misctasks import generate_setup, minilib resident_tasks = { 'help': help, 'generate_setup': generate_setup, 'minilib': minilib, } mod.__dict__.update(resident_tasks) _process_commands(args, auto_pending=auto_pending) except PavementError: e = sys.exc_info()[1] # this is hacky, but it is needed if problem would occur within # argument parsing, which is actually quite common if getattr(environment.options, "propagate_traceback", False) \ or '--propagate-traceback' in args: raise print_("\n\n*** Problem with pavement:\n%s\n%s\n\n" % (abspath(environment.pavement_file), e))
def test_cogging(): if not paver.doctools.has_cog: raise SkipTest("Cog must be installed for this test") _no25() env = tasks.Environment(doctools) tasks.environment = env opt = env.options opt.cog = options.Bunch() basedir = path(__file__).dirname() opt.cog.basedir = basedir opt.cog.pattern = "*.rst" opt.cog.includedir = basedir / "data" env.options = opt doctools.cog() textfile = basedir / "data/textfile.rst" with open(textfile) as f: data = f.read() print_(data) assert "print sys.path" in data doctools.uncog() with open(textfile) as f: data = f.read() assert "print sys.path" not in data
def _print(self, output): print_(output) sys.stdout.flush()
def _print(self, output): # todo: colored output.. print_(output) sys.stdout.flush()
def test_consume_nargs(): # consume all args on first task @tasks.task @tasks.consume_nargs() def t11(options): assert options.args == ["1", "t12", "3"] @tasks.task def t12(options): assert False, ("Should not have run t12 because of previous " "consume_nargs()") env = _set_environment(t11=t11, t12=t12) tasks._process_commands("t11 1 t12 3".split()) assert t11.called # consume some args (specified numbers) on first and second task @tasks.task @tasks.consume_nargs(2) def t21(options): assert options.args == ["1", "2"] @tasks.task @tasks.consume_nargs(3) def t22(options): assert options.args == ["3", "4", "5"] env = _set_environment(t21=t21, t22=t22) tasks._process_commands("t21 1 2 t22 3 4 5".split()) assert t21.called assert t22.called # not enougth args consumable on called task, and other task not called env = _set_environment(t21=t21, t12=t12) try: tr, args = tasks._parse_command_line("t21 t12".split()) print_(tr) assert False, "Expected BuildFailure exception for not enougth args" except tasks.BuildFailure: pass # too much args passed, and unconsumed args are not tasks tr, args = tasks._parse_command_line("t21 1 2 3 4 5".split()) assert args == ["3", "4", "5"] # consume some args (specified numbers) on first and all other on second task @tasks.task @tasks.consume_nargs(2) def t31(options): assert options.args == ["1", "2"] @tasks.task @tasks.consume_nargs() def t32(options): assert options.args == ["3", "4", "t33", "5"] @tasks.task @tasks.consume_nargs() def t33(options): assert False, ("Should not have run t33 because of previous " "consume_nargs()") env = _set_environment(t31=t31, t32=t32, t33=t33) tasks._process_commands("t31 1 2 t32 3 4 t33 5".split()) assert t31.called assert t32.called
def find_package_data( where='.', package='', exclude=standard_exclude, exclude_directories=standard_exclude_directories, only_in_packages=True, show_ignored=False): """ Return a dictionary suitable for use in ``package_data`` in a distutils ``setup.py`` file. The dictionary looks like:: {'package': [files]} Where ``files`` is a list of all the files in that package that don't match anything in ``exclude``. If ``only_in_packages`` is true, then top-level directories that are not packages won't be included (but directories under packages will). Directories matching any pattern in ``exclude_directories`` will be ignored; by default directories with leading ``.``, ``CVS``, and ``_darcs`` will be ignored. If ``show_ignored`` is true, then all the files that aren't included in package data are shown on stderr (for debugging purposes). Note patterns use wildcards, or can be exact paths (including leading ``./``), and all searching is case-insensitive. This function is by Ian Bicking. """ out = {} stack = [(convert_path(where), '', package, only_in_packages)] while stack: where, prefix, package, only_in_packages = stack.pop(0) for name in os.listdir(where): fn = join(where, name) if isdir(fn): bad_name = False for pattern in exclude_directories: if (fnmatchcase(name, pattern) or fn.lower() == pattern.lower()): bad_name = True if show_ignored: print_("Directory %s ignored by pattern %s" % (fn, pattern), file=sys.stderr) break if bad_name: continue if isfile(join(fn, '__init__.py')): if not package: new_package = name else: new_package = package + '.' + name stack.append((fn, '', new_package, False)) else: stack.append((fn, prefix + name + '/', package, only_in_packages)) elif package or not only_in_packages: # is a file bad_name = False for pattern in exclude: if (fnmatchcase(name, pattern) or fn.lower() == pattern.lower()): bad_name = True if show_ignored: print_("File %s ignored by pattern %s" % (fn, pattern), file=sys.stderr) break if bad_name: continue out.setdefault(package, []).append(prefix+name) return out
def find_package_data(where='.', package='', exclude=standard_exclude, exclude_directories=standard_exclude_directories, only_in_packages=True, show_ignored=False): """ Return a dictionary suitable for use in ``package_data`` in a distutils ``setup.py`` file. The dictionary looks like:: {'package': [files]} Where ``files`` is a list of all the files in that package that don't match anything in ``exclude``. If ``only_in_packages`` is true, then top-level directories that are not packages won't be included (but directories under packages will). Directories matching any pattern in ``exclude_directories`` will be ignored; by default directories with leading ``.``, ``CVS``, and ``_darcs`` will be ignored. If ``show_ignored`` is true, then all the files that aren't included in package data are shown on stderr (for debugging purposes). Note patterns use wildcards, or can be exact paths (including leading ``./``), and all searching is case-insensitive. This function is by Ian Bicking. """ out = {} stack = [(convert_path(where), '', package, only_in_packages)] while stack: where, prefix, package, only_in_packages = stack.pop(0) for name in os.listdir(where): fn = join(where, name) if isdir(fn): bad_name = False for pattern in exclude_directories: if (fnmatchcase(name, pattern) or fn.lower() == pattern.lower()): bad_name = True if show_ignored: print_("Directory %s ignored by pattern %s" % (fn, pattern), file=sys.stderr) break if bad_name: continue if isfile(join(fn, '__init__.py')): if not package: new_package = name else: new_package = package + '.' + name stack.append((fn, '', new_package, False)) else: stack.append( (fn, prefix + name + '/', package, only_in_packages)) elif package or not only_in_packages: # is a file bad_name = False for pattern in exclude: if (fnmatchcase(name, pattern) or fn.lower() == pattern.lower()): bad_name = True if show_ignored: print_("File %s ignored by pattern %s" % (fn, pattern), file=sys.stderr) break if bad_name: continue out.setdefault(package, []).append(prefix + name) return out
def display(msg, *args): print_(msg % args)