Exemplo n.º 1
0
    def test_create(self) -> None:
        with open(CREATE_XML, "rb") as f:
            response_xml = f.read().decode("utf-8")
        with requests_mock.mock() as m:
            m.post(self.baseurl, text=response_xml)
            new_site = TSC.SiteItem(
                name="Tableau",
                content_url="tableau",
                admin_mode=TSC.SiteItem.AdminMode.ContentAndUsers,
                user_quota=15,
                storage_quota=1000,
                disable_subscriptions=True,
            )
            new_site = self.server.sites.create(new_site)

        new_site._tier_viewer_capacity = None
        new_site._tier_creator_capacity = None
        new_site._tier_explorer_capacity = None
        self.assertEqual("0626857c-1def-4503-a7d8-7907c3ff9d9f", new_site.id)
        self.assertEqual("tableau", new_site.content_url)
        self.assertEqual("Tableau", new_site.name)
        self.assertEqual("Active", new_site.state)
        self.assertEqual("ContentAndUsers", new_site.admin_mode)
        self.assertEqual(False, new_site.revision_history_enabled)
        self.assertEqual(True, new_site.subscribe_others_enabled)
        self.assertEqual(True, new_site.disable_subscriptions)
        self.assertEqual(15, new_site.user_quota)
Exemplo n.º 2
0
    def run_command(args):
        logger = log(__class__.__name__, args.logging_level)
        logger.debug(_("tabcmd.launching"))
        session = Session()
        server = session.create_session(args)
        new_site = TSC.SiteItem(
            name=args.site_name,
            content_url=args.url,
            admin_mode=args.admin_mode,
            user_quota=args.user_quota,
            storage_quota=args.storage_quota,
        )
        try:
            logger.info(_("createsite.status").format(args.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))
                    return
                else:
                    Errors.exit_with_error(
                        logger,
                        _("createsite.errors.site_name_already_exists").format(
                            args.site_name))

            Errors.exit_with_error(
                logger, _("publish.errors.unexpected_server_response"), e)
Exemplo n.º 3
0
    def test_update(self):
        with open(UPDATE_XML, 'rb') as f:
            response_xml = f.read().decode('utf-8')
        with requests_mock.mock() as m:
            m.put(self.baseurl + '/6b7179ba-b82b-4f0f-91ed-812074ac5da6',
                  text=response_xml)
            single_site = TSC.SiteItem(
                name='Tableau',
                content_url='tableau',
                admin_mode=TSC.SiteItem.AdminMode.ContentAndUsers,
                user_quota=15,
                storage_quota=1000,
                disable_subscriptions=True,
                revision_history_enabled=False)
            single_site._id = '6b7179ba-b82b-4f0f-91ed-812074ac5da6'
            single_site = self.server.sites.update(single_site)

        self.assertEqual('6b7179ba-b82b-4f0f-91ed-812074ac5da6',
                         single_site.id)
        self.assertEqual('tableau', single_site.content_url)
        self.assertEqual('Suspended', single_site.state)
        self.assertEqual('Tableau', single_site.name)
        self.assertEqual('ContentAndUsers', single_site.admin_mode)
        self.assertEqual(True, single_site.revision_history_enabled)
        self.assertEqual(13, single_site.revision_limit)
        self.assertEqual(True, single_site.disable_subscriptions)
        self.assertEqual(15, single_site.user_quota)
Exemplo n.º 4
0
    def test_invalid_subscribe_others_enabled(self):
        site = TSC.SiteItem("site", "url")
        with self.assertRaises(ValueError):
            site.subscribe_others_enabled = "Hello"

        with self.assertRaises(ValueError):
            site.subscribe_others_enabled = None
Exemplo n.º 5
0
    def test_invalid_revision_history_enabled(self):
        site = TSC.SiteItem("site", "url")
        with self.assertRaises(ValueError):
            site.revision_history_enabled = "Hello"

        with self.assertRaises(ValueError):
            site.revision_history_enabled = None
