コード例 #1
0
ファイル: test_options.py プロジェクト: VDBWRAIR/pyjip
def test_list_option_rendering():
    o = Option("test", nargs="*")
    o.value = ["A", "B"]
    from jip.templates import render_template

    assert render_template("${o}", o=o) == "A B"
    assert render_template("${o|join(',')}", o=o) == "A,B"
コード例 #2
0
def test_render_boolean_option():
    @jip.tool("simple")
    class SimpleTool(object):
        """\
        Test tool
        Usage:
            tool [-t]
        Options:
            -t   A bool option
        """
        pass
    tool = jip.find("simple")
    assert render_template("${t|arg}", tool=tool, test="1") == ""
    tool.parse_args(['-t'])
    assert render_template("${t|arg}", tool=tool, test="1") == "-t"
コード例 #3
0
def test_render_boolean_option():
    @jip.tool("simple")
    class SimpleTool(object):
        """\
        Test tool
        Usage:
            tool [-t]
        Options:
            -t   A bool option
        """
        pass

    tool = jip.find("simple")
    assert render_template("${t|arg}", tool=tool, test="1") == ""
    tool.parse_args(['-t'])
    assert render_template("${t|arg}", tool=tool, test="1") == "-t"
コード例 #4
0
def test_render_value_option():
    @jip.tool("simple")
    class SimpleTool(object):
        """\
        Test tool
        Usage:
            tool [-t <in>]
        Options:
            -t <in>  A value option
        """
        pass
    tool = jip.find("simple")
    tool.parse_args(["-t", "infile"])
    assert render_template("${t|arg}", tool=tool, test="1") == "-t infile"
    assert render_template("${t|arg('-o ')}",
                           tool=tool, test="1") == "-o infile"
コード例 #5
0
ファイル: profiles.py プロジェクト: heathsc/pyjip
 def _render(self, job, name):
     ctx = {}
     for o in job.tool.options:
         ctx[o.name] = o
     ctx['name'] = self.name
     ctx['job'] = self
     return render_template(
         "%s%s" % ("" if not self.prefix else self.prefix, name), **ctx)
コード例 #6
0
def test_render_value_option():
    @jip.tool("simple")
    class SimpleTool(object):
        """\
        Test tool
        Usage:
            tool [-t <in>]
        Options:
            -t <in>  A value option
        """
        pass

    tool = jip.find("simple")
    tool.parse_args(["-t", "infile"])
    assert render_template("${t|arg}", tool=tool, test="1") == "-t infile"
    assert render_template("${t|arg('-o ')}", tool=tool,
                           test="1") == "-o infile"
コード例 #7
0
ファイル: profiles.py プロジェクト: Poshi/pyjip
 def _render(self, job, name):
     ctx = {}
     for o in job.tool.options:
         ctx[o.name] = o
     ctx['name'] = self.name
     ctx['job'] = self
     return render_template(
         "%s%s" % ("" if not self.prefix else self.prefix, name), **ctx
     )
コード例 #8
0
ファイル: profiles.py プロジェクト: heathsc/pyjip
 def _render_job_name(self, job):
     ctx = {}
     for o in job.tool.options:
         ctx[o.name] = o
     name = job.name
     if not name:
         name = self.name
     if not name:
         name = job.tool.name
     return render_template(
         "%s%s" % ("" if not self.prefix else self.prefix, name), **ctx)
コード例 #9
0
ファイル: profiles.py プロジェクト: Poshi/pyjip
 def _render_job_name(self, job):
     ctx = {}
     for o in job.tool.options:
         ctx[o.name] = o
     name = job.name
     if not name:
         name = self.name
     if not name:
         name = job.tool.name
     return render_template(
         "%s%s" % ("" if not self.prefix else self.prefix, name), **ctx
     )
