diff --git a/eva-accession-release-automation/README.md b/eva-accession-release-automation/README.md index 1c2dedd8a..c3cd0b7a5 100644 --- a/eva-accession-release-automation/README.md +++ b/eva-accession-release-automation/README.md @@ -9,7 +9,6 @@ pip install -e /path/to/eva-accession/eva-accession-release-automation The release automation script `run_release_for_species.py` has the following parameters: * **common-release-properties-file:** Path to yaml config file, see below * **taxonomy-id:** Taxonomy to release -* **memory:** Amount of memory to use when running the release jobs You also need to set `PYTHONPATH=/path/to/eva-accession/eva-accession-release-automation/run_release_in_embassy`. diff --git a/eva-accession-release-automation/run_release_in_embassy/__init__.py b/eva-accession-release-automation/run_release_in_embassy/__init__.py index 00e90d898..e69de29bb 100644 --- a/eva-accession-release-automation/run_release_in_embassy/__init__.py +++ b/eva-accession-release-automation/run_release_in_embassy/__init__.py @@ -1,25 +0,0 @@ -# Copyright 2020 EMBL - European Bioinformatics Institute -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import logging -import sys - - -def init_logger(): - logging.basicConfig(stream=sys.stdout, level=logging.INFO, format='%(asctime)-15s %(levelname)s %(message)s') - result_logger = logging.getLogger(__name__) - return result_logger - - -logger = init_logger() diff --git a/eva-accession-release-automation/run_release_in_embassy/copy_accessioning_collections_to_embassy.py b/eva-accession-release-automation/run_release_in_embassy/copy_accessioning_collections_to_embassy.py index dc2c50c7f..7443e923e 100644 --- a/eva-accession-release-automation/run_release_in_embassy/copy_accessioning_collections_to_embassy.py +++ b/eva-accession-release-automation/run_release_in_embassy/copy_accessioning_collections_to_embassy.py @@ -52,7 +52,7 @@ def remote_db_is_empty(local_forwarded_port, assembly_accession, destination_db_ logger.info(f"check if: {assembly_accession} has been copied") command = f"mongosh --eval 'use {destination_db_name}' --eval 'db.stats()' --port {local_forwarded_port} " \ "| grep 'dataSize' | awk '{print substr($2,1,length($2)-1)}'" - output = run_command_with_output(command) + output = run_command_with_output('Check that data exists in mongodb', command, return_process_output=True) return output.strip() == '0' diff --git a/eva-accession-release-automation/run_release_in_embassy/release_common_utils.py b/eva-accession-release-automation/run_release_in_embassy/release_common_utils.py index ab6f6cade..58829a864 100644 --- a/eva-accession-release-automation/run_release_in_embassy/release_common_utils.py +++ b/eva-accession-release-automation/run_release_in_embassy/release_common_utils.py @@ -12,17 +12,19 @@ # See the License for the specific language governing permissions and # limitations under the License. -import logging import os import signal import traceback +from functools import lru_cache + +from ebi_eva_common_pyutils.logger import logging_config from run_release_in_embassy.release_metadata import get_target_mongo_instance_for_assembly from ebi_eva_internal_pyutils.metadata_utils import get_metadata_connection_handle from ebi_eva_common_pyutils.network_utils import get_available_local_port, forward_remote_port_to_local_port from ebi_eva_common_pyutils.taxonomy import taxonomy -logger = logging.getLogger(__name__) +logger = logging_config.get_logger(__name__) def open_mongo_port_to_tempmongo(private_config_xml_file, profile, taxonomy_id, assembly, @@ -90,5 +92,6 @@ def get_release_db_name_in_tempmongo_instance(taxonomy_id, assembly_accession): return "acc_" + str(taxonomy_id) + "_" + assembly_accession.replace('.', '_') +@lru_cache def get_release_folder_name(taxonomy_id): return taxonomy.get_normalized_scientific_name_from_ensembl(taxonomy_id) diff --git a/eva-accession-release-automation/run_release_in_embassy/run_release_for_assembly.nf b/eva-accession-release-automation/run_release_in_embassy/run_release_for_assembly.nf new file mode 100644 index 000000000..c294f025b --- /dev/null +++ b/eva-accession-release-automation/run_release_in_embassy/run_release_for_assembly.nf @@ -0,0 +1,197 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl=2 + +workflow { + initiate_release_status_for_assembly('initiate') | copy_accessioning_collections_to_embassy | run_release_for_assembly | \ + merge_dbsnp_eva_release_files | sort_bgzip_index_release_files | validate_release_vcf_files | \ + analyze_vcf_validation_results | count_rs_ids_in_release_files | validate_rs_release_files | \ + update_sequence_names_to_ena | update_release_status_for_assembly +} + +process initiate_release_status_for_assembly { + + label 'short_time', 'med_mem' + + input: + val flag + + output: + val true, emit: flag + + script: + """ + export PYTHONPATH=$params.python_path + $params.executable.python.interpreter -m run_release_in_embassy.initiate_release_status_for_assembly --private-config-xml-file $params.maven.settings_file --profile $params.maven.environment --release-species-inventory-table eva_progress_tracker.clustering_release_tracker --taxonomy-id $params.taxonomy --assembly-accession $params.assembly --release-version $params.release_version 1>> $params.log_file 2>&1 + """ +} + +process copy_accessioning_collections_to_embassy { + + label 'long_time', 'med_mem' + + input: + val flag + + output: + val true, emit: flag + + script: + """ + export PYTHONPATH=$params.python_path + $params.executable.python.interpreter -m run_release_in_embassy.copy_accessioning_collections_to_embassy --private-config-xml-file $params.maven.settings_file --profile $params.maven.environment --taxonomy-id $params.taxonomy --assembly-accession $params.assembly --release-species-inventory-table eva_progress_tracker.clustering_release_tracker --release-version $params.release_version --dump-dir $params.dump_dir 1>> $params.log_file 2>&1 + """ +} + +process run_release_for_assembly { + + label 'long_time', 'med_mem' + + input: + val flag + + output: + val true, emit: flag + + script: + """ + export PYTHONPATH=$params.python_path + $params.executable.python.interpreter -m run_release_in_embassy.run_release_for_assembly --private-config-xml-file $params.maven.settings_file --profile $params.maven.environment --taxonomy-id $params.taxonomy --assembly-accession $params.assembly --release-species-inventory-table eva_progress_tracker.clustering_release_tracker --release-version $params.release_version --species-release-folder $params.assembly_folder --release-jar-path $params.jar.release_pipeline 1>> $params.log_file 2>&1 + """ +} + +process merge_dbsnp_eva_release_files { + + label 'long_time', 'med_mem' + + input: + val flag + + output: + val true, emit: flag + + script: + """ + export PYTHONPATH=$params.python_path + $params.executable.python.interpreter -m run_release_in_embassy.merge_dbsnp_eva_release_files --private-config-xml-file $params.maven.settings_file --profile $params.maven.environment --bgzip-path $params.executable.bgzip --bcftools-path $params.executable.bcftools --vcf-sort-script-path $params.executable.sort_vcf_sorted_chromosomes --taxonomy-id $params.taxonomy --assembly-accession $params.assembly --release-species-inventory-table eva_progress_tracker.clustering_release_tracker --release-version $params.release_version --species-release-folder $params.assembly_folder 1>> $params.log_file 2>&1 + """ +} + +process sort_bgzip_index_release_files { + + label 'long_time', 'med_mem' + + input: + val flag + + output: + val true, emit: flag + + script: + """ + export PYTHONPATH=$params.python_path + $params.executable.python.interpreter -m run_release_in_embassy.sort_bgzip_index_release_files --bgzip-path $params.executable.bgzip --bcftools-path $params.executable.bcftools --vcf-sort-script-path $params.executable.sort_vcf_sorted_chromosomes --taxonomy-id $params.taxonomy --assembly-accession $params.assembly --species-release-folder $params.assembly_folder 1>> $params.log_file 2>&1 + """ +} + +process validate_release_vcf_files { + + label 'long_time', 'med_mem' + + input: + val flag + + output: + val true, emit: flag + + script: + """ + export PYTHONPATH=$params.python_path + $params.executable.python.interpreter -m run_release_in_embassy.validate_release_vcf_files --private-config-xml-file $params.maven.settings_file --profile $params.maven.environment --taxonomy-id $params.taxonomy --assembly-accession $params.assembly --release-species-inventory-table eva_progress_tracker.clustering_release_tracker --release-version $params.release_version --species-release-folder $params.assembly_folder --vcf-validator-path $params.executable.vcf_validator --assembly-checker-path $params.executable.vcf_assembly_checker 1>> $params.log_file 2>&1 + """ +} + +process analyze_vcf_validation_results { + + label 'long_time', 'med_mem' + + input: + val flag + + output: + val true, emit: flag + + script: + """ + export PYTHONPATH=$params.python_path + $params.executable.python.interpreter -m run_release_in_embassy.analyze_vcf_validation_results --species-release-folder $params.assembly_folder --assembly-accession $params.assembly 1>> $params.log_file 2>&1 + """ +} + +process count_rs_ids_in_release_files { + + label 'long_time', 'med_mem' + + input: + val flag + + output: + val true, emit: flag + + script: + """ + export PYTHONPATH=$params.python_path + $params.executable.python.interpreter -m run_release_in_embassy.count_rs_ids_in_release_files --count-ids-script-path $params.executable.count_ids_in_vcf --taxonomy-id $params.taxonomy --assembly-accession $params.assembly --species-release-folder $params.assembly_folder 1>> $params.log_file 2>&1 + """ +} + +process validate_rs_release_files { + + label 'long_time', 'med_mem' + + input: + val flag + + output: + val true, emit: flag + + script: + """ + export PYTHONPATH=$params.python_path + $params.executable.python.interpreter -m run_release_in_embassy.validate_rs_release_files --private-config-xml-file $params.maven.settings_file --profile $params.maven.environment --taxonomy-id $params.taxonomy --assembly-accession $params.assembly --release-species-inventory-table eva_progress_tracker.clustering_release_tracker --release-version $params.release_version --species-release-folder $params.assembly_folder 1>> $params.log_file 2>&1 + """ +} + +process update_sequence_names_to_ena { + + label 'long_time', 'med_mem' + + input: + val flag + + output: + val true, emit: flag + + script: + """ + export PYTHONPATH=$params.python_path + $params.executable.python.interpreter -m run_release_in_embassy.update_sequence_names_to_ena --taxonomy-id $params.taxonomy --assembly-accession $params.assembly --species-release-folder $params.assembly_folder --sequence-name-converter-path $params.executable.convert_vcf_file --bcftools-path $params.executable.bcftools 1>> $params.log_file 2>&1 + """ +} + +process update_release_status_for_assembly { + + label 'short_time', 'med_mem' + + input: + val flag + + output: + val true, emit: flag11 + + script: + """ + export PYTHONPATH=$params.python_path + $params.executable.python.interpreter -m run_release_in_embassy.update_release_status_for_assembly --private-config-xml-file $params.maven.settings_file --profile $params.maven.environment --release-species-inventory-table eva_progress_tracker.clustering_release_tracker --taxonomy-id $params.taxonomy --assembly-accession $params.assembly --release-version $params.release_version 1>> $params.log_file 2>&1 + """ +} diff --git a/eva-accession-release-automation/run_release_in_embassy/run_release_for_assembly.py b/eva-accession-release-automation/run_release_in_embassy/run_release_for_assembly.py index 630f5ec92..f6c6b326c 100644 --- a/eva-accession-release-automation/run_release_in_embassy/run_release_for_assembly.py +++ b/eva-accession-release-automation/run_release_in_embassy/run_release_for_assembly.py @@ -13,16 +13,17 @@ # limitations under the License. import click -import logging import sys import traceback +from ebi_eva_common_pyutils.logger import logging_config + from run_release_in_embassy.create_release_properties_file import create_release_properties_file_for_assembly from run_release_in_embassy.release_common_utils import open_mongo_port_to_tempmongo, close_mongo_port_to_tempmongo from ebi_eva_common_pyutils.command_utils import run_command_with_output -logger = logging.getLogger(__name__) +logger = logging_config.get_logger(__name__) def run_release_for_assembly(private_config_xml_file, profile, taxonomy_id, assembly_accession, diff --git a/eva-accession-release-automation/run_release_in_embassy/run_release_for_species.py b/eva-accession-release-automation/run_release_in_embassy/run_release_for_species.py index 472768817..51dc63de7 100644 --- a/eva-accession-release-automation/run_release_in_embassy/run_release_for_species.py +++ b/eva-accession-release-automation/run_release_in_embassy/run_release_for_species.py @@ -13,185 +13,118 @@ # limitations under the License. from argparse import ArgumentParser -import collections -import copy -import datetime -import logging import os -import yaml +from functools import lru_cache -from ebi_eva_common_pyutils.common_utils import merge_two_dicts +import yaml +from ebi_eva_common_pyutils.command_utils import run_command_with_output +from ebi_eva_common_pyutils.logger import logging_config from ebi_eva_internal_pyutils.metadata_utils import get_metadata_connection_handle +from ebi_eva_common_pyutils.config import cfg from run_release_in_embassy.release_metadata import get_release_assemblies_for_taxonomy from run_release_in_embassy.release_common_utils import get_release_folder_name -logger = logging.getLogger(__name__) -timestamp = datetime.datetime.now().strftime("%Y%m%d%H%M%S") -copy_process = "copy_accessioning_collections_to_embassy" -# Processes, in order, that make up the workflow and the arguments that they take -workflow_process_arguments_map = collections.OrderedDict( - [ - ("initiate_release_status_for_assembly", ["private-config-xml-file", "profile", "release-species-inventory-table", - "taxonomy-id", "assembly-accession", "release-version"]), - (copy_process, ["private-config-xml-file", "profile", "taxonomy-id", "assembly-accession", - "release-species-inventory-table", "release-version", "dump-dir"]), - ("run_release_for_assembly", ["private-config-xml-file", "profile", "taxonomy-id", - "assembly-accession", "release-species-inventory-table", - "release-version", "species-release-folder", "release-jar-path"]), - ("merge_dbsnp_eva_release_files", ["private-config-xml-file", "profile", "bgzip-path", "bcftools-path", - "vcf-sort-script-path", "taxonomy-id", "assembly-accession", - "release-species-inventory-table", "release-version", - "species-release-folder"]), - ("sort_bgzip_index_release_files", ["bgzip-path", "bcftools-path", - "vcf-sort-script-path", "taxonomy-id", "assembly-accession", - "species-release-folder"]), - ("validate_release_vcf_files", ["private-config-xml-file", "profile", "taxonomy-id", - "assembly-accession", "release-species-inventory-table", "release-version", - "species-release-folder", - "vcf-validator-path", "assembly-checker-path"]), - ("analyze_vcf_validation_results", ["species-release-folder", "assembly-accession"]), - ("count_rs_ids_in_release_files", ["count-ids-script-path", "taxonomy-id", "assembly-accession", - "species-release-folder"]), - ("validate_rs_release_files", ["private-config-xml-file", "profile", "taxonomy-id", "assembly-accession", - "release-species-inventory-table", "release-version", "species-release-folder"]), - ('update_sequence_names_to_ena', ["taxonomy-id", "assembly-accession", "species-release-folder", - 'sequence-name-converter-path', 'bcftools-path']), - ("update_release_status_for_assembly", ["private-config-xml-file", "profile", "release-species-inventory-table", - "taxonomy-id", "assembly-accession", "release-version"]) - ]) - -workflow_process_template_for_nextflow = """ -process {workflow-process-name} {{ - - {cluster-options} - input: - val flag from {previous-process-output-flag} - output: - val true into {current-process-output-flag} - script: - \"\"\" - export PYTHONPATH={script-path} && ({python3-path} -m run_release_in_embassy.{process-with-args} 1>> {release-log-file} 2>&1) - \"\"\" -}} -""" - - -def get_release_properties_for_current_species(common_release_properties, taxonomy_id): - release_properties = {"taxonomy-id": taxonomy_id, - "species-release-folder": os.path.join(common_release_properties["release-folder"], - get_release_folder_name(taxonomy_id))} - os.makedirs(release_properties["species-release-folder"], exist_ok=True) - release_properties["timestamp"] = timestamp - release_properties["dump-dir"] = os.path.join(release_properties["species-release-folder"], "dumps") - os.makedirs(release_properties["dump-dir"], exist_ok=True) - return release_properties - - -def get_release_properties_for_current_assembly(species_release_properties, assembly_accession): - release_properties = { - "assembly-accession": assembly_accession, - "assembly-release-folder": os.path.join(species_release_properties["species-release-folder"], assembly_accession), - "release-log-file": "{species-release-folder}/{assembly_accession}/release_{taxonomy-id}_{assembly_accession}_{timestamp}.log".format(**species_release_properties, assembly_accession=assembly_accession) +logger = logging_config.get_logger(__name__) + + +def get_nextflow_params(taxonomy_id, assembly_accession, release_version): + dump_dir = os.path.join(get_species_release_folder(taxonomy_id), 'dumps') + release_dir = get_assembly_release_folder(taxonomy_id, assembly_accession) + config_param = os.path.join(release_dir, f'nextflow_params_{taxonomy_id}_{assembly_accession}.yaml') + os.makedirs(dump_dir, exist_ok=True) + yaml_data = { + 'assembly': assembly_accession, + 'dump_dir': dump_dir, + 'executable': cfg['executable'], + 'jar': cfg['jar'], + 'log_file': get_release_log_file_name(taxonomy_id, assembly_accession), + 'maven': cfg['maven'], + 'python_path': os.environ['PYTHONPATH'], + 'release_version': release_version, + 'assembly_folder': release_dir, + 'taxonomy': taxonomy_id } - os.makedirs(release_properties["assembly-release-folder"], exist_ok=True) - return release_properties - - -def get_nextflow_process_definition(assembly_release_properties, workflow_process_name, workflow_process_args, - process_name_suffix=None): - if process_name_suffix is None: - process_name_suffix = assembly_release_properties["assembly-accession"].replace('.', '_') - release_properties = copy.deepcopy(assembly_release_properties) - release_properties["workflow-process-name"] = workflow_process_name + "_" + process_name_suffix - - release_properties["process-with-args"] = "{0} {1}".format(workflow_process_name, - " ".join(["--{0} {1}" - .format(arg, release_properties[arg]) - for arg in workflow_process_args])) - release_properties["cluster-options"] = 'clusterOptions "-g /accession"' if "run_release_for_assembly" \ - in workflow_process_name else "" - return workflow_process_template_for_nextflow.format(**release_properties) - - -def prepare_release_workflow_file_for_species(common_release_properties, taxonomy_id, assembly_accession): - process_index = 1 - release_properties = merge_two_dicts(common_release_properties, - get_release_properties_for_current_species(common_release_properties, - taxonomy_id)) - release_assembly_properties = merge_two_dicts(release_properties, - get_release_properties_for_current_assembly(release_properties, - assembly_accession)) - # This hack is needed to kick-off the initial process in Nextflow - release_assembly_properties["previous-process-output-flag"] = "true" - release_assembly_properties["current-process-output-flag"] = "flag" + str(process_index) - # Ensure that PYTHONPATH is properly set so that scripts can be run - # as "python3 -m run_release_in_embassy." - release_assembly_properties["script-path"] = os.environ["PYTHONPATH"] - workflow_file_name = os.path.join( - release_assembly_properties["species-release-folder"], release_assembly_properties["assembly-accession"], - "{taxonomy-id}_{assembly-accession}_release_workflow_{timestamp}.nf".format(**release_assembly_properties) - ) + with open(config_param, 'w') as open_file: + yaml.safe_dump(yaml_data, open_file) + return config_param + + +def get_nextflow_config(): + if 'RELEASE_NEXTFLOW_CONFIG' in os.environ and os.path.isfile(os.environ['RELEASE_NEXTFLOW_CONFIG']): + return os.path.abspath(os.environ['RELEASE_NEXTFLOW_CONFIG']) + - with open(workflow_file_name, "w") as workflow_file_handle: - header = "#!/usr/bin/env nextflow" - workflow_file_handle.write(header + "\n") +def get_run_release_for_assembly_nextflow(): + curr_dir = os.path.dirname(__file__) + return os.path.join(curr_dir, 'run_release_for_assembly.nf') - for workflow_process_name, workflow_process_args in workflow_process_arguments_map.items(): - release_assembly_properties["current-process-output-flag"] = "flag" + str(process_index) - workflow_file_handle.write( - get_nextflow_process_definition(release_assembly_properties, workflow_process_name, - workflow_process_args, - process_name_suffix=assembly_accession.replace(".", "_"))) - workflow_file_handle.write("\n") - process_index += 1 - # Set the flag that will capture the output status of the current process - # This variable will be used to decide whether the next process should be started - # See http://nextflow-io.github.io/patterns/index.html#_mock_dependency - release_assembly_properties["previous-process-output-flag"] = "flag" + str(process_index - 1) - return workflow_file_name, release_assembly_properties["release-log-file"] +def get_release_log_file_name(taxonomy_id, assembly_accession): + return f"{get_assembly_release_folder(taxonomy_id, assembly_accession)}/release_{taxonomy_id}_{assembly_accession}.log" -def get_common_release_properties(common_release_properties_file): - return yaml.load(open(common_release_properties_file), Loader=yaml.FullLoader) +@lru_cache +def get_species_release_folder(taxonomy_id): + folder = os.path.join(cfg.query('release', 'release_output'), get_release_folder_name(taxonomy_id)) + os.makedirs(folder, exist_ok=True) + return folder -def run_release_for_species(common_release_properties_file, taxonomy_id, release_assemblies): - common_release_properties = get_common_release_properties(common_release_properties_file) - private_config_xml_file = common_release_properties["private-config-xml-file"] - profile = common_release_properties["profile"] - release_species_inventory_table = common_release_properties["release-species-inventory-table"] - release_version = common_release_properties["release-version"] +@lru_cache +def get_assembly_release_folder(taxonomy_id, assembly_accession): + folder = os.path.join(get_species_release_folder(taxonomy_id), assembly_accession) + os.makedirs(folder, exist_ok=True) + return folder + + +def run_release_for_species(taxonomy_id, release_assemblies, release_version, resume=False): + private_config_xml_file = cfg.query("maven", "settings_file") + profile = cfg.query("maven", "environment") + release_species_inventory_table = cfg.query('release', 'inventory_table') with get_metadata_connection_handle(profile, private_config_xml_file) as metadata_connection_handle: if not release_assemblies: - release_assemblies = get_release_assemblies_for_taxonomy(taxonomy_id, release_species_inventory_table, - release_version, metadata_connection_handle) + release_assemblies = get_release_assemblies_for_taxonomy( + taxonomy_id, release_species_inventory_table, release_version, metadata_connection_handle + ) + for assembly_accession in release_assemblies: - workflow_file_name, release_log_file = prepare_release_workflow_file_for_species(common_release_properties, - taxonomy_id, - assembly_accession) - workflow_report_file_name = workflow_file_name.replace(".nf", ".report.html") - if os.path.exists(workflow_report_file_name): - os.remove(workflow_report_file_name) - workflow_command = "cd {0} && {1} run {2} -c {3} -with-report {4} -bg".format( - os.path.dirname(release_log_file), - common_release_properties["nextflow-binary-path"], workflow_file_name, - common_release_properties["nextflow-config-path"], workflow_report_file_name) - logger.info("Check log file in: " + release_log_file + " to monitor progress...") - logger.info("Running workflow file {0} with the following command:\n\n {1} \n\n" - "Use the above command with -resume if this workflow needs to be resumed in the future" - .format(workflow_file_name, workflow_command)) - os.system(workflow_command) + nextflow_params = get_nextflow_params(taxonomy_id, assembly_accession, release_version) + workflow_file_path = get_run_release_for_assembly_nextflow() + release_dir = get_assembly_release_folder(taxonomy_id, assembly_accession) + nextflow_config = get_nextflow_config() + workflow_command = ' '.join(( + f"cd {release_dir} &&", + f"{cfg.query('executable', 'nextflow')} run {workflow_file_path}", + f"-params-file {nextflow_params}", + f'-c {nextflow_config}' if nextflow_config else '', + '-resume' if resume else '', + )) + logger.info(f"Running workflow file {workflow_file_path} with the following command: " + f"\n {workflow_command} \n") + run_command_with_output(f"Running workflow file {workflow_file_path}", workflow_command) + + +def load_config(*args): + cfg.load_config_file( + *args, + os.environ.get('RELEASE_CONFIG'), + '~/.release_config.yml' + ) def main(): argparse = ArgumentParser() - argparse.add_argument("--common-release-properties-file", help="ex: /path/to/release/properties.yml", required=True) - argparse.add_argument("--taxonomy-id", help="ex: 9913", required=True) - argparse.add_argument("--assembly-accessions", nargs='+', help="ex: GCA_000003055.3") + argparse.add_argument("--taxonomy_id", help="ex: 9913", required=True) + argparse.add_argument("--assembly_accessions", nargs='+', help="ex: GCA_000003055.3") + argparse.add_argument("--release_version", required=True) + argparse.add_argument("--resume", default=False, required=False, + help="Resume the nextflow pipeline for the specified taxonomy and assembly") args = argparse.parse_args() - run_release_for_species(args.common_release_properties_file, args.taxonomy_id, args.assembly_accessions) + load_config() + logging_config.add_stdout_handler() + + run_release_for_species(args.taxonomy_id, args.assembly_accessions, args.release_version, args.resume) if __name__ == "__main__":