diff --git a/eva-accession-release-automation/run_release_in_embassy/release_metadata.py b/eva-accession-release-automation/run_release_in_embassy/release_metadata.py index 707adafb0..8c34eb11f 100644 --- a/eva-accession-release-automation/run_release_in_embassy/release_metadata.py +++ b/eva-accession-release-automation/run_release_in_embassy/release_metadata.py @@ -90,3 +90,33 @@ def get_release_inventory_info_for_assembly(taxonomy_id, assembly_accession, rel raise Exception("Could not find release inventory pertaining to taxonomy ID: {0} and assembly: {1} " .format(taxonomy_id, assembly_accession)) return results[0][0] + + +def get_release_for_status_and_version(release_species_inventory_table, metadata_connection_handle, status=None, + release_version=None, taxonomy_id=None, assembly_accessions=None): + def format_list(list_to_format): + return f"({str(list_to_format).strip('[]')})" + + if status: + if 'Pending' in status: + status.remove('Pending') + if status: + status_statement = f"and (release_status in {format_list(status)} or release_status is null) " + else: + status_statement = f"and release_status is null " + else: + status_statement = f"and release_status in {format_list(status)} " + else: + status_statement = None + + query = ''.join(( + f"select taxonomy, assembly_accession, release_version, release_status from {release_species_inventory_table} ", + f"where should_be_released ", + f"and num_rs_to_release > 0 ", + f"{status_statement}" if status_statement else '', + f"and release_version={release_version} " if release_version else '', + f"and taxonomy={taxonomy_id} " if taxonomy_id else '', + f"and assembly_accessions in {format_list(assembly_accessions)} " if assembly_accessions else '', + "ORDER BY release_version, taxonomy, assembly_accession" + )) + return get_all_results_for_query(metadata_connection_handle, query) 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 51dc63de7..1c9ebc200 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 @@ -11,6 +11,7 @@ # 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 sys from argparse import ArgumentParser import os @@ -18,10 +19,11 @@ import yaml from ebi_eva_common_pyutils.command_utils import run_command_with_output +from ebi_eva_common_pyutils.common_utils import pretty_print 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_metadata import get_release_assemblies_for_taxonomy, get_release_for_status_and_version from run_release_in_embassy.release_common_utils import get_release_folder_name @@ -105,6 +107,23 @@ def run_release_for_species(taxonomy_id, release_assemblies, release_version, re run_command_with_output(f"Running workflow file {workflow_file_path}", workflow_command) +def list_release_per_status(status, release_version, taxonomy_id, assembly_accessions): + 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: + header = ['taxonomy', 'assembly_accession', 'release_version', 'release_status'] + table = [] + for taxonomy, assembly_accession, release_version, release_status in get_release_for_status_and_version( + release_species_inventory_table, metadata_connection_handle, status, release_version=release_version, + taxonomy_id=taxonomy_id, assembly_accessions=assembly_accessions + ): + if release_status is None: + release_status = 'Pending' + table.append((taxonomy, assembly_accession, release_version, release_status)) + pretty_print(header, table) + + def load_config(*args): cfg.load_config_file( *args, @@ -115,16 +134,27 @@ def load_config(*args): def main(): argparse = ArgumentParser() - argparse.add_argument("--taxonomy_id", help="ex: 9913", required=True) + argparse.add_argument("--list_status", nargs='+', + help="Generate the list of species and assembly that needs to be released", + choices=['Pending', 'Started', 'Completed']) + argparse.add_argument("--taxonomy_id", help="ex: 9913") 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, + argparse.add_argument("--release_version") + argparse.add_argument("--resume", default=False, help="Resume the nextflow pipeline for the specified taxonomy and assembly") args = argparse.parse_args() load_config() logging_config.add_stdout_handler() - - run_release_for_species(args.taxonomy_id, args.assembly_accessions, args.release_version, args.resume) + if args.list_status: + list_release_per_status(args.list_status, args.release_version, args.taxonomy_id, args.assembly_accessions) + else: + if not args.taxonomy_id: + logger.error('--taxonomy_id is required when running the release') + sys.exit(1) + if not args.release_version: + logger.error('--release_version is required when running the release') + sys.exit(1) + run_release_for_species(args.taxonomy_id, args.assembly_accessions, args.release_version, args.resume) if __name__ == "__main__":