コード例 #10
0
ファイル: profiles.py プロジェクト: heathsc/pyjip
    def apply_overwrite(self, job):
        """Apply the profile and overwrite all settings that are set
        in this profile
        """
        log.debug("Profiles | Overwriting job profile to %s", job)

        if self.name:
            job.name = self._render_job_name(job)
        if self.threads:
            job.threads = int(self.threads)
        if self.nodes is not None:
            job.nodes = self.nodes
        if self.tasks is not None:
            job.tasks = self.tasks
        if self.tasks_per_node is not None:
            job.tasks_per_node = self.tasks_per_node
        if self.environment is not None:
            job.environment = self.environment
        if self.queue is not None:
            job.queue = self.queue
        if self.priority is not None:
            job.priority = self.priority
        if self.time is not None:
            job.max_time = jip.utils.parse_time(self.time)
        if self.mem is not None:
            job.max_memory = jip.utils.parse_mem(self.mem)
        if self.log is not None:
            job.stderr = self._render(job, self.log)
        if self.out is not None:
            job.stdout = self._render(job, self.out)
        if self.account is not None:
            job.account = self.account
        if self.temp is not None:
            job.temp = self.temp
        if self.extra is not None:
            job.extra = self.extra
        if self.working_dir is not None:
            job.working_directory = os.path.abspath(self.working_dir)

        # make log files absolute
        if job.stdout and not job.stdout.startswith("/"):
            job.stdout = os.path.join(job.working_directory, job.stdout)
        if job.stderr and not job.stderr.startswith("/"):
            job.stderr = os.path.join(job.working_directory, job.stderr)

        # load environment
        if self.env:
            current = os.environ.copy()
            if job.env:
                current.update(job.env)
            rendered = {}
            for k, v in iteritems(self.env):
                rendered[k] = render_template(v, **current)
            job.env.update(rendered)

        if hasattr(job, 'pipe_to'):
            for child in job.pipe_to:
                self.apply_overwrite(child)
        # check specs
        for spec_name, spec in iteritems(self.specs):
            if fnmatch.fnmatch(job.name, spec_name):
                spec.apply_overwrite(job)
コード例 #11
0
ファイル: profiles.py プロジェクト: heathsc/pyjip
 def __init__(self,
              name=None,
              threads=None,
              nodes=None,
              tasks=None,
              tasks_per_node=None,
              environment=None,
              time=None,
              queue=None,
              priority=None,
              log=None,
              out=None,
              account=None,
              mem=0,
              extra=None,
              profile=None,
              prefix=None,
              temp=False,
              _load=True,
              env=None,
              tool_name=None,
              working_dir=None,
              description=None,
              specs=None,
              _name=None,
              **kwargs):
     self._name = name if not _name else _name  # render_template(name)
     self.environment = render_template(environment)
     self.nodes = render_template(nodes)
     self.threads = render_template(threads)
     self.tasks = render_template(tasks)
     self.tasks_per_node = render_template(tasks_per_node)
     self.profile = render_template(profile)
     self.queue = render_template(queue)
     self.time = render_template(time)
     self.mem = render_template(mem)
     self.priority = render_template(priority)
     self.log = log
     self.out = out
     self.account = render_template(account)
     self.prefix = render_template(prefix)
     self.description = description
     self.env = env
     self.temp = temp
     self.extra = extra
     self.tool_name = tool_name
     self.working_dir = working_dir
     if self.working_dir is None and kwargs.get('dir', None):
         self.working_dir = kwargs['dir']
     self.specs = specs if specs else {}
     if profile is not None and _load:
         self.load(profile)
コード例 #12
0
def test_render_variable():
    assert render_template("${test}", test="result") == "result"
コード例 #13
0
def test_render_unknonw_variable():
    assert render_template("${unknown}") == "${unknown}"
