此软件包为Snakemake与其执行器插件之间的交互提供稳定的接口。
项目描述
为Snakemake执行器插件提供稳定的接口和功能
此软件包为Snakemake与其执行器插件之间的交互提供稳定的接口(WIP)。
插件应实现以下骨架以符合此接口。建议使用Snakemake的poetry插件在Python包中设置此骨架(和自动化测试),请参阅https://github.com/snakemake/poetry-snakemake-plugin。
from dataclasses import dataclass, field
from typing import List, Generator, Optional
from snakemake_interface_executor_plugins.executors.base import SubmittedJobInfo
from snakemake_interface_executor_plugins.executors.remote import RemoteExecutor
from snakemake_interface_executor_plugins.settings import (
ExecutorSettingsBase, CommonSettings
)
from snakemake_interface_executor_plugins.workflow import WorkflowExecutorInterface
from snakemake_interface_executor_plugins.logging import LoggerExecutorInterface
from snakemake_interface_executor_plugins.jobs import (
JobExecutorInterface,
)
# Optional:
# Define additional settings for your executor.
# They will occur in the Snakemake CLI as --<executor-name>-<param-name>
# Omit this class if you don't need any.
# Make sure that all defined fields are Optional and specify a default value
# of None or anything else that makes sense in your case.
@dataclass
class ExecutorSettings(ExecutorSettingsBase):
myparam: Optional[int] = field(
default=None,
metadata={
"help": "Some help text",
# Optionally request that setting is also available for specification
# via an environment variable. The variable will be named automatically as
# SNAKEMAKE_<executor-name>_<param-name>, all upper case.
# This mechanism should only be used for passwords and usernames.
# For other items, we rather recommend to let people use a profile
# for setting defaults
# (https://snakemake.readthedocs.io/en/stable/executing/cli.html#profiles).
"env_var": False,
# Optionally specify a function that parses the value given by the user.
# This is useful to create complex types from the user input.
"parse_func": ...,
# If a parse_func is specified, you also have to specify an unparse_func
# that converts the parsed value back to a string.
"unparse_func": ...,
# Optionally specify that setting is required when the executor is in use.
"required": True,
# Optionally specify multiple args with "nargs": True
},
)
# Required:
# Specify common settings shared by various executors.
common_settings = CommonSettings(
# define whether your executor plugin executes locally
# or remotely. In virtually all cases, it will be remote execution
# (cluster, cloud, etc.). Only Snakemake's standard execution
# plugins (snakemake-executor-plugin-dryrun, snakemake-executor-plugin-local)
# are expected to specify False here.
non_local_exec=True,
# Whether the executor implies to not have a shared file system
implies_no_shared_fs=True,
# whether to deploy workflow sources to default storage provider before execution
job_deploy_sources=True,
# whether arguments for setting the storage provider shall be passed to jobs
pass_default_storage_provider_args=True,
# whether arguments for setting default resources shall be passed to jobs
pass_default_resources_args=True,
# whether environment variables shall be passed to jobs (if False, use
# self.envvars() to obtain a dict of environment variables and their values
# and pass them e.g. as secrets to the execution backend)
pass_envvar_declarations_to_cmd=True,
# whether the default storage provider shall be deployed before the job is run on
# the remote node. Usually set to True if the executor does not assume a shared fs
auto_deploy_default_storage_provider=True,
# specify initial amount of seconds to sleep before checking for job status
init_seconds_before_status_checks=0,
)
# Required:
# Implementation of your executor
class Executor(RemoteExecutor):
def __post_init__(self):
# access workflow
self.workflow
# access executor specific settings
self.workflow.executor_settings
# IMPORTANT: in your plugin, only access methods and properties of
# Snakemake objects (like Workflow, Persistence, etc.) that are
# defined in the interfaces found in the
# snakemake-interface-executor-plugins and the
# snakemake-interface-common package.
# Other parts of those objects are NOT guaranteed to remain
# stable across new releases.
# To ensure that the used interfaces are not changing, you should
# depend on these packages as >=a.b.c,<d with d=a+1 (i.e. pin the
# dependency on this package to be at least the version at time
# of development and less than the next major version which would
# introduce breaking changes).
# In case of errors outside of jobs, please raise a WorkflowError
def run_job(self, job: JobExecutorInterface):
# Implement here how to run a job.
# You can access the job's resources, etc.
# via the job object.
# After submitting the job, you have to call
# self.report_job_submission(job_info).
# with job_info being of type
# snakemake_interface_executor_plugins.executors.base.SubmittedJobInfo.
# If required, make sure to pass the job's id to the job_info object, as keyword
# argument 'external_job_id'.
...
async def check_active_jobs(
self, active_jobs: List[SubmittedJobInfo]
) -> Generator[SubmittedJobInfo, None, None]:
# Check the status of active jobs.
# You have to iterate over the given list active_jobs.
# If you provided it above, each will have its external_jobid set according
# to the information you provided at submission time.
# For jobs that have finished successfully, you have to call
# self.report_job_success(active_job).
# For jobs that have errored, you have to call
# self.report_job_error(active_job).
# This will also take care of providing a proper error message.
# Usually there is no need to perform additional logging here.
# Jobs that are still running have to be yielded.
#
# For queries to the remote middleware, please use
# self.status_rate_limiter like this:
#
# async with self.status_rate_limiter:
# # query remote middleware here
#
# To modify the time until the next call of this method,
# you can set self.next_sleep_seconds here.
...
def cancel_jobs(self, active_jobs: List[SubmittedJobInfo]):
# Cancel all active jobs.
# This method is called when Snakemake is interrupted.
...
项目详情
关闭
snakemake_interface_executor_plugins-9.3.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 98e1b7a6c5e0997ac391812ab66a79822c38ac98ea9322f2fd8d6a1294e219a0 |
|
MD5 | 20f4d95f67bfcfc464739673a10d48ae |
|
BLAKE2b-256 | 38e4d7dd2a5e481272c2fc099819419504d31d0ab616130d54df7e6ca93bb406 |
关闭
snakemake_interface_executor_plugins-9.3.1-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a249b46cc4a4ba1cca73b19ca26b274a8ac66b05216ec88fec84d9b4620947a6 |
|
MD5 | 5d194c59a5a382a443d79ee3462aa6aa |
|
BLAKE2b-256 | ca13d635f87e6d83d1ea6f8255497e1ae9bbcda6fdc16758270230e7f9bdfe3a |