diff --git a/docs/docs/api-ref.md b/docs/docs/api-ref.md index 3819b70..cf6bc96 100644 --- a/docs/docs/api-ref.md +++ b/docs/docs/api-ref.md @@ -48,6 +48,30 @@ class Datasource(dsxml, filename=None) class Connection(connxml) ``` +The Connection class represents a tableau data connection. It can be from any type of connection found in `dbclass.py` via `is_valid_dbclass` + +**Params:** + +**Raises:** + +**Methods:** + +**Properities:** + +`self.server:` Returns a string containing the server. + +`self.dbname:` Returns a string containing the database name. + +`self.username:` Returns a string containing the username. + +`self.dbclass:` Returns a string containing the database class. + +`self.port:` Returns a string containing the port. + +`self.query_band:` Returns a string containing the query band. + +`self.initial_sql:` Returns a string containing the initial sql. + ## Fields ```python class Workbook(column_xml=None, metadata_xml=None) diff --git a/tableaudocumentapi/connection.py b/tableaudocumentapi/connection.py index 7bdc1a9..30343b5 100644 --- a/tableaudocumentapi/connection.py +++ b/tableaudocumentapi/connection.py @@ -18,12 +18,15 @@ def __init__(self, connxml): self._authentication = connxml.get('authentication') self._class = connxml.get('class') self._port = connxml.get('port', None) + self._query_band = connxml.get('query-band-spec', None) + self._initial_sql = connxml.get('one-time-sql', None) def __repr__(self): return "''".format(self._server, self._dbname, hex(id(self))) @classmethod - def from_attributes(cls, server, dbname, username, dbclass, port=None, authentication=''): + def from_attributes(cls, server, dbname, username, dbclass, port=None, query_band=None, + initial_sql=None, authentication=''): """Creates a new connection that can be added into a Data Source. defaults to `''` which will be treated as 'prompt' by Tableau.""" @@ -34,6 +37,8 @@ def from_attributes(cls, server, dbname, username, dbclass, port=None, authentic xml.username = username xml.dbclass = dbclass xml.port = port + xml.query_band = query_band + xml.initial_sql = initial_sql return xml @@ -149,3 +154,55 @@ def port(self, value): pass else: self._connectionXML.set('port', value) + + @property + def query_band(self): + """Query band passed on connection to database.""" + return self._query_band + + @query_band.setter + def query_band(self, value): + """Set the connection's query_band property. + + Args: + value: New query_band value. String. + + Returns: + Nothing. + """ + + self._query_band = value + # If query band is None we remove the element and don't write it to XML + if value is None: + try: + del self._connectionXML.attrib['query-band-spec'] + except KeyError: + pass + else: + self._connectionXML.set('query-band-spec', value) + + @property + def initial_sql(self): + """Initial SQL to be run.""" + return self._initial_sql + + @initial_sql.setter + def initial_sql(self, value): + """Set the connection's initial_sql property. + + Args: + value: New initial_sql value. String. + + Returns: + Nothing. + """ + + self._initial_sql = value + # If initial_sql is None we remove the element and don't write it to XML + if value is None: + try: + del self._connectionXML.attrib['one-time-sql'] + except KeyError: + pass + else: + self._connectionXML.set('one-time-sql', value) diff --git a/test/assets/CONNECTION.xml b/test/assets/CONNECTION.xml index beb606f..56d17d5 100644 --- a/test/assets/CONNECTION.xml +++ b/test/assets/CONNECTION.xml @@ -1 +1 @@ - + diff --git a/test/bvt.py b/test/bvt.py index e09ec55..23869fb 100644 --- a/test/bvt.py +++ b/test/bvt.py @@ -60,6 +60,8 @@ def test_can_read_attributes_from_connection(self): self.assertEqual(conn.dbclass, 'sqlserver') self.assertEqual(conn.authentication, 'sspi') self.assertEqual(conn.port, '1433') + self.assertEqual(conn.initial_sql, '') + self.assertEqual(conn.query_band, '') def test_can_write_attributes_to_connection(self): conn = Connection(self.connection) @@ -67,10 +69,14 @@ def test_can_write_attributes_to_connection(self): conn.server = 'mssql2014' conn.username = 'bob' conn.port = '1337' + conn.initial_sql = "insert values (1, 'winning') into schema.table" + conn.query_band = 'TableauReport=' self.assertEqual(conn.dbname, 'BubblesInMyDrink') self.assertEqual(conn.username, 'bob') self.assertEqual(conn.server, 'mssql2014') self.assertEqual(conn.port, '1337') + self.assertEqual(conn.initial_sql, "insert values (1, 'winning') into schema.table") + self.assertEqual(conn.query_band, 'TableauReport=') def test_can_delete_port_from_connection(self): conn = Connection(self.connection) @@ -78,6 +84,18 @@ def test_can_delete_port_from_connection(self): self.assertEqual(conn.port, None) self.assertIsNone(conn._connectionXML.get('port')) + def test_can_delete_initial_sql_from_connection(self): + conn = Connection(self.connection) + conn.initial_sql = None + self.assertEqual(conn.initial_sql, None) + self.assertIsNone(conn._connectionXML.get('initial_sql')) + + def test_can_delete_query_band_from_connection(self): + conn = Connection(self.connection) + conn.query_band = None + self.assertEqual(conn.query_band, None) + self.assertIsNone(conn._connectionXML.get('query_band')) + def test_bad_dbclass_rasies_attribute_error(self): conn = Connection(self.connection) conn.dbclass = 'sqlserver' pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy