From a6a1333b226bffef2014a92328c7ec79d54e75d7 Mon Sep 17 00:00:00 2001 From: Kenny Workman Date: Sat, 11 Nov 2023 15:11:51 -1000 Subject: [PATCH 1/6] add import --- latch_cli/snakemake/serialize.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/latch_cli/snakemake/serialize.py b/latch_cli/snakemake/serialize.py index 63354480..473c9c30 100644 --- a/latch_cli/snakemake/serialize.py +++ b/latch_cli/snakemake/serialize.py @@ -426,7 +426,8 @@ def generate_jit_register_code( from functools import partial from pathlib import Path import shutil - from typing import List, NamedTuple, Optional, TypedDict, Dict + import typing + from typing import NamedTuple, Optional, TypedDict, Dict import hashlib from urllib.parse import urljoin from dataclasses import is_dataclass, asdict From 8a3a102cdc4e9c1802e436bf9d43a54615cac4e4 Mon Sep 17 00:00:00 2001 From: Kenny Workman Date: Sat, 11 Nov 2023 15:22:41 -1000 Subject: [PATCH 2/6] message --- latch_cli/snakemake/config/parser.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/latch_cli/snakemake/config/parser.py b/latch_cli/snakemake/config/parser.py index 42878b60..74c20c3c 100644 --- a/latch_cli/snakemake/config/parser.py +++ b/latch_cli/snakemake/config/parser.py @@ -126,14 +126,19 @@ def generate_metadata( old_metadata_path.rename(metadata_path) elif old_metadata_path.exists() and metadata_path.exists(): click.secho( - "Warning: Found both `latch_metadata.py` and" - " `latch_metadata/__init__.py` in current directory." - " `latch_metadata.py` will be ignored.", + ( + "Warning: Found both `latch_metadata.py` and" + " `latch_metadata/__init__.py` in current directory." + " `latch_metadata.py` will be ignored." + ), fg="yellow", ) if not metadata_path.exists() and click.confirm( - "Could not find an `__init__.py` file in `latch_metadata`. Generate one?" + "Could not find an `__init__.py` file in `latch_metadata`. This file" + "will hold your metadata object the parameterizes your interface and" + "will use parameters imported from parameters.py" + "Generate one?" ): metadata_path.write_text( reindent( @@ -183,6 +188,9 @@ def generate_metadata( # # from .parameters import generated_parameters # + # Use fully qualified names for types from typing (eg. typing.List, + # typing.Optional) + generated_parameters = { __params__ } From 0b38bd8e20dbfc9f2d7a75b34bcfe14ede5da399 Mon Sep 17 00:00:00 2001 From: Kenny Workman Date: Sat, 11 Nov 2023 15:24:38 -1000 Subject: [PATCH 3/6] better --- latch_cli/snakemake/config/parser.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/latch_cli/snakemake/config/parser.py b/latch_cli/snakemake/config/parser.py index 74c20c3c..f329619b 100644 --- a/latch_cli/snakemake/config/parser.py +++ b/latch_cli/snakemake/config/parser.py @@ -136,8 +136,8 @@ def generate_metadata( if not metadata_path.exists() and click.confirm( "Could not find an `__init__.py` file in `latch_metadata`. This file" - "will hold your metadata object the parameterizes your interface and" - "will use parameters imported from parameters.py" + "defines the metadata object that configures your interface and " + "uses parameters imported from `parameters.py`" "Generate one?" ): metadata_path.write_text( From 8b9d7ac8e4095507f2fcd2ed3b26d27259c4ee59 Mon Sep 17 00:00:00 2001 From: Kenny Workman Date: Sat, 11 Nov 2023 15:39:36 -1000 Subject: [PATCH 4/6] fix --- latch_cli/snakemake/config/parser.py | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/latch_cli/snakemake/config/parser.py b/latch_cli/snakemake/config/parser.py index f329619b..fa364839 100644 --- a/latch_cli/snakemake/config/parser.py +++ b/latch_cli/snakemake/config/parser.py @@ -126,11 +126,9 @@ def generate_metadata( old_metadata_path.rename(metadata_path) elif old_metadata_path.exists() and metadata_path.exists(): click.secho( - ( - "Warning: Found both `latch_metadata.py` and" - " `latch_metadata/__init__.py` in current directory." - " `latch_metadata.py` will be ignored." - ), + "Warning: Found both `latch_metadata.py` and" + " `latch_metadata/__init__.py` in current directory." + " `latch_metadata.py` will be ignored.", fg="yellow", ) @@ -187,9 +185,6 @@ def generate_metadata( # Import these into your `__init__.py` file: # # from .parameters import generated_parameters - # - # Use fully qualified names for types from typing (eg. typing.List, - # typing.Optional) generated_parameters = { __params__ From b7fb71861e2435f35f450506a22a44443094b92e Mon Sep 17 00:00:00 2001 From: Kenny Workman Date: Sat, 11 Nov 2023 15:53:44 -1000 Subject: [PATCH 5/6] best effort display name from snakecase --- latch_cli/snakemake/config/parser.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/latch_cli/snakemake/config/parser.py b/latch_cli/snakemake/config/parser.py index fa364839..3e82537a 100644 --- a/latch_cli/snakemake/config/parser.py +++ b/latch_cli/snakemake/config/parser.py @@ -81,10 +81,16 @@ def generate_metadata( is_file = typ in {LatchFile, LatchDir} param_typ = "SnakemakeFileParameter" if is_file else "SnakemakeParameter" + + def _best_effort_display_name(param_name: str): + if param_name[0] == "_": + param_name = param_name[1:] + return " ".join(map(lambda x: x.capitalize(), param_name.split("_"))) + param_str = reindent( f"""\ {repr(identifier_from_str(k))}: {param_typ}( - display_name={repr(k)}, + display_name={repr(_best_effort_display_name(k))}, type={type_repr(typ)}, __config____default__),""", 0, From 99230783d1e9b638f22dac832c0c8b27176d2f6c Mon Sep 17 00:00:00 2001 From: Kenny Workman Date: Sun, 12 Nov 2023 11:01:35 -1000 Subject: [PATCH 6/6] ayush fixes --- latch_cli/snakemake/config/parser.py | 16 +++++++--------- latch_cli/snakemake/serialize_utils.py | 6 ++++++ 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/latch_cli/snakemake/config/parser.py b/latch_cli/snakemake/config/parser.py index 3e82537a..37b83b8b 100644 --- a/latch_cli/snakemake/config/parser.py +++ b/latch_cli/snakemake/config/parser.py @@ -9,6 +9,7 @@ from latch_cli.snakemake.workflow import reindent from latch_cli.utils import identifier_from_str +from ..serialize_utils import best_effort_display_name from .utils import JSONValue, get_preamble, parse_type, parse_value, type_repr T = TypeVar("T") @@ -82,15 +83,10 @@ def generate_metadata( is_file = typ in {LatchFile, LatchDir} param_typ = "SnakemakeFileParameter" if is_file else "SnakemakeParameter" - def _best_effort_display_name(param_name: str): - if param_name[0] == "_": - param_name = param_name[1:] - return " ".join(map(lambda x: x.capitalize(), param_name.split("_"))) - param_str = reindent( f"""\ {repr(identifier_from_str(k))}: {param_typ}( - display_name={repr(_best_effort_display_name(k))}, + display_name={repr(best_effort_display_name(k))}, type={type_repr(typ)}, __config____default__),""", 0, @@ -132,9 +128,11 @@ def _best_effort_display_name(param_name: str): old_metadata_path.rename(metadata_path) elif old_metadata_path.exists() and metadata_path.exists(): click.secho( - "Warning: Found both `latch_metadata.py` and" - " `latch_metadata/__init__.py` in current directory." - " `latch_metadata.py` will be ignored.", + ( + "Warning: Found both `latch_metadata.py` and" + " `latch_metadata/__init__.py` in current directory." + " `latch_metadata.py` will be ignored." + ), fg="yellow", ) diff --git a/latch_cli/snakemake/serialize_utils.py b/latch_cli/snakemake/serialize_utils.py index 4064c1a1..9d793cfa 100644 --- a/latch_cli/snakemake/serialize_utils.py +++ b/latch_cli/snakemake/serialize_utils.py @@ -1,3 +1,4 @@ +import re from typing import Dict, Union from flytekit import LaunchPlan @@ -210,3 +211,8 @@ def get_serializable_workflow( admin_wf = admin_workflow_models.WorkflowSpec(template=wf_t, sub_workflows=[]) cache[entity] = admin_wf return admin_wf + + +def best_effort_display_name(x: str): + expr = re.compile(r"_+") + return expr.sub(" ", x).title().strip()