Exemplo n.º 6
0
    def test_invalid_disable_subscriptions(self):
        site = TSC.SiteItem("site", "url")
        with self.assertRaises(ValueError):
            site.disable_subscriptions = "Hello"

        with self.assertRaises(ValueError):
            site.disable_subscriptions = None
Exemplo n.º 7
0
 def test_null_site_quota(self) -> None:
     test_site = TSC.SiteItem("testname", "testcontenturl", tier_explorer_capacity=1, user_quota=None)
     assert test_site.tier_explorer_capacity == 1
     with self.assertRaises(ValueError):
         test_site.user_quota = 1
     test_site.tier_explorer_capacity = None
     test_site.user_quota = 1
Exemplo n.º 8
0
 def test_replace_license_tiers_with_user_quota(self) -> None:
     test_site = TSC.SiteItem("testname", "testcontenturl", tier_explorer_capacity=1, user_quota=None)
     assert test_site.tier_explorer_capacity == 1
     with self.assertRaises(ValueError):
         test_site.user_quota = 1
     test_site.replace_license_tiers_with_user_quota(1)
     self.assertEqual(1, test_site.user_quota)
     self.assertIsNone(test_site.tier_explorer_capacity)
    def test_invalid_name(self):
        self.assertRaises(ValueError, TSC.SiteItem, None, "url")
        self.assertRaises(ValueError, TSC.SiteItem, "", "url")
        site = TSC.SiteItem("site", "url")
        with self.assertRaises(ValueError):
            site.name = None

        with self.assertRaises(ValueError):
            site.name = ""
    def test_update(self):
        with open(UPDATE_XML, 'rb') as f:
            response_xml = f.read().decode('utf-8')
        with requests_mock.mock() as m:
            m.put(self.baseurl + '/6b7179ba-b82b-4f0f-91ed-812074ac5da6', text=response_xml)
            single_site = TSC.SiteItem(name='Tableau', content_url='tableau',
                                       admin_mode=TSC.SiteItem.AdminMode.ContentAndUsers,
                                       user_quota=15, storage_quota=1000,
                                       disable_subscriptions=True, revision_history_enabled=False,
                                       data_acceleration_mode='disable', flow_auto_save_enabled=True,
                                       web_extraction_enabled=False, metrics_content_type_enabled=True,
                                       notify_site_admins_on_throttle=False, authoring_enabled=True,
                                       custom_subscription_email_enabled=True,
                                       custom_subscription_email='*****@*****.**',
                                       custom_subscription_footer_enabled=True,
                                       custom_subscription_footer='example_footer', ask_data_mode='EnabledByDefault',
                                       named_sharing_enabled=False, mobile_biometrics_enabled=True,
                                       sheet_image_enabled=False, derived_permissions_enabled=True,
                                       user_visibility_mode='FULL', use_default_time_zone=False,
                                       time_zone='America/Los_Angeles', auto_suspend_refresh_enabled=True,
                                       auto_suspend_refresh_inactivity_window=55)
            single_site._id = '6b7179ba-b82b-4f0f-91ed-812074ac5da6'
            single_site = self.server.sites.update(single_site)

        self.assertEqual('6b7179ba-b82b-4f0f-91ed-812074ac5da6', single_site.id)
        self.assertEqual('tableau', single_site.content_url)
        self.assertEqual('Suspended', single_site.state)
        self.assertEqual('Tableau', single_site.name)
        self.assertEqual('ContentAndUsers', single_site.admin_mode)
        self.assertEqual(True, single_site.revision_history_enabled)
        self.assertEqual(13, single_site.revision_limit)
        self.assertEqual(True, single_site.disable_subscriptions)
        self.assertEqual(15, single_site.user_quota)
        self.assertEqual('disable', single_site.data_acceleration_mode)
        self.assertEqual(True, single_site.flows_enabled)
        self.assertEqual(True, single_site.cataloging_enabled)
        self.assertEqual(True, single_site.flow_auto_save_enabled)
        self.assertEqual(False, single_site.web_extraction_enabled)
        self.assertEqual(True, single_site.metrics_content_type_enabled)
        self.assertEqual(False, single_site.notify_site_admins_on_throttle)
        self.assertEqual(True, single_site.authoring_enabled)
        self.assertEqual(True, single_site.custom_subscription_email_enabled)
        self.assertEqual('*****@*****.**', single_site.custom_subscription_email)
        self.assertEqual(True, single_site.custom_subscription_footer_enabled)
        self.assertEqual('example_footer', single_site.custom_subscription_footer)
        self.assertEqual('EnabledByDefault', single_site.ask_data_mode)
        self.assertEqual(False, single_site.named_sharing_enabled)
        self.assertEqual(True, single_site.mobile_biometrics_enabled)
        self.assertEqual(False, single_site.sheet_image_enabled)
        self.assertEqual(True, single_site.derived_permissions_enabled)
        self.assertEqual('FULL', single_site.user_visibility_mode)
        self.assertEqual(False, single_site.use_default_time_zone)
        self.assertEqual('America/Los_Angeles', single_site.time_zone)
        self.assertEqual(True, single_site.auto_suspend_refresh_enabled)
        self.assertEqual(55, single_site.auto_suspend_refresh_inactivity_window)
