8000 Adding DataAccelerationReport end point and item by guodah · Pull Request #596 · tableau/server-client-python · GitHub
[go: up one dir, main page]

Skip to content
8000
8000

Adding DataAccelerationReport end point and item #596

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 24 commits into from
Apr 9, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
d2e76ca
Merge pull request #1 from tableau/development
guodah Dec 18, 2019
74af749
fixing a bug due to bool(time(0,0)) is false
guodah Dec 24, 2019
6c47060
Merge pull request #2 from tableau/development
guodah Jan 14, 2020
7037289
Merge pull request #3 from tableau/development
guodah Jan 15, 2020
08be1a7
Merge pull request #4 from tableau/development
guodah Feb 28, 2020
fb28098
replace materialized views with data acceleration
guodah Mar 1, 2020
91ddf68
Merge pull request #5 from guodah/replace_mat_views_with_data_acceler…
guodah Mar 1, 2020
c93a400
made changes in tests
guodah Mar 1, 2020
d9061fd
Merge pull request #6 from guodah/replace_mat_views_with_data_acceler…
guodah Mar 1, 2020
2064f6d
fixed a unit test
guodah Mar 1, 2020
2a05834
restore deleted lines by mistake
guodah Mar 1, 2020
592716c
replace materialize_workbooks.py with accelerate_workbooks.py
guodah Mar 1, 2020
ccbf675
undo a fix to test_sort.py
guodah Mar 2, 2020
8bc913e
format changes
guodah Mar 2, 2020
2721b2f
another format change
guodah Mar 2, 2020
aea6a99
format change
guodah Mar 2, 2020
994c75a
remove accelerate_workbooks.py
guodah Mar 3, 2020
a781d1e
Merge pull request #7 from tableau/development
guodah Mar 23, 2020
d05d634
adding additional fields to data_acceleration_config
guodah Mar 23, 2020
4cd6df9
Merge pull request #8 from tableau/development
guodah Apr 6, 2020
b225777
add acceleration report endpoint
guodah Apr 6, 2020
547c9e3
Merge pull request #9 from guodah/add_end_point_for_acceleration_report
guodah Apr 6, 2020
4e63fb0
adding unit test
guodah Apr 7, 2020
52aa922
fixed over-indentation
guodah Apr 7, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions tableauserverclient/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from .connection_credentials import ConnectionCredentials
from .connection_item import ConnectionItem
from .column_item import ColumnItem
from .data_acceleration_report_item import DataAccelerationReportItem
from .datasource_item import DatasourceItem
from .database_item import DatabaseItem
from .exceptions import UnpopulatedPropertyError
Expand Down
75 changes: 75 additions & 0 deletions tableauserverclient/models/data_acceleration_report_item.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
import xml.etree.ElementTree as ET


class DataAccelerationReportItem(object):
class ComparisonRecord(object):
def __init__(self, site, sheet_uri, unaccelerated_session_count,
8000 avg_non_accelerated_plt, accelerated_session_count,
avg_accelerated_plt):
self._site = site
self._sheet_uri = sheet_uri
self._unaccelerated_session_count = unaccelerated_session_count
self._avg_non_accelerated_plt = avg_non_accelerated_plt
self._accelerated_session_count = accelerated_session_count
self._avg_accelerated_plt = avg_accelerated_plt

@property
def site(self):
return self._site

@property
def sheet_uri(self):
return self._sheet_uri

@property
def site(self):
return self._site

@property
def unaccelerated_session_count(self):
return self._unaccelerated_session_count

@property
def accelerated_session_count(self):
return self._accelerated_session_count

@property
def avg_accelerated_plt(self):
return self._avg_accelerated_plt

@property
def avg_non_accelerated_plt(self):
return self._avg_non_accelerated_plt

def __init__(self, comparison_records):
self._comparison_records = comparison_records

@property
def comparison_records(self):
return self._comparison_records

@staticmethod
def _parse_element(comparison_record_xml, ns):
site = comparison_record_xml.get('site', None)
sheet_uri = comparison_record_xml.get('sheetURI', None)
unaccelerated_session_count = comparison_record_xml.get('unacceleratedSessionCount', None)
avg_non_accelerated_plt = comparison_record_xml.get('averageNonAcceleratedPLT', None)
accelerated_session_count = comparison_record_xml.get('acceleratedSessionCount', None)
avg_accelerated_plt = comparison_record_xml.get('averageAcceleratedPLT', None)
return site, sheet_uri, unaccelerated_session_count, avg_non_accelerated_plt, \
accelerated_session_count, avg_accelerated_plt

@classmethod
def from_response(cls, resp, ns):
comparison_records = list()
parsed_response = ET.fromstring(resp)
all_comparison_records_xml = parsed_response.findall('.//t:comparisonRecord', namespaces=ns)
for comparison_record_xml in all_comparison_records_xml:
(site, sheet_uri, unaccelerated_session_count, avg_non_accelerated_plt,
accelerated_session_count, avg_accelerated_plt) = cls._parse_element(comparison_record_xml, ns)

