From cbbfa0bce4635475ad093082b957fb9e8d016f61 Mon Sep 17 00:00:00 2001 From: T8y8 Date: Thu, 8 Dec 2016 15:28:05 -0800 Subject: [PATCH 1/2] protoype --- setup.py | 40 ++++++++++++++++++++++++++++++++++++++-- smoke.py | 24 ++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 smoke.py diff --git a/setup.py b/setup.py index ac932390d..eb5d4a2aa 100644 --- a/setup.py +++ b/setup.py @@ -1,8 +1,43 @@ try: - from setuptools import setup + from setuptools import setup, Command except ImportError: from distutils.core import setup + +class LiveTestCommand(Command): + + description = "Run tests against a live server" + + # [('long', 'short', 'description')] + user_options = [('server=', 's', "Server to connect to"), + ('site=', 't', "Sute to connect to"), + ('username=', 'u', "Username for tests (system admin)")] + + def initialize_options(self): + self.server = None + self.username = None + self.password = None + self.site = None + + def finalize_options(self): + if self.server is None: + self.server = "DEFAULT SERVER" + if self.username is None: + self.username = "DEFAULT USERNAME" + if self.site is None: + self.site = "" + + import getpass + self.password = getpass.getpass() + + def run(self): + import subprocess as sp + import os + + with open(os.devnull, 'wb') as silent: + sp.check_call(['python', 'smoke.py', self.server, self.username, self.password, self.site], stdout=silent) + + setup( name='tableauserverclient', version='0.3', @@ -19,5 +54,6 @@ ], tests_require=[ 'requests-mock>=1.0,<1.1a0' - ] + ], + cmdclass={'livetest': LiveTestCommand} ) diff --git a/smoke.py b/smoke.py new file mode 100644 index 000000000..4b43a852c --- /dev/null +++ b/smoke.py @@ -0,0 +1,24 @@ +import sys +import tableauserverclient as TSC + +server, username, password, site = sys.argv[1:] + + +authz = TSC.TableauAuth(username, password) +server = TSC.Server(server) + +server.auth.sign_in(authz) + +for w in TSC.Pager(server.workbooks): + print(w) + +for u in TSC.Pager(server.users): + print(u) + +for p in TSC.Pager(server.projects): + print(p) + +for h in TSC.Pager(server.schedules): + print(h) + +server.auth.sign_out() From f6510d9d80c77479c8a765c2d9392a181e2c0eb3 Mon Sep 17 00:00:00 2001 From: T8y8 Date: Thu, 2 Feb 2017 11:12:45 -0800 Subject: [PATCH 2/2] First run at new system --- setup.py | 40 +-------------- smoke.py | 24 --------- smoke/__init__.py | 1 + smoke/smoke.py | 77 ++++++++++++++++++++++++++++ tableauserverclient/server/server.py | 1 + 5 files changed, 81 insertions(+), 62 deletions(-) delete mode 100644 smoke.py create mode 100644 smoke/__init__.py create mode 100644 smoke/smoke.py diff --git a/setup.py b/setup.py index eb5d4a2aa..ac932390d 100644 --- a/setup.py +++ b/setup.py @@ -1,43 +1,8 @@ try: - from setuptools import setup, Command + from setuptools import setup except ImportError: from distutils.core import setup - -class LiveTestCommand(Command): - - description = "Run tests against a live server" - - # [('long', 'short', 'description')] - user_options = [('server=', 's', "Server to connect to"), - ('site=', 't', "Sute to connect to"), - ('username=', 'u', "Username for tests (system admin)")] - - def initialize_options(self): - self.server = None - self.username = None - self.password = None - self.site = None - - def finalize_options(self): - if self.server is None: - self.server = "DEFAULT SERVER" - if self.username is None: - self.username = "DEFAULT USERNAME" - if self.site is None: - self.site = "" - - import getpass - self.password = getpass.getpass() - - def run(self): - import subprocess as sp - import os - - with open(os.devnull, 'wb') as silent: - sp.check_call(['python', 'smoke.py', self.server, self.username, self.password, self.site], stdout=silent) - - setup( name='tableauserverclient', version='0.3', @@ -54,6 +19,5 @@ def run(self): ], tests_require=[ 'requests-mock>=1.0,<1.1a0' - ], - cmdclass={'livetest': LiveTestCommand} + ] ) diff --git a/smoke.py b/smoke.py deleted file mode 100644 index 4b43a852c..000000000 --- a/smoke.py +++ /dev/null @@ -1,24 +0,0 @@ -import sys -import tableauserverclient as TSC - -server, username, password, site = sys.argv[1:] - - -authz = TSC.TableauAuth(username, password) -server = TSC.Server(server) - -server.auth.sign_in(authz) - -for w in TSC.Pager(server.workbooks): - print(w) - -for u in TSC.Pager(server.users): - print(u) - -for p in TSC.Pager(server.projects): - print(p) - -for h in TSC.Pager(server.schedules): - print(h) - -server.auth.sign_out() diff --git a/smoke/__init__.py b/smoke/__init__.py new file mode 100644 index 000000000..10efb0195 --- /dev/null +++ b/smoke/__init__.py @@ -0,0 +1 @@ +from . smoke import * \ No newline at end of file diff --git a/smoke/smoke.py b/smoke/smoke.py new file mode 100644 index 000000000..14901b8be --- /dev/null +++ b/smoke/smoke.py @@ -0,0 +1,77 @@ +import os +import unittest + +import tableauserverclient as TSC + +class SignInSignOutSmokeTest(unittest.TestCase): + + def setUp(self): + self.username = os.environ.get('TABLEAU_USERNAME', None) + self.server = os.environ.get('TABLEAU_SERVER', None) + self.password = os.environ.get('TABLEAU_PASSWORD', None) + self.site_id = os.environ.get('TABLEAU_SITE_ID', '') + + if not (self.username and self.server and self.password): + raise unittest.SkipTest("Environment variables must be set when run from inside UnitTest") + + + def test_sign_in_sign_out(self): + + authz = TSC.TableauAuth(self.username, self.password) + server = TSC.Server(self.server) + + server.auth.sign_in(authz) + server.auth.sign_out() + + def test_sign_in_get_sign_out(self): + + authz = TSC.TableauAuth(self.username, self.password) + server = TSC.Server(self.server) + + server.auth.sign_in(authz) + + for w in TSC.Pager(server.workbooks): + print(w.name) + + for u in TSC.Pager(server.users): + print(u.name) + + for p in TSC.Pager(server.projects): + print(p.name) + + for h in TSC.Pager(server.schedules): + print(h.name) + + server.auth.sign_out() + +if __name__ == "__main__": + import argparse + import sys + + parser = argparse.ArgumentParser(description='Initialize a server with content.') + parser.add_argument('--server', '-s', default=None, help='server address') + parser.add_argument('--site-id', '-si', default=None, help='site to use') + parser.add_argument('--username', '-u', default=None, help='username to sign into server') + parser.add_argument('unittest_args', nargs='*') + args = parser.parse_args() + + + # This could probably be made smarter, but after trying too hard + # to be clever, I opted for this simple and readable approach. + # This will merge whatever is provided in the command line into + # your environment variables + + if os.environ.get('TABLEAU_SERVER', None) is None: + os.environ['TABLEAU_SERVER'] = args.server + + if os.environ.get('TABLEAU_USERNAME', None) is None: + os.environ['TABLEAU_USERNAME'] = args.username + + if os.environ.get('TABLEAU_PASSWORD', None) is None: + import getpass + password = getpass.getpass("Password: ") + os.environ['TABLEAU_PASSWORD'] = password + + # Makes unittest and standalone play nice see http://stackoverflow.com/questions/1029891/ + sys.argv[1:] = args.unittest_args + unittest.main() \ No newline at end of file diff --git a/tableauserverclient/server/server.py b/tableauserverclient/server/server.py index a998bd76b..b2db759f4 100644 --- a/tableauserverclient/server/server.py +++ b/tableauserverclient/server/server.py @@ -51,6 +51,7 @@ def _clear_auth(self): self._site_id = None self._user_id = None self._auth_token = None + self._session.close() self._session = requests.Session() def _set_auth(self, site_id, user_id, auth_token):