Exemplo n.º 11
0
    def test_switch_site(self):
        self.server.version = '2.6'
        baseurl = self.server.auth.baseurl
        site_id, user_id, auth_token = list('123')
        self.server._set_auth(site_id, user_id, auth_token)
        with open(SIGN_IN_XML, 'rb') as f:
            response_xml = f.read().decode('utf-8')
        with requests_mock.mock() as m:
            m.post(baseurl + '/switchSite', text=response_xml)
            site = TSC.SiteItem('Samples', 'Samples')
            self.server.auth.switch_site(site)

        self.assertEqual('eIX6mvFsqyansa4KqEI1UwOpS8ggRs2l', self.server.auth_token)
        self.assertEqual('6b7179ba-b82b-4f0f-91ed-812074ac5da6', self.server.site_id)
        self.assertEqual('1a96d216-e9b8-497b-a82a-0b899a965e01', self.server.user_id)
Exemplo n.º 12
0
def create_site(server="out"):
    new_site = TSC.SiteItem(name=tableau_servers[server]["site_name"],
                            content_url=tableau_servers[server]["site_id"])
    tableau_servers["out"]["auth"] = TSC.TableauAuth(
        tableau_servers["out"]["user"], tableau_servers["out"]["password"])
    with tableau_servers[server]["server"].auth.sign_in(
            tableau_servers[server]["auth"]):
        try:
            tableau_servers[server]["server"].sites.create(new_site)
        except Exception as e:
            print("WARNING: {}".format(e))
    tableau_servers[server]["auth"] = TSC.TableauAuth(
        tableau_servers[server]["user"],
        tableau_servers[server]["password"],
        site_id=tableau_servers[server]["site_id"])
Exemplo n.º 13
0
    def test_switch_site(self):
        self.server.version = "2.6"
        baseurl = self.server.auth.baseurl
        site_id, user_id, auth_token = list("123")
        self.server._set_auth(site_id, user_id, auth_token)
        with open(SIGN_IN_XML, "rb") as f:
            response_xml = f.read().decode("utf-8")
        with requests_mock.mock() as m:
            m.post(baseurl + "/switchSite", text=response_xml)
            site = TSC.SiteItem("Samples", "Samples")
            self.server.auth.switch_site(site)

        self.assertEqual("eIX6mvFsqyansa4KqEI1UwOpS8ggRs2l",
                         self.server.auth_token)
        self.assertEqual("6b7179ba-b82b-4f0f-91ed-812074ac5da6",
                         self.server.site_id)
        self.assertEqual("1a96d216-e9b8-497b-a82a-0b899a965e01",
                         self.server.user_id)