コード例 #14
0
ファイル: profiles.py プロジェクト: Poshi/pyjip
    def apply(self, job, pipeline=False, overwrite=False):
        """Apply this profile to the given job."""
        log.debug("Profiles | Applying job profile to %s", job)
        if overwrite:
            self.apply_overwrite(job)
            return

        # set the job name or the pipeline name
        # if this is a job or a pipeline
        if not pipeline:
            job.name = self._render_job_name(job)
        elif self.name is not None:
            log.info("Apply pipeline name to job: %s %s", job, self.name)
            job.pipeline = self._render(job, self.name)

        if self.threads and job.threads is None:
            job.threads = int(self.threads)
        if self.nodes is not None and job.nodes is None:
            job.nodes = self.nodes
        if self.tasks is not None and job.tasks is None:
            job.tasks = self.tasks
        if self.tasks_per_node is not None and job.tasts_per_node is None:
            job.tasks_per_node = self.tasks_per_node
        if self.environment is not None and job.environment is None:
            job.environment = self.environment
        if self.queue is not None and job.queue is None:
            job.queue = self.queue
        if self.priority is not None and job.priority is None:
            job.priority = self.priority
        if self.time is not None and job.max_time is None:
            job.max_time = jip.utils.parse_time(self.time)
        if self.mem is not None and job.max_memory is None:
            job.max_memory = jip.utils.parse_mem(self.mem)
        if self.log is not None and job.stderr is None:
            job.stderr = self._render(job, self.log)
        if self.out is not None and job.stdout is None:
            job.stdout = self._render(job, self.out)
        if self.account is not None and job.account is None:
            job.account = self.account
        if self.temp is not None and job.temp is None:
            job.temp = self.temp
        if self.extra is not None and job.extra is None:
            job.extra = self.extra
        if self.working_dir is not None and job.working_directory is None:
            job.working_directory = os.path.abspath(self.working_dir)

        # make log files absolute
        if job.stdout and not job.stdout.startswith("/"):
            job.stdout = os.path.join(job.working_directory, job.stdout)
        if job.stderr and not job.stderr.startswith("/"):
            job.stderr = os.path.join(job.working_directory, job.stderr)

        # load environment
        if self.env:
            current = os.environ.copy()
            if job.env:
                current.update(job.env)
            rendered = {}
            for k, v in self.env.iteritems():
                rendered[k] = render_template(v, **current)
            job.env.update(rendered)

        if hasattr(job, 'pipe_to'):
            for child in job.pipe_to:
                self.apply(child)
コード例 #15
0
ファイル: profiles.py プロジェクト: Poshi/pyjip
    def apply_overwrite(self, job):
        """Apply the profile and overwrite all settings that are set
        in this profile
        """
        log.debug("Profiles | Overwriting job profile to %s", job)

        if self.name:
            job.name = self._render_job_name(job)
        if self.threads:
            job.threads = int(self.threads)
        if self.nodes is not None:
            job.nodes = self.nodes
        if self.tasks is not None:
            job.tasks = self.tasks
        if self.tasks_per_node is not None:
            job.tasks_per_node = self.tasks_per_node
        if self.environment is not None:
            job.environment = self.environment
        if self.queue is not None:
            job.queue = self.queue
        if self.priority is not None:
            job.priority = self.priority
        if self.time is not None:
            job.max_time = jip.utils.parse_time(self.time)
        if self.mem is not None:
            job.max_memory = jip.utils.parse_mem(self.mem)
        if self.log is not None:
            job.stderr = self._render(job, self.log)
        if self.out is not None:
            job.stdout = self._render(job, self.out)
        if self.account is not None:
            job.account = self.account
        if self.temp is not None:
            job.temp = self.temp
        if self.extra is not None:
            job.extra = self.extra
        if self.working_dir is not None:
            job.working_directory = os.path.abspath(self.working_dir)

        # make log files absolute
        if job.stdout and not job.stdout.startswith("/"):
            job.stdout = os.path.join(job.working_directory, job.stdout)
        if job.stderr and not job.stderr.startswith("/"):
            job.stderr = os.path.join(job.working_directory, job.stderr)

        # load environment
        if self.env:
            current = os.environ.copy()
            if job.env:
                current.update(job.env)
            rendered = {}
            for k, v in self.env.iteritems():
                rendered[k] = render_template(v, **current)
            job.env.update(rendered)

        if hasattr(job, 'pipe_to'):
            for child in job.pipe_to:
                self.apply_overwrite(child)
        # check specs
        for spec_name, spec in self.specs.iteritems():
            if fnmatch.fnmatch(job.name, spec_name):
                spec.apply_overwrite(job)
