diff --git a/src/commands/auth/session.py b/src/commands/auth/session.py index 3deecb49..aaef41b6 100644 --- a/src/commands/auth/session.py +++ b/src/commands/auth/session.py @@ -190,10 +190,10 @@ def _sign_in(self, tableau_auth): self.auth_token = self.tableau_server._auth_token if not self.username: self.username = self.tableau_server.users.get_by_id(self.user_id).name - self.logger.debug("Signed into {0}{1} as {2}".format(self.server_url, self.site_name, self.username)) self.logger.info(_("common.output.succeeded")) except TSC.ServerResponseError as e: Errors.exit_with_error(self.logger, _("publish.errors.unexpected_server_response"), e) + self.logger.debug("Signed into {0}{1} as {2}".format(self.server_url, self.site_name, self.username)) return self.tableau_server diff --git a/src/commands/extracts/decrypt_extracts_command.py b/src/commands/extracts/decrypt_extracts_command.py index 61605bc5..2f02ec7a 100644 --- a/src/commands/extracts/decrypt_extracts_command.py +++ b/src/commands/extracts/decrypt_extracts_command.py @@ -24,7 +24,7 @@ def run_command(args): logger.debug(_("tabcmd.launching")) session = Session() server = session.create_session(args) - site_item = Server.get_site_for_command_or_throw(logger, server, args) + site_item = Server.get_site_for_command_or_throw(logger, server, args.site_name) try: logger.info(_("decryptextracts.status").format(args.site_name)) job = server.sites.decrypt_extracts(site_item.id) diff --git a/src/commands/extracts/encrypt_extracts_command.py b/src/commands/extracts/encrypt_extracts_command.py index 8cf32057..96d18422 100644 --- a/src/commands/extracts/encrypt_extracts_command.py +++ b/src/commands/extracts/encrypt_extracts_command.py @@ -26,7 +26,7 @@ def run_command(args): logger.debug(_("tabcmd.launching")) session = Session() server = session.create_session(args) - site_item = Server.get_site_for_command_or_throw(logger, server, args) + site_item = Server.get_site_for_command_or_throw(logger, server, args.site_name) try: logger.info(_("encryptextracts.status").format(site_item.name)) job = server.sites.encrypt_extracts(site_item.id) diff --git a/src/commands/extracts/reencrypt_extracts_command.py b/src/commands/extracts/reencrypt_extracts_command.py index 3071757b..42021a10 100644 --- a/src/commands/extracts/reencrypt_extracts_command.py +++ b/src/commands/extracts/reencrypt_extracts_command.py @@ -26,7 +26,7 @@ def run_command(args): logger.debug(_("tabcmd.launching")) session = Session() server = session.create_session(args) - site_item = Server.get_site_for_command_or_throw(logger, server, args) + site_item = Server.get_site_for_command_or_throw(logger, server, args.site_name) try: logger.info(_("reencryptextracts.status").format(site_item.name)) job = server.sites.encrypt_extracts(site_item.id) diff --git a/src/commands/server.py b/src/commands/server.py index dee5dd0b..3bec44ec 100644 --- a/src/commands/server.py +++ b/src/commands/server.py @@ -73,12 +73,9 @@ def get_items_by_name(logger, item_endpoint, item_name, container=None): # Get site by name or get currently logged in site @staticmethod - def get_site_for_command_or_throw(logger, server, args): - if args.site_name: - try: - site_item = Server.get_items_by_name(logger, server.sites, args.site_name)[0] - except Exception as e: - Errors.exit_with_error(logger, exception=e) + def get_site_for_command_or_throw(logger, server, site_name): + if site_name: + site_item = Server.get_site_by_name(logger, server, site_name) else: logger.debug("Use logged in site") site_item = server.sites.get_by_id(server.site_id) @@ -86,6 +83,14 @@ def get_site_for_command_or_throw(logger, server, args): raise ResourceWarning("Could not get site from server") return site_item + @staticmethod + def get_site_by_name(logger, server, site_name): + try: + site_item = Server.get_items_by_name(logger, server.sites, site_name)[0] + except Exception as e: + Errors.exit_with_error(logger, exception=e) + return site_item + @staticmethod def get_filename_extension_if_tableau_type(logger, filename): logger.debug("Filename given: {}".format(filename)) diff --git a/src/commands/site/create_site_command.py b/src/commands/site/create_site_command.py index 1e7489e8..ef44b56d 100644 --- a/src/commands/site/create_site_command.py +++ b/src/commands/site/create_site_command.py @@ -18,7 +18,7 @@ class CreateSiteCommand(Server): @staticmethod def define_args(create_site_parser): - create_site_parser.add_argument("site_name", metavar="site-name", help=_("editsite.options.site-name")) + create_site_parser.add_argument("new_site_name", metavar="site-name", help=_("editsite.options.site-name")) set_common_site_args(create_site_parser) @staticmethod @@ -27,21 +27,24 @@ def run_command(args): logger.debug(_("tabcmd.launching")) session = Session() server = session.create_session(args) + admin_mode = "ContentAndUsers" # default: allow site admins to manage users + if not args.site_admin_user_management: + admin_mode = "ContentOnly" new_site = TSC.SiteItem( - name=args.site_name, - content_url=args.url, - admin_mode=args.admin_mode, + name=args.new_site_name, + content_url=args.url or args.new_site_name, + admin_mode=admin_mode, user_quota=args.user_quota, storage_quota=args.storage_quota, ) try: - logger.info(_("createsite.status").format(args.site_name)) + logger.info(_("createsite.status").format(args.new_site_name)) server.sites.create(new_site) logger.info(_("common.output.succeeded")) except TSC.ServerResponseError as e: if Errors.is_resource_conflict(e): if args.continue_if_exists: - logger.info(_("createsite.errors.site_name_already_exists").format(args.site_name)) + logger.info(_("createsite.errors.site_name_already_exists").format(args.new_site_name)) return else: Errors.exit_with_error( diff --git a/src/commands/site/delete_site_command.py b/src/commands/site/delete_site_command.py index 1e6622c0..2f9ea640 100644 --- a/src/commands/site/delete_site_command.py +++ b/src/commands/site/delete_site_command.py @@ -17,7 +17,7 @@ class DeleteSiteCommand(Server): @staticmethod def define_args(delete_site_parser): - delete_site_parser.add_argument("site_name", help="name of site to delete") + delete_site_parser.add_argument("site_name_to_delete", metavar="site-name", help="name of site to delete") @staticmethod def run_command(args): @@ -25,11 +25,9 @@ def run_command(args): logger.debug(_("tabcmd.launching")) session = Session() server = session.create_session(args) - site_id = server.sites.get_by_name(args.site_name) - if site_id == session.site_id: - Errors.exit_with_error(logger, "Cannot delete the site you are logged in to") + site_url = Server.get_site_by_name(logger, server, args.site_name_to_delete).content_url try: - server.sites.delete(site_id) + server.sites.delete(site_url) logger.info("Successfully deleted the site") except TSC.ServerResponseError as e: Errors.exit_with_error(logger, "Error deleting site", e) diff --git a/src/commands/site/edit_site_command.py b/src/commands/site/edit_site_command.py index d384f34d..a055a45f 100644 --- a/src/commands/site/edit_site_command.py +++ b/src/commands/site/edit_site_command.py @@ -34,7 +34,7 @@ def run_command(args): session = Session() server = session.create_session(args) - site_item = Server.get_site_for_command_or_throw(logger, server, args) + site_item = Server.get_site_for_command_or_throw(logger, server, args.site_name) if args.url: site_item.content_url = args.url if args.user_quota: diff --git a/tests/commands/test_run_commands.py b/tests/commands/test_run_commands.py index 7ffd9e2c..f654598b 100644 --- a/tests/commands/test_run_commands.py +++ b/tests/commands/test_run_commands.py @@ -224,9 +224,9 @@ def test_create_project_already_exists(self, mock_session, mock_server): def test_create_site_already_exists(self, mock_session, mock_server): RunCommandsTest._set_up_session(mock_session, mock_server) mock_args.continue_if_exists = True - mock_args.site_name = "duplicate" + mock_args.new_site_name = "duplicate" mock_args.url = "dplct" - mock_args.admin_mode = None + mock_args.site_admin_user_management = None mock_args.user_quota = None mock_args.storage_quota = None mock_server.sites.create.return_value = TSC.ServerResponseError(409, "already exists", "detail") @@ -278,9 +278,9 @@ def test_publish_samples(self, mock_session, mock_server): # site def test_create_site(self, mock_session, mock_server): RunCommandsTest._set_up_session(mock_session, mock_server) - mock_args.site_name = "site-name" + mock_args.new_site_name = "site-name" mock_args.url = "site-content-url" - mock_args.admin_mode = None + mock_args.site_admin_user_management = None mock_args.user_quota = (None,) mock_args.storage_quota = None create_site_command.CreateSiteCommand.run_command(mock_args) @@ -289,7 +289,7 @@ def test_create_site(self, mock_session, mock_server): def test_delete_site(self, mock_session, mock_server): RunCommandsTest._set_up_session(mock_session, mock_server) mock_server.sites = getter - mock_args.site_name = "site-name" + mock_args.site_name_to_delete = "site-name" delete_site_command.DeleteSiteCommand.run_command(mock_args) mock_session.assert_called() diff --git a/tests/parsers/test_parser_create_site.py b/tests/parsers/test_parser_create_site.py index 1cffbb88..68f40b7d 100644 --- a/tests/parsers/test_parser_create_site.py +++ b/tests/parsers/test_parser_create_site.py @@ -14,7 +14,7 @@ def setUpClass(cls): def test_create_site_parser_just_a_name(self): mock_args = [commandname, "site-name"] args = self.parser_under_test.parse_args(mock_args) - assert args.site_name == "site-name", args + assert args.new_site_name == "site-name", args def test_create_site_parser_missing_required_name(self): mock_args = [commandname] @@ -37,6 +37,6 @@ def test_create_site_parser_with_all_args(self): ] # what else? args = self.parser_under_test.parse_args(mock_args) print(args) - assert args.site_name == "site-name", args + assert args.new_site_name == "site-name", args assert args.user_quota == 12, args assert args.storage_quota == 12, args diff --git a/tests/parsers/test_parser_delete_site.py b/tests/parsers/test_parser_delete_site.py index 00332236..843e9c82 100644 --- a/tests/parsers/test_parser_delete_site.py +++ b/tests/parsers/test_parser_delete_site.py @@ -14,7 +14,7 @@ def setUpClass(cls): def test_delete_site(self): mock_args = [commandname, "site-name"] args = self.parser_under_test.parse_args(mock_args) - assert args.site_name == "site-name", args + assert args.site_name_to_delete == "site-name", args def test_delete_site_required_name_none(self): mock_args = [commandname]