Exemplo n.º 14
0
    def test_create(self):
        with open(CREATE_XML, 'rb') as f:
            response_xml = f.read().decode('utf-8')
        with requests_mock.mock() as m:
            m.post(self.baseurl, text=response_xml)
            new_site = TSC.SiteItem(name='Tableau', content_url='tableau',
                                    admin_mode=TSC.SiteItem.AdminMode.ContentAndUsers, user_quota=15,
                                    storage_quota=1000, disable_subscriptions=True)
            new_site = self.server.sites.create(new_site)

        self.assertEqual('0626857c-1def-4503-a7d8-7907c3ff9d9f', new_site.id)
        self.assertEqual('tableau', new_site.content_url)
        self.assertEqual('Tableau', new_site.name)
        self.assertEqual('Active', new_site.state)
        self.assertEqual('ContentAndUsers', new_site.admin_mode)
        self.assertEqual(False, new_site.revision_history_enabled)
        self.assertEqual(True, new_site.subscribe_others_enabled)
        self.assertEqual(True, new_site.disable_subscriptions)
        self.assertEqual(15, new_site.user_quota)
 def test_invalid_state(self):
     site = TSC.SiteItem("site", "url")
     with self.assertRaises(ValueError):
         site.state = "Hello"
Exemplo n.º 16
0
 def test_update_missing_id(self):
     single_site = TSC.SiteItem('test', 'test')
     self.assertRaises(TSC.MissingRequiredFieldError,
                       self.server.sites.update, single_site)
Exemplo n.º 17
0
with server.auth.sign_in(tableau_auth):
    all_sites, pagination_item = server.sites.get()

site_check = 0
for i in range(0, len(uniqueField)):
    ###Ignoring process if site already exists###
    for site in all_sites:
        if site.name == uniqueField[i]:
            site_check = 1
            break

    ###Creating site and user###
    if site_check == 0:
        with server.auth.sign_in(tableau_auth):
            new_site = TSC.SiteItem(name=uniqueField[i],
                                    content_url=uniqueField[i].replace(
                                        " ", ""))
            server.sites.create(new_site)
        time.sleep(0.5)
        with server.auth.sign_in(tableau_auth):
            all_sites, pagination_item = server.sites.get()
        for site in all_sites:
            if site.name == uniqueField[i]:
                tableau_auth.site_id = site.content_url
                break
        with server.auth.sign_in(tableau_auth):
            user = TSC.UserItem(server_username[i], 'SiteAdministrator')
            user = server.users.add(user)
            user = server.users.update(user, 'password')

#Getting the default project and publishing workbook and datasource###
Exemplo n.º 18
0
def main():
    parser = argparse.ArgumentParser(
        description='Initialize a server with content.')
    parser.add_argument('--server', '-s', required=True, help='server address')
    parser.add_argument('--datasources-folder',
                        '-df',
                        required=True,
                        help='folder containing datasources')
    parser.add_argument('--workbooks-folder',
                        '-wf',
                        required=True,
                        help='folder containing workbooks')
    parser.add_argument('--site',
                        '-si',
                        required=False,
                        default='Default',
                        help='site to use')
    parser.add_argument('--project',
                        '-p',
                        required=False,
                        default='Default',
                        help='project to use')
    parser.add_argument('--username',
                        '-u',
                        required=True,
                        help='username to sign into server')
    parser.add_argument('--logging-level',
                        '-l',
                        choices=['debug', 'info', 'error'],
                        default='error',
                        help='desired logging level (set to error by default)')
    args = parser.parse_args()

    password = getpass.getpass("Password: "******"Checking to see if we need to create the site...")

        all_sites, _ = server.sites.get()
        existing_site = next((s for s in all_sites if s.name == args.site),
                             None)

        # Create the site if it doesn't exist
        if existing_site is None:
            print("Site not found: {0} Creating it...").format(args.site)
            new_site = TSC.SiteItem(
                name=args.site,
                content_url=args.site.replace(" ", ""),
                admin_mode=TSC.SiteItem.AdminMode.ContentAndUsers)
            server.sites.create(new_site)
        else:
            print("Site {0} exists. Moving on...").format(args.site)

    ################################################################################
    # Step 3: Sign-in to our target site
    ################################################################################
    print("Starting our content upload...")
    server_upload = TSC.Server(args.server)
    tableau_auth.site = args.site

    with server_upload.auth.sign_in(tableau_auth):

        ################################################################################
        # Step 4: Create the project we need only if it doesn't exist
        ################################################################################
        all_projects, _ = server_upload.projects.get()
        project = next((p for p in all_projects if p.name == args.project),
                       None)

        # Create our project if it doesn't exist
        if project is None:
            print("Project not found: {0} Creating it...").format(args.project)
            new_project = TSC.ProjectItem(name=args.project)
            project = server_upload.projects.create(new_project)

        ################################################################################
        # Step 5:  Set up our content
        #     Publish datasources to our site and project
        #     Publish workbooks to our site and project
        ################################################################################
        publish_datasources_to_site(server_upload, project,
                                    args.datasources_folder)
        publish_workbooks_to_site(server_upload, project,
                                  args.workbooks_folder)