コード例 #16
0
ファイル: profiles.py プロジェクト: heathsc/pyjip
    def apply(self, job, pipeline=False, overwrite=False):
        """Apply this profile to the given job."""
        log.debug("Profiles | Applying job profile to %s", job)
        if overwrite:
            self.apply_overwrite(job)
            return

        # set the job name or the pipeline name
        # if this is a job or a pipeline
        if not pipeline:
            job.name = self._render_job_name(job)
        elif self.name is not None:
            log.info("Apply pipeline name to job: %s %s", job, self.name)
            job.pipeline = self._render(job, self.name)

        if self.threads and job.threads is None:
            job.threads = int(self.threads)
        if self.nodes is not None and job.nodes is None:
            job.nodes = self.nodes
        if self.tasks is not None and job.tasks is None:
            job.tasks = self.tasks
        if self.tasks_per_node is not None and job.tasts_per_node is None:
            job.tasks_per_node = self.tasks_per_node
        if self.environment is not None and job.environment is None:
            job.environment = self.environment
        if self.queue is not None and job.queue is None:
            job.queue = self.queue
        if self.priority is not None and job.priority is None:
            job.priority = self.priority
        if self.time is not None and job.max_time is None:
            job.max_time = jip.utils.parse_time(self.time)
        if self.mem is not None:
            if job.max_memory is None:
                job.max_memory = 0
            job.max_memory += jip.utils.parse_mem(self.mem)
        if self.log is not None and job.stderr is None:
            job.stderr = self._render(job, self.log)
        if self.out is not None and job.stdout is None:
            job.stdout = self._render(job, self.out)
        if self.account is not None and job.account is None:
            job.account = self.account
        if self.temp is not None and job.temp is None:
            job.temp = self.temp
        if self.extra is not None and job.extra is None:
            job.extra = self.extra
        if self.working_dir is not None and job.working_directory is None:
            job.working_directory = os.path.abspath(self.working_dir)

        # make log files absolute
        if job.stdout and not job.stdout.startswith("/"):
            job.stdout = os.path.join(job.working_directory, job.stdout)
        if job.stderr and not job.stderr.startswith("/"):
            job.stderr = os.path.join(job.working_directory, job.stderr)

        # load environment
        if self.env:
            current = os.environ.copy()
            if job.env:
                current.update(job.env)
            rendered = {}
            for k, v in iteritems(self.env):
                rendered[k] = render_template(v, **current)
            job.env.update(rendered)

        if hasattr(job, 'pipe_to'):
            for child in job.pipe_to:
                self.apply(child)
コード例 #17
0
def test_render_unknonw_variable():
    assert render_template("${unknown}") == "${unknown}"
コード例 #18
0
def test_ext_filter():
    assert render_template('${f|ext}', f='my.file.txt') == 'my.file'
    assert render_template('${f|ext(all=True)}', f='my.file.txt') == 'my'
コード例 #19
0
def test_render_variable():
    assert render_template("${test}", test="result") == "result"
コード例 #20
0
def test_list_option_rendering():
    o = Option('test', nargs="*")
    o.value = ["A", "B"]
    from jip.templates import render_template
    assert render_template("${o}", o=o) == 'A B'
    assert render_template("${o|join(',')}", o=o) == 'A,B'
コード例 #21
0
def test_ext_filter():
    assert render_template('${f|ext}', f='my.file.txt') == 'my.file'
    assert render_template('${f|ext(all=True)}', f='my.file.txt') == 'my'
コード例 #22
0
ファイル: profiles.py プロジェクト: Poshi/pyjip
 def __init__(self, name=None, threads=None, nodes=None, tasks=None,
              tasks_per_node=None, environment=None, time=None, queue=None,
              priority=None, log=None, out=None, account=None, mem=0,
              extra=None, profile=None, prefix=None, temp=False, _load=True,
              env=None, tool_name=None, working_dir=None, description=None,
              specs=None, _name=None, **kwargs):
     self._name = name if not _name else _name  # render_template(name)
     self.environment = render_template(environment)
     self.nodes = render_template(nodes)
     self.threads = render_template(threads)
     self.tasks = render_template(tasks)
     self.tasks_per_node = render_template(tasks_per_node)
     self.profile = render_template(profile)
     self.queue = render_template(queue)
     self.time = render_template(time)
     self.mem = render_template(mem)
     self.priority = render_template(priority)
     self.log = log
     self.out = out
     self.account = render_template(account)
     self.prefix = render_template(prefix)
     self.description = description
     self.env = env
     self.temp = temp
     self.extra = extra
     self.tool_name = tool_name
     self.working_dir = working_dir
     if self.working_dir is None and kwargs.get('dir', None):
         self.working_dir = kwargs['dir']
     self.specs = specs if specs else {}
     if profile is not None and _load:
         self.load(profile)