diff --git a/seqerakit/cli.py b/seqerakit/cli.py index e001cfa..0beb7b6 100644 --- a/seqerakit/cli.py +++ b/seqerakit/cli.py @@ -170,6 +170,7 @@ def main(args=None): "organizations", # all use method.add "workspaces", "labels", + "members", "credentials", "secrets", "actions", diff --git a/seqerakit/helper.py b/seqerakit/helper.py index d78b4a9..0eec9b3 100644 --- a/seqerakit/helper.py +++ b/seqerakit/helper.py @@ -83,6 +83,7 @@ def parse_all_yaml(file_paths, destroy=False): "teams", "workspaces", "labels", + "members", "participants", "credentials", "compute-envs", diff --git a/seqerakit/overwrite.py b/seqerakit/overwrite.py index 5739856..d624ddf 100644 --- a/seqerakit/overwrite.py +++ b/seqerakit/overwrite.py @@ -65,6 +65,11 @@ def __init__(self, sp): "method_args": self._get_label_args, "name_key": "name", }, + "members": { + "keys": ["user", "organization"], + "method_args": self._get_members_args, + "name_key": "email", + }, "teams": { "keys": ["name", "organization"], "method_args": self._get_team_args, @@ -106,6 +111,9 @@ def handle_overwrite(self, block, args, overwrite=False, destroy=False): self.block_operations["participants"]["name_key"] = "teamName" else: self.block_operations["participants"]["name_key"] = "email" + elif block == "members": + # Rename the user key to name to correctly index JSON data + sp_args["name"] = sp_args.pop("user") if self.check_resource_exists(operation["name_key"], sp_args): # if resource exists and overwrite is true, delete if overwrite: @@ -150,6 +158,18 @@ def _get_team_args(self, args): ) return ("delete", "--id", str(team_id), "--organization", args["organization"]) + def _get_members_args(self, args): + """ + Returns a list of arguments for the delete() method for members. + """ + return ( + "delete", + "--user", + args["name"], + "--organization", + args["organization"], + ) + def _get_participant_args(self, args): """ Returns a list of arguments for the delete() method for participants. @@ -235,6 +255,11 @@ def _get_json_data(self, block, args, keys_to_get): self.cached_jsondata = json_method( block, "list", "-w", sp_args["workspace"] ) + elif block == "members": # TODO + sp_args = self._get_values_from_cmd_args(args, keys_to_get) + self.cached_jsondata = json_method( + block, "list", "-o", sp_args["organization"] + ) else: sp_args = self._get_values_from_cmd_args(args, keys_to_get) self.cached_jsondata = json_method(block, "list") diff --git a/templates/members.yml b/templates/members.yml new file mode 100644 index 0000000..d3f2d82 --- /dev/null +++ b/templates/members.yml @@ -0,0 +1,5 @@ +## To see the full list of options available run: "tw members add" +participants: + - user: 'bob@myorg.io' # required + organization: 'myorg' # required + overwrite: True # optional \ No newline at end of file diff --git a/tests/unit/test_helper.py b/tests/unit/test_helper.py index 6b2c57c..42a5fb8 100644 --- a/tests/unit/test_helper.py +++ b/tests/unit/test_helper.py @@ -266,7 +266,7 @@ def test_create_mock_pipeline_add_yaml(mock_yaml_file): assert result["pipelines"] == expected_block_output -def test_mock_teams_yaml(mock_yaml_file): +def test_create_mock_teams_yaml(mock_yaml_file): test_data = { "teams": [ { @@ -312,6 +312,26 @@ def test_mock_teams_yaml(mock_yaml_file): assert result["teams"] == expected_block_output +def test_create_mock_members_yaml(mock_yaml_file): + test_data = {"members": [{"user": "bob@myorg.io", "organization": "myorg"}]} + expected_block_output = [ + { + "cmd_args": [ + "--organization", + "myorg", + "--user", + "bob@myorg.io", + ], + "overwrite": False, + } + ] + file_path = mock_yaml_file(test_data) + result = helper.parse_all_yaml([file_path]) + + assert "members" in result + assert result["members"] == expected_block_output + + def test_empty_yaml_file(mock_yaml_file): test_data = {} file_path = mock_yaml_file(test_data)