def main():
    parser = argparse.ArgumentParser(description='Initialize a server with content.')
    # Common options; please keep those in sync across all samples
    parser.add_argument('--server', '-s', required=True, help='server address')
    parser.add_argument('--site', '-S', help='site name')
    parser.add_argument('--token-name', '-p', required=True,
                        help='name of the personal access token used to sign into the server')
    parser.add_argument('--token-value', '-v', required=True,
                        help='value of the personal access token used to sign into the server')
    parser.add_argument('--logging-level', '-l', choices=['debug', 'info', 'error'], default='error',
                        help='desired logging level (set to error by default)')
    # Options specific to this sample
    parser.add_argument('--datasources-folder', '-df', required=True, help='folder containing datasources')
    parser.add_argument('--workbooks-folder', '-wf', required=True, help='folder containing workbooks')
    parser.add_argument('--project', required=False, default='Default', help='project to use')

    args = parser.parse_args()

    # Set logging level based on user input, or error by default
    logging_level = getattr(logging, args.logging_level.upper())
    logging.basicConfig(level=logging_level)

    ################################################################################
    # Step 1: Sign in to server.
    ################################################################################
    tableau_auth = TSC.PersonalAccessTokenAuth(args.token_name, args.token_value, site_id=args.site)
    server = TSC.Server(args.server, use_server_version=True)
    with server.auth.sign_in(tableau_auth):

        ################################################################################
        # Step 2: Create the site we need only if it doesn't exist
        ################################################################################
        print("Checking to see if we need to create the site...")

        all_sites = TSC.Pager(server.sites)
        existing_site = next((s for s in all_sites if s.content_url == args.site_id), None)

        # Create the site if it doesn't exist
        if existing_site is None:
            print("Site not found: {0} Creating it...").format(args.site_id)
            new_site = TSC.SiteItem(name=args.site_id, content_url=args.site_id.replace(" ", ""),
                                    admin_mode=TSC.SiteItem.AdminMode.ContentAndUsers)
            server.sites.create(new_site)
        else:
            print("Site {0} exists. Moving on...").format(args.site_id)

    ################################################################################
    # Step 3: Sign-in to our target site
    ################################################################################
    print("Starting our content upload...")
    server_upload = TSC.Server(args.server)

    tableau_auth.site_id = args.site_id

    with server_upload.auth.sign_in(tableau_auth):

        ################################################################################
        # Step 4: Create the project we need only if it doesn't exist
        ################################################################################
        import time
        time.sleep(2)  # sad panda...something about eventually consistent model
        all_projects = TSC.Pager(server_upload.projects)
        project = next((p for p in all_projects if p.name.lower() == args.project.lower()), None)

        # Create our project if it doesn't exist
        if project is None:
            print("Project not found: {0} Creating it...").format(args.project)
            new_project = TSC.ProjectItem(name=args.project)
            project = server_upload.projects.create(new_project)

        ################################################################################
        # Step 5:  Set up our content
        #     Publish datasources to our site and project
        #     Publish workbooks to our site and project
        ################################################################################
        publish_datasources_to_site(server_upload, project, args.datasources_folder)
        publish_workbooks_to_site(server_upload, project, args.workbooks_folder)
