Skip to content

_nextclade_cli

Module that creates Nextclade command and captures Nextclade output.

capture_output(command)

Runs Nextclade CLI and captures the output.

Parameters:

  • command (str) –

    The Nextclade CLI command.

Returns:

  • DataFrame

    A DataFrame of the Nextclade analysis TSV output.

Source code in src/vargram/wranglers/_nextclade_cli.py
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
def capture_output(command):
    """Runs Nextclade CLI and captures the output.

    Parameters
    ----------
    command : str
        The Nextclade CLI command.

    Returns
    -------
    pandas.DataFrame
        A DataFrame of the Nextclade analysis TSV output.

    """
    try:
        if len(command) != 2: # Reference FASTA is provided
            subprocess.run(command, check=True)
            analysis_arg_ind = command.index("-t") + 1
            analysis_file_path = command[analysis_arg_ind]
        else: # Name of Nextclade reference is provided
            analysis_arg_ind = command[1].index("-t") + 1
            analysis_file_path = command[1][analysis_arg_ind]
            for line in command:
                subprocess.run(line, check=True)

        # Reading Nextclade analysis TSV output
        analysis_dataframe = pd.read_csv(analysis_file_path, delimiter='\t')
        # Removing index column
        analysis_dataframe.drop('index', axis=1, inplace=True)
        return analysis_dataframe
    except subprocess.CalledProcessError as e:
        print(f"Error running Nextclade: {e}")
    except FileNotFoundError:
        print("Nextclade executable not found. Make sure it is included in the system $PATH.")
    except Exception as e:
        print(f"An unexpected error occurred: {e}")

create_command(**kwargs)

Creates Nextclade command based on user input.

Parameters:

  • input (dict) –

    Dictionary containing the user input to nextclade().

  • secure_analysis_dir (str) –

    Secure temporary directory to store Nexclade analysis TSV output.

  • secure_ref_dir (str) –

    Secure temporary directory to store reference sequence from Nextclade.

Returns:

  • list

    A list whose elements constitute the Nextclade command.

Source code in src/vargram/wranglers/_nextclade_cli.py
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
def create_command(**kwargs):
    """Creates Nextclade command based on user input.

    Parameters
    ----------
    input : dict 
        Dictionary containing the user input to nextclade().
    secure_analysis_dir : str
        Secure temporary directory to store Nexclade analysis TSV output.
    secure_ref_dir : str
        Secure temporary directory to store reference sequence from Nextclade.

    Returns
    -------
    list
        A list whose elements constitute the Nextclade command.

    """

    # Getting user input
    input = kwargs["input"]
    seq = input["seq"]
    ref = input["ref"]   

    # Getting nextread-created directories
    secure_analysis_dir = kwargs["secure_analysis_dir"]
    secure_ref_dir = kwargs["secure_ref_dir"]

    # Creating command based on user input
    if os.path.isfile(ref): # Reference FASTA is provided
        nextclade_command = [
            "nextclade",
            "run",
            "-r",
            ref,
            "-t",
            os.path.join(secure_analysis_dir, 'analysis.tsv')
        ]
        if "gene" in input: # Gene annotation is provided
            gene = input["gene"]
            nextclade_command = nextclade_command + ["-m", gene]
        nextclade_command = nextclade_command + [seq]
        gene_path = gene
    else: # Name of Nextclade reference is provided
        secure_ref_dir = kwargs["secure_analysis_dir"]
        # Get dataset first and then run the command
        gene_path = os.path.join(secure_ref_dir, 'genome_annotation.gff3')
        nextclade_command = [
            [
                "nextclade",
                "dataset",
                "get",
                "-n",
                ref, 
                "-o",
                secure_ref_dir
            ],
            ["nextclade",
                "run",
                "-r",
                os.path.join(secure_ref_dir, 'reference.fasta'),
                "-m",
                gene_path,
                "-t", 
                os.path.join(secure_analysis_dir, 'analysis.tsv'),
                seq
            ]
        ]
    return nextclade_command, gene_path