From efcd55853560f2dde6bb65c795a167aa3dae889d Mon Sep 17 00:00:00 2001 From: Roman Skurikhin Date: Fri, 21 Jan 2022 12:44:24 +0200 Subject: [PATCH 1/2] Fix checking org/cluster name validity before re-fetching config --- neuro-cli/src/neuro_cli/click_types.py | 12 ++++++++++++ neuro-cli/src/neuro_cli/config.py | 6 +++--- neuro-sdk/src/neuro_sdk/_config.py | 2 -- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/neuro-cli/src/neuro_cli/click_types.py b/neuro-cli/src/neuro_cli/click_types.py index b0136b826..7ad88a957 100644 --- a/neuro-cli/src/neuro_cli/click_types.py +++ b/neuro-cli/src/neuro_cli/click_types.py @@ -345,6 +345,9 @@ async def async_shell_complete( class ClusterType(AsyncType[str]): name = "cluster" + def __init__(self, allow_unknown: bool = False): + self._allow_unknown = allow_unknown + async def async_convert( self, root: Root, @@ -352,6 +355,8 @@ async def async_convert( param: Optional[click.Parameter], ctx: Optional[click.Context], ) -> str: + if self._allow_unknown: + return value client = await root.init_client() if value not in client.config.clusters: raise click.BadParameter( @@ -373,12 +378,16 @@ async def async_shell_complete( CLUSTER = ClusterType() +CLUSTER_ALLOW_UNKNOWN = ClusterType(allow_unknown=True) class OrgType(AsyncType[str]): name = "org" NO_ORG_STR = "NO_ORG" + def __init__(self, allow_unknown: bool = False): + self._allow_unknown = allow_unknown + async def async_convert( self, root: Root, @@ -386,6 +395,8 @@ async def async_convert( param: Optional[click.Parameter], ctx: Optional[click.Context], ) -> str: + if self._allow_unknown: + return value client = await root.init_client() org_name = value if value != self.NO_ORG_STR else None if org_name not in client.config.clusters[client.config.cluster_name].orgs: @@ -412,6 +423,7 @@ async def async_shell_complete( ORG = OrgType() +ORG_ALLOW_UNKNOWN = OrgType(allow_unknown=True) class JobType(AsyncType[str]): diff --git a/neuro-cli/src/neuro_cli/config.py b/neuro-cli/src/neuro_cli/config.py index 1ba76ba9d..bb6836eaa 100644 --- a/neuro-cli/src/neuro_cli/config.py +++ b/neuro-cli/src/neuro_cli/config.py @@ -18,7 +18,7 @@ from neuro_cli.formatters.config import ClustersFormatter from .alias import list_aliases -from .click_types import CLUSTER, ORG +from .click_types import CLUSTER_ALLOW_UNKNOWN, ORG, ORG_ALLOW_UNKNOWN from .formatters.config import AliasesFormatter, ConfigFormatter from .root import Root from .utils import argument, command, group, option @@ -226,7 +226,7 @@ async def get_clusters(root: Root) -> None: @command() -@argument("cluster_name", required=False, default=None, type=CLUSTER) +@argument("cluster_name", required=False, default=None, type=CLUSTER_ALLOW_UNKNOWN) async def switch_cluster(root: Root, cluster_name: Optional[str]) -> None: """Switch the active cluster. @@ -252,7 +252,7 @@ async def switch_cluster(root: Root, cluster_name: Optional[str]) -> None: @command() -@argument("org_name", required=True, type=ORG) +@argument("org_name", required=True, type=ORG_ALLOW_UNKNOWN) async def switch_org(root: Root, org_name: Optional[str]) -> None: """Switch the active organization. diff --git a/neuro-sdk/src/neuro_sdk/_config.py b/neuro-sdk/src/neuro_sdk/_config.py index fb529c985..c36cbbf48 100644 --- a/neuro-sdk/src/neuro_sdk/_config.py +++ b/neuro-sdk/src/neuro_sdk/_config.py @@ -199,7 +199,6 @@ async def switch_cluster(self, name: str) -> None: raise RuntimeError( f"Cluster {name} doesn't exist in " f"a list of available clusters {list(self.clusters)}. " - f"Please logout and login again." ) org_name = self.org_name if org_name not in self.clusters[name].orgs: @@ -221,7 +220,6 @@ async def switch_org(self, name: Optional[str]) -> None: f"Org {name or 'NO_ORG'} doesn't exist in " f"a list of available orgs {list(cluster_org_names)} for " f"cluster '{self.cluster_name}'. " - f"Please logout and login again." ) self.__config_data = replace(self._config_data, org_name=name) _save(self._config_data, self._path) From 7f9a173d36ac0827c57d2222daa13e14b72afa37 Mon Sep 17 00:00:00 2001 From: Roman Skurikhin Date: Fri, 21 Jan 2022 12:47:45 +0200 Subject: [PATCH 2/2] Add changelog --- CHANGELOG.D/2543.bugfix | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 CHANGELOG.D/2543.bugfix diff --git a/CHANGELOG.D/2543.bugfix b/CHANGELOG.D/2543.bugfix new file mode 100644 index 000000000..598dd9039 --- /dev/null +++ b/CHANGELOG.D/2543.bugfix @@ -0,0 +1,2 @@ +Cluster/org name validness now checked after config re-fetch in `neuro config switch-cluster` +and `neuro config switch-org` commands.