Exemplo n.º 20
0
    def test_update(self) -> None:
        with open(UPDATE_XML, "rb") as f:
            response_xml = f.read().decode("utf-8")
        with requests_mock.mock() as m:
            m.put(self.baseurl + "/6b7179ba-b82b-4f0f-91ed-812074ac5da6", text=response_xml)
            single_site = TSC.SiteItem(
                name="Tableau",
                content_url="tableau",
                admin_mode=TSC.SiteItem.AdminMode.ContentAndUsers,
                user_quota=15,
                storage_quota=1000,
                disable_subscriptions=True,
                revision_history_enabled=False,
                data_acceleration_mode="disable",
                flow_auto_save_enabled=True,
                web_extraction_enabled=False,
                metrics_content_type_enabled=True,
                notify_site_admins_on_throttle=False,
                authoring_enabled=True,
                custom_subscription_email_enabled=True,
                custom_subscription_email="*****@*****.**",
                custom_subscription_footer_enabled=True,
                custom_subscription_footer="example_footer",
                ask_data_mode="EnabledByDefault",
                named_sharing_enabled=False,
                mobile_biometrics_enabled=True,
                sheet_image_enabled=False,
                derived_permissions_enabled=True,
                user_visibility_mode="FULL",
                use_default_time_zone=False,
                time_zone="America/Los_Angeles",
                auto_suspend_refresh_enabled=True,
                auto_suspend_refresh_inactivity_window=55,
                tier_creator_capacity=5,
                tier_explorer_capacity=5,
                tier_viewer_capacity=5,
            )
            single_site._id = "6b7179ba-b82b-4f0f-91ed-812074ac5da6"
            single_site = self.server.sites.update(single_site)

        self.assertEqual("6b7179ba-b82b-4f0f-91ed-812074ac5da6", single_site.id)
        self.assertEqual("tableau", single_site.content_url)
        self.assertEqual("Suspended", single_site.state)
        self.assertEqual("Tableau", single_site.name)
        self.assertEqual("ContentAndUsers", single_site.admin_mode)
        self.assertEqual(True, single_site.revision_history_enabled)
        self.assertEqual(13, single_site.revision_limit)
        self.assertEqual(True, single_site.disable_subscriptions)
        self.assertEqual(None, single_site.user_quota)
        self.assertEqual(5, single_site.tier_creator_capacity)
        self.assertEqual(5, single_site.tier_explorer_capacity)
        self.assertEqual(5, single_site.tier_viewer_capacity)
        self.assertEqual("disable", single_site.data_acceleration_mode)
        self.assertEqual(True, single_site.flows_enabled)
        self.assertEqual(True, single_site.cataloging_enabled)
        self.assertEqual(True, single_site.flow_auto_save_enabled)
        self.assertEqual(False, single_site.web_extraction_enabled)
        self.assertEqual(True, single_site.metrics_content_type_enabled)
        self.assertEqual(False, single_site.notify_site_admins_on_throttle)
        self.assertEqual(True, single_site.authoring_enabled)
        self.assertEqual(True, single_site.custom_subscription_email_enabled)
        self.assertEqual("*****@*****.**", single_site.custom_subscription_email)
        self.assertEqual(True, single_site.custom_subscription_footer_enabled)
        self.assertEqual("example_footer", single_site.custom_subscription_footer)
        self.assertEqual("EnabledByDefault", single_site.ask_data_mode)
        self.assertEqual(False, single_site.named_sharing_enabled)
        self.assertEqual(True, single_site.mobile_biometrics_enabled)
        self.assertEqual(False, single_site.sheet_image_enabled)
        self.assertEqual(True, single_site.derived_permissions_enabled)
        self.assertEqual("FULL", single_site.user_visibility_mode)
        self.assertEqual(False, single_site.use_default_time_zone)
        self.assertEqual("America/Los_Angeles", single_site.time_zone)
        self.assertEqual(True, single_site.auto_suspend_refresh_enabled)
        self.assertEqual(55, single_site.auto_suspend_refresh_inactivity_window)
Exemplo n.º 21
0
 def test_update_missing_id(self) -> None:
     single_site = TSC.SiteItem("test", "test")
     self.assertRaises(TSC.MissingRequiredFieldError, self.server.sites.update, single_site)