comparison_record = DataAccelerationReportItem.ComparisonRecord(
site, sheet_uri, unaccelerated_session_count, avg_non_accelerated_plt,
accelerated_session_count, avg_accelerated_plt)
comparison_records.append(comparison_record)
return cls(comparison_records)
1 change: 1 addition & 0 deletions tableauserverclient/server/endpoint/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from .auth_endpoint import Auth
from .data_acceleration_report_endpoint import DataAccelerationReport
from .datasources_endpoint import Datasources
from .databases_endpoint import Databases
from .endpoint import Endpoint
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
from .endpoint import api, Endpoint
from .permissions_endpoint import _PermissionsEndpoint
from .default_permissions_endpoint import _DefaultPermissionsEndpoint

from ...models.data_acceleration_report_item import DataAccelerationReportItem

import logging

logger = logging.getLogger('tableau.endpoint.data_acceleration_report')


class DataAccelerationReport(Endpoint):
def __init__(self, parent_srv):
super(DataAccelerationReport, self).__init__(parent_srv)

self._permissions = _PermissionsEndpoint(parent_srv, lambda: self.baseurl)
self._default_permissions = _DefaultPermissionsEndpoint(parent_srv, lambda: self.baseurl)

@property
def baseurl(self):
return "{0}/sites/{1}/dataAccelerationReport".format(self.parent_srv.baseurl, self.parent_srv.site_id)

@api(version="3.8")
def get(self, req_options=None):
logger.info("Querying data acceleration report")
url = self.baseurl
server_response = self.get_request(url, req_options)
data_acceleration_report = DataAccelerationReportItem.from_response(
server_response.content, self.parent_srv.namespace)
return data_acceleration_report
3 changes: 2 additions & 1 deletion tableauserverclient/server/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from ..namespace import Namespace
from .endpoint import Sites, Views, Users, Groups, Workbooks, Datasources, Projects, Auth, \
Schedules, ServerInfo, Tasks, ServerInfoEndpointNotFoundError, Subscriptions, Jobs, Metadata,\
Databases, Tables, Flows, Webhooks
Databases, Tables, Flows, Webhooks, DataAccelerationReport
from .endpoint.exceptions import EndpointUnavailableError, ServerInfoEndpointNotFoundError

import requests
Expand Down Expand Up @@ -56,6 +56,7 @@ def __init__(self, server_address, use_server_version=False):
self.databases = Databases(self)
self.tables = Tables(self)
self.webhooks = Webhooks(self)
self.data_acceleration_report = DataAccelerationReport(self)
self._namespace = Namespace()

if use_server_version:
Expand Down
20 changes: 20 additions & 0 deletions test/assets/data_acceleration_report.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?xml version='1.0' encoding='UTF-8'?>
<tsResponse
xmlns="http://tableau.com/api"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-3.8.xsd">
<dataAccelerationReport>
<comparisonRecord site="site-1"
sheetURI="sheet-1"
unacceleratedSessionCount="0"
averageNonAcceleratedPLT="0.0"
acceleratedSessionCount="1"
averageAcceleratedPLT="0.166"/>
<comparisonRecord site="site-2"
sheetURI="sheet-2"
unacceleratedSessionCount="2"
averageNonAcceleratedPLT="1.29"
acceleratedSessionCount="3"
averageAcceleratedPLT="0.372"/>
</dataAccelerationReport>
</tsResponse>
42 changes: 42 additions & 0 deletions test/test_data_acceleration_report.py
8C29
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import unittest
import os
import requests_mock
import xml.etree.ElementTree as ET
import tableauserverclient as TSC
from ._utils import read_xml_asset, read_xml_assets, asset

GET_XML = 'data_acceleration_report.xml'


class DataAccelerationReportTests(unittest.TestCase):
def setUp(self):
self.server = TSC.Server('http://test')

# Fake signin
self.server._site_id = 'dad65087-b08b-4603-af4e-2887b8aafc67'
self.server._auth_token = 'j80k54ll2lfMZ0tv97mlPvvSCRyD0DOM'
self.server.version = "3.8"

self.baseurl = self.server.data_acceleration_report.baseurl

def test_get(self):
response_xml = read_xml_asset(GET_XML)
with requests_mock.mock() as m:
m.get(self.baseurl, text=response_xml)
data_acceleration_report = self.server.data_acceleration_report.get()

self.assertEqual(2, len(data_acceleration_report.comparison_records))

self.assertEqual("site-1", data_acceleration_report.comparison_records[0].site)
self.assertEqual("sheet-1", data_acceleration_report.comparison_records[0].sheet_uri)
self.assertEqual("0", data_acceleration_report.comparison_records[0].unaccelerated_session_count)
self.assertEqual("0.0", data_acceleration_report.comparison_records[0].avg_non_accelerated_plt)
self.assertEqual("1", data_acceleration_report.comparison_records[0].accelerated_session_count)
self.assertEqual("0.166", data_acceleration_report.comparison_records[0].avg_accelerated_plt)

self.assertEqual("site-2", data_acceleration_report.comparison_records[1].site)
self.assertEqual("sheet-2", data_acceleration_report.comparison_records[1].sheet_uri)
self.assertEqual("2", data_acceleration_report.comparison_records[1].unaccelerated_session_count)
self.assertEqual("1.29", data_acceleration_report.comparison_records[1].avg_non_accelerated_plt)
self.assertEqual("3", data_acceleration_report.comparison_records[1].accelerated_session_count)
self.assertEqual("0.372", data_acceleration_report.comparison_records[1].avg_accelerated_plt)
0