Skip to content

Commit 904fdde

Browse files
committed
Refactor fetch_mlr_lineage_fitness script
Small refactor of fetch_mlr_lineage_fitness script primarily to break out a `main()` function and to call this function from `if __name__ == '__main__':`
1 parent 6f5d767 commit 904fdde

File tree

1 file changed

+29
-25
lines changed

1 file changed

+29
-25
lines changed

scripts/fetch_mlr_lineage_fitness.py

+29-25
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
importrequests
1+
importargparse
22
importjson
33
importpandasaspd
4-
importargparse
4+
importrequests
55
importmath
6+
importsys
67
fromaugur.ioimportread_metadata
78
fromaugur.utilsimportwrite_json
89

@@ -15,16 +16,6 @@
1516
# broken for the all-time builds. It would be possible to swap this to key on
1617
# clade instead, but I think the greater detail of lineages is better in this case
1718

18-
# Set up argument parser
19-
parser=argparse.ArgumentParser(description="Fetch MLR lineage fitness and match to strain-level metadata")
20-
parser.add_argument("--metadata", required=True, help="Path to the metadata TSV")
21-
parser.add_argument("--metadata-id-columns", default=["strain", "name", "Virus name"], nargs="+", help="List of columns to use as identifiers in the metadata file")
22-
parser.add_argument("--metadata-clade-attribute", default="Nextclade_pango", help="Matched attribute to MLR variants")
23-
parser.add_argument("--mlr-url", default="https://data.nextstrain.org/files/workflows/forecasts-ncov/gisaid/pango_lineages/global/mlr/latest_results.json", help="URL to fetch the forecasts JSON data.")
24-
parser.add_argument("--output-node-data", required=True, help="Path to save the output JSON node data.")
25-
26-
args=parser.parse_args()
27-
2819
deffetch_growth_advantages(mlr_url):
2920
try:
3021
response=requests.get(mlr_url)
@@ -42,18 +33,30 @@ def fetch_growth_advantages(mlr_url):
4233
print(f"Error fetching the JSON file: {e}")
4334
returnNone
4435

45-
try:
46-
# Fetch the growth advantages
36+
defmain():
37+
# Set up argument parser
38+
parser=argparse.ArgumentParser(description="Fetch MLR lineage fitness and match to strain-level metadata")
39+
parser.add_argument("--metadata", required=True, help="Path to the metadata TSV")
40+
parser.add_argument("--metadata-id-columns", default=["strain", "name", "Virus name"], nargs="+", help="List of columns to use as identifiers in the metadata file")
41+
parser.add_argument("--metadata-clade-attribute", default="Nextclade_pango", help="Matched attribute to MLR variants")
42+
parser.add_argument("--mlr-url", default="https://data.nextstrain.org/files/workflows/forecasts-ncov/gisaid/pango_lineages/global/mlr/latest_results.json", help="URL to fetch the forecasts JSON data.")
43+
parser.add_argument("--output-node-data", required=True, help="Path to save the output JSON node data.")
44+
45+
args=parser.parse_args()
46+
47+
# Fetch the remote growth advantages
4748
growth_advantages=fetch_growth_advantages(args.mlr_url)
4849

49-
# Load the local metadata file
50-
metadata_file=args.metadata
51-
metadata=read_metadata(
52-
metadata_file,
53-
id_columns=args.metadata_id_columns
54-
)
50+
# Load the local metadata
51+
try:
52+
metadata=read_metadata(
53+
args.metadata,
54+
id_columns=args.metadata_id_columns
55+
)
56+
exceptFileNotFoundErrorase:
57+
print(f"Error reading metadata file: {e}", file=sys.stderr)
5558

56-
# Match Nextclade_pango entries to the growth advantage
59+
# Match Nextclade_pango entries in metadata to the fetched growth advantages
5760
ifgrowth_advantages:
5861
metadata[args.metadata_clade_attribute] =metadata[args.metadata_clade_attribute].map(growth_advantages)
5962
else:
@@ -69,7 +72,8 @@ def fetch_growth_advantages(mlr_url):
6972
# Save node data
7073
write_json({"nodes": node_data}, args.output_node_data)
7174

72-
exceptFileNotFoundErrorase:
73-
print(f"Error reading metadata file: {e}", file=sys.stderr)
74-
exceptExceptionase:
75-
print(f"An unexpected error occurred: {e}", file=sys.stderr)
75+
if__name__=='__main__':
76+
try:
77+
main()
78+
exceptExceptionase:
79+
print(f"An unexpected error occurred: {e}", file=sys.stderr)

0 commit comments

Comments
 (0)
close