8000 Add api annotation to all current endpoints (#125) · tableau/server-client-python@2f66a6d · GitHub
[go: up one dir, main page]

Skip to content

Commit 2f66a6d

Browse files
authored
Add api annotation to all current endpoints (#125)
Part two of #125 This backfills all existing APIs with their minimum version. Checking this in early in release cycle for baketime.
1 parent 43d5088 commit 2f66a6d

14 files changed

+63
-14
lines changed

tableauserverclient/server/endpoint/auth_endpoint.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from .endpoint import Endpoint
1+
from .endpoint import Endpoint, api
22
from .. import RequestFactory, NAMESPACE
33
import xml.etree.ElementTree as ET
44
import logging
@@ -21,6 +21,7 @@ def __exit__(self, exc_type, exc_val, exc_tb):
2121
def baseurl(self):
2222
return "{0}/auth".format(self.parent_srv.baseurl)
2323

24+
@api(version="2.0")
2425
def sign_in(self, auth_req):
2526
url = "{0}/{1}".format(self.baseurl, 'signin')
2627
signin_req = RequestFactory.Auth.signin_req(auth_req)
@@ -35,6 +36,7 @@ def sign_in(self, auth_req):
3536
logger.info('Signed into {0} as {1}'.format(self.parent_srv.server_address, auth_req.username))
3637
return Auth.contextmgr(self.sign_out)
3738

39+
@api(version="2.0")
3840
def sign_out(self):
3941
url = "{0}/{1}".format(self.baseurl, 'signout')
4042
# If there are no auth tokens you're already signed out. No-op

tableauserverclient/server/endpoint/datasources_endpoint.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from .endpoint import Endpoint
1+
from .endpoint import Endpoint, api
22
from .exceptions import MissingRequiredFieldError
33
from .fileuploads_endpoint import Fileuploads
44
from .. import RequestFactory, DatasourceItem, PaginationItem, ConnectionItem
@@ -22,6 +22,7 @@ def baseurl(self):
2222
return "{0}/sites/{1}/datasources".format(self.parent_srv.baseurl, self.parent_srv.site_id)
2323

2424
# Get all datasources
25+
@api(version="2.0")
2526
def get(self, req_options=None):
2627
logger.info('Querying all datasources on site')
2728
url = self.baseurl
@@ -31,6 +32,7 @@ def get(self, req_options=None):
3132
return all_datasource_items, pagination_item
3233

3334
# Get 1 datasource by id
35+
@api(version="2.0")
3436
def get_by_id(self, datasource_id):
3537
if not datasource_id:
3638
error = "Datasource ID undefined."
@@ -41,6 +43,7 @@ def get_by_id(self, datasource_id):
4143
return DatasourceItem.from_response(server_response.content)[0]
4244

4345
# Populate datasource item's connections
46+
@api(version="2.0")
4447
def populate_connections(self, datasource_item):
4548
if not datasource_item.id:
4649
error = 'Datasource item missing ID. Datasource must be retrieved from server first.'
@@ -51,6 +54,7 @@ def populate_connections(self, datasource_item):
5154
logger.info('Populated connections for datasource (ID: {0})'.format(datasource_item.id))
5255

5356
# Delete 1 datasource by id
57+
@api(version="2.0")
5458
def delete(self, datasource_id):
5559
if not datasource_id:
5660
error = "Datasource ID undefined."
@@ -60,6 +64,7 @@ def delete(self, datasource_id):
6064
logger.info('Deleted single datasource (ID: {0})'.format(datasource_id))
6165

6266
# Download 1 datasource by id
67+
@api(version="2.0")
6368
def download(self, datasource_id, filepath=None):
6469
if not datasource_id:
6570
error = "Datasource ID undefined."
@@ -81,6 +86,7 @@ def download(self, datasource_id, filepath=None):
8186
return os.path.abspath(filepath)
8287

8388
# Update datasource
89+
@api(version="2.0")
8490
def update(self, datasource_item):
8591
if not datasource_item.id:
8692
error = 'Datasource item missing ID. Datasource must be retrieved from server first.'
@@ -93,6 +99,7 @@ def update(self, datasource_item):
9399
return updated_datasource._parse_common_tags(server_response.content)
94100

95101
# Publish datasource
102+
@api(version="2.0")
96103
def publish(self, datasource_item, file_path, mode, connection_credentials=None):
97104
if not os.path.isfile(file_path):
98105
error = "File path does not lead to an existing file."

tableauserverclient/server/endpoint/endpoint.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ def api(version):
9898
def _decorator(func):
9999
@wraps(func)
100100
def wrapper(self, *args, **kwargs):
101-
server_version = Version(self.parent_srv.version)
101+
server_version = Version(self.parent_srv.version or "0.0")
102102
minimum_supported = Version(version)
103103
if server_version < minimum_supported:
104104
error = "This endpoint is not available in API version {}. Requires {}".format(

tableauserverclient/server/endpoint/fileuploads_endpoint.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from .exceptions import MissingRequiredFieldError
2-
from .endpoint import Endpoint
2+
from .endpoint import Endpoint, api
33
from .. import RequestFactory
44
from ...models.fileupload_item import FileuploadItem
55
import os.path
@@ -20,6 +20,7 @@ def __init__(self, parent_srv):
2020
def baseurl(self):
2121
return "{0}/sites/{1}/fileUploads".format(self.parent_srv.baseurl, self.parent_srv.site_id)
2222

23+
@api(version="2.0")
2324
def initiate(self):
2425
url = self.baseurl
2526
server_response = self.post_request(url, '')
@@ -28,6 +29,7 @@ def initiate(self):
2829
logger.info('Initiated file upload session (ID: {0})'.format(self.upload_id))
2930
return self.upload_id
3031

32+
@api(version="2.0")
3133
def append(self, xml_request, content_type):
3234
if not self.upload_id:
3335
error = "File upload session must be initiated first."

tableauserverclient/server/endpoint/groups_endpoint.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from .endpoint import Endpoint
1+
from .endpoint import Endpoint, api
22
from .exceptions import MissingRequiredFieldError
33
from ...models.exceptions import UnpopulatedPropertyError
44
from .. import RequestFactory, GroupItem, UserItem, PaginationItem
@@ -13,6 +13,7 @@ def baseurl(self):
1313
return "{0}/sites/{1}/groups".format(self.parent_srv.baseurl, self.parent_srv.site_id)
1414

1515
# Gets all groups
16+
@api(version="2.0")
1617
def get(self, req_options=None):
1718
logger.info('Querying all groups on site')
1819
url = self.baseurl
@@ -22,6 +23,7 @@ def get(self, req_options=None):
2223
return all_group_items, pagination_item
2324

2425
# Gets all users in a given group
26+
@api(version="2.0")
2527
def populate_users(self, group_item, req_options=None):
2628
if not group_item.id:
2729
error = "Group item missing ID. Group must be retrieved from server first."
@@ -34,6 +36,7 @@ def populate_users(self, group_item, req_options=None):
3436
return pagination_item
3537

3638
# Deletes 1 group by id
39+
@api(version="2.0")
3740
def delete(self, group_id):
3841
if not group_id:
3942
error = "Group ID undefined."
@@ -42,13 +45,16 @@ def delete(self, group_id):
4245
self.delete_request(url)
4346
logger.info('Deleted single group (ID: {0})'.format(group_id))
4447

48+
# Create a 'local' Tableau group
49+
@api(version="2.0")
4550
def create(self, group_item):
4651
url = self.baseurl
4752
create_req = RequestFactory.Group.create_req(group_item)
4853
server_response = self.post_request(url, create_req)
4954
return GroupItem.from_response(server_response.content)[0]
5055

5156
# Removes 1 user from 1 group
57+
@api(version="2.0")
5258
def remove_user(self, group_item, user_id):
5359
self._remove_user(group_item, user_id)
5460
try:
@@ -63,6 +69,7 @@ def remove_user(self, group_item, user_id):
6369
logger.info('Removed user (id: {0}) from group (ID: {1})'.format(user_id, group_item.id))
6470

6571
# Adds 1 user to 1 group
72+
@api(version="2.0")
6673
def add_user(self, group_item, user_id):
6774
new_user = self._add_user(group_item, user_id)
6875
try:

tableauserverclient/server/endpoint/projects_endpoint.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from .endpoint import Endpoint
1+
from .endpoint import Endpoint, api
22
from .exceptions import MissingRequiredFieldError
33
from .. import RequestFactory, ProjectItem, PaginationItem
44
import logging
@@ -12,6 +12,7 @@ class Projects(Endpoint):
1212
def baseurl(self):
1313
return "{0}/sites/{1}/projects".format(self.parent_srv.baseurl, self.parent_srv.site_id)
1414

15+
@api(version="2.0")
1516
def get(self, req_options=None):
1617
logger.info('Querying all projects on site')
1718
url = self.baseurl
@@ -20,6 +21,7 @@ def get(self, req_options=None):
2021
all_project_items = ProjectItem.from_response(server_response.content)
2122
return all_project_items, pagination_item
2223

24+
@api(version="2.0")
2325
def delete(self, project_id):
2426
if not project_id:
2527
error = "Project ID undefined."
@@ -28,6 +30,7 @@ def delete(self, project_id):
2830
self.delete_request(url)
2931
logger.info('Deleted single project (ID: {0})'.format(project_id))
3032

33+
@api(version="2.0")
3134
def update(self, project_item):
3235
if not project_item.id:
3336
error = "Project item missing ID."
@@ -40,6 +43,7 @@ def update(self, project_item):
4043
updated_project = copy.copy(project_item)
4144
return updated_project._parse_common_tags(server_response.content)
4245

46+
@api(version="2.0")
4347
def create(self, project_item):
4448
url = self.baseurl
4549
create_req = RequestFactory.Project.create_req(project_item)

tableauserverclient/server/endpoint/schedules_endpoint.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from .endpoint import Endpoint
1+
from .endpoint import Endpoint, api
22
from .exceptions import MissingRequiredFieldError
33
from .. import RequestFactory, PaginationItem, ScheduleItem
44
import logging
@@ -12,6 +12,7 @@ class Schedules(Endpoint):
1212
def baseurl(self):
1313
return "{0}/schedules".format(self.parent_srv.baseurl)
1414

15+
@api(version="2.3")
1516
def get(self, req_options=None):
1617
logger.info("Querying all schedules")
1718
url = self.baseurl
@@ -20,6 +21,7 @@ def get(self, req_options=None):
2021
all_schedule_items = ScheduleItem.from_response(server_response.content)
2122
return all_schedule_items, pagination_item
2223

24+
@api(version="2.3")
2325
def delete(self, schedule_id):
2426
if not schedule_id:
2527
error = "Schedule ID undefined"
@@ -28,6 +30,7 @@ def delete(self, schedule_id):
2830
self.delete_request(url)
2931
logger.info("Deleted single schedule (ID: {0})".format(schedule_id))
3032

33+
@api(version="2.3")
3134
def update(self, schedule_item):
3235
if not schedule_item.id:
3336
error = "Schedule item missing ID."
@@ -43,6 +46,7 @@ def update(self, schedule_item):
4346
updated_schedule = copy.copy(schedule_item)
4447
return updated_schedule._parse_common_tags(server_response.content)
4548

49+
@api(version="2.3")
4650
def create(self, schedule_item):
4751
if schedule_item.interval_item is None:
4852
error = "Interval item must be defined."

tableauserverclient/server/endpoint/server_info_endpoint.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from .endpoint import Endpoint
1+
from .endpoint import Endpoint, api
22
from .exceptions import ServerResponseError, ServerInfoEndpointNotFoundError
33
from ...models import ServerInfoItem
44
import logging
@@ -11,6 +11,7 @@ class ServerInfo(Endpoint):
1111
def baseurl(self):
1212
return "{0}/serverInfo".format(self.parent_srv.baseurl)
1313

14+
@api(version="2.4")
1415
def get(self):
1516
""" Retrieve the server info for the server. This is an unauthenticated call """
1617
try:

tableauserverclient/server/endpoint/sites_endpoint.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from .endpoint import Endpoint
1+
from .endpoint import Endpoint, api
22
from .exceptions import MissingRequiredFieldError
33
from .. import RequestFactory, SiteItem, PaginationItem
44
import logging
@@ -13,6 +13,7 @@ def baseurl(self):
1313
return "{0}/sites".format(self.parent_srv.baseurl)
1414

1515
# Gets all sites
16+
@api(version="2.0")
1617
def get(self, req_options=None):
1718
logger.info('Querying all sites on site')
1819
url = self.baseurl
@@ -22,6 +23,7 @@ def get(self, req_options=None):
2223
return all_site_items, pagination_item
2324

2425
# Gets 1 site by id
26+
@api(version="2.0")
2527
def get_by_id(self, site_id):
2628
if not site_id:
2729
error = "Site ID undefined."
@@ -32,6 +34,7 @@ def get_by_id(self, site_id):
3234
return SiteItem.from_response(server_response.content)[0]
3335

3436
# Update site
37+
@api(version="2.0")
3538
def update(self, site_item):
3639
if not site_item.id:
3740
error = "Site item missing ID."
@@ -49,6 +52,7 @@ def update(self, site_item):
4952
return update_site._parse_common_tags(server_response.content)
5053

5154
# Delete 1 site object
55+
@api(version="2.0")
5256
def delete(self, site_id):
5357
if not site_id:
5458
error = "Site ID undefined."
@@ -63,6 +67,7 @@ def de 10000 lete(self, site_id):
6367
logger.info('Deleted single site (ID: {0}) and signed out'.format(site_id))
6468

6569
# Create new site
70+
@api(version="2.0")
6671
def create(self, site_item):
6772
if site_item.admin_mode:
6873
if site_item.admin_mode == SiteItem.AdminMode.ContentOnly and site_item.user_quota:

tableauserverclient/server/endpoint/users_endpoint.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from .endpoint import Endpoint
1+
from .endpoint import Endpoint, api
22
from .exceptions import MissingRequiredFieldError
33
from .. import RequestFactory, UserItem, WorkbookItem, PaginationItem
44
import logging
@@ -13,6 +13,7 @@ def baseurl(self):
1313
return "{0}/sites/{1}/users".format(self.parent_srv.baseurl, self.parent_srv.site_id)
1414

1515
# Gets all users
16+
@api(version="2.0")
1617
def get(self, req_options=None):
1718
logger.info('Querying all users on site')
1819
url = self.baseurl
@@ -22,6 +23,7 @@ def get(self, req_options=None):
2223
return all_user_items, pagination_item
2324

2425
# Gets 1 user by id
26+
@api(version="2.0")
2527
def get_by_id(self, user_id):
2628
if not user_id:
2729
error = "User ID undefined."
@@ -32,6 +34,7 @@ def get_by_id(self, user_id):
3234
return UserItem.from_response(server_response.content).pop()
3335

3436
# Update user
37+
@api(version="2.0")
3538
def update(self, user_item, password=None):
3639
if not user_item.id:
3740
error = "User item missing ID."
@@ -45,6 +48,7 @@ def update(self, user_item, password=None):
4548
return updated_item._parse_common_tags(server_response.content)
4649

4750
# Delete 1 user by id
51+
@api(version="2.0")
4852
def remove(self, user_id):
4953
if not user_id:
5054
error = "User ID undefined."
@@ -54,6 +58,7 @@ def remove(self, user_id):
5458
logger.info('Removed single user (ID: {0})'.format(user_id))
5559

5660
# Add new user to site
61+
@api(version="2.0")
5762
def add(self, user_item):
5863
url = self.baseurl
5964
add_req = RequestFactory.User.add_req(user_item)
@@ -63,6 +68,7 @@ def add(self, user_item):
6368
return new_user
6469

6570
# Get workbooks for user
71+
@api(version="2.0")
6672
def populate_workbooks(self, user_item, req_options=None):
6773
if not user_item.id:
6874
error = "User item missing ID."

tableauserverclient/server/endpoint/views_endpoint.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from .endpoint import Endpoint
1+
from .endpoint import Endpoint, api
22
from .exceptions import MissingRequiredFieldError
33
from .. import ViewItem, PaginationItem
44
import logging
@@ -11,6 +11,7 @@ class Views(Endpoint):
1111
def baseurl(self):
1212
return "{0}/sites/{1}".format(self.parent_srv.baseurl, self.parent_srv.site_id)
1313

14+
@api(version="2.2")
1415
def get(self, req_options=None):
1516
logger.info('Querying all views on site')
1617
url = "{0}/views".format(self.baseurl)
@@ -19,6 +20,7 @@ def get(self, req_options=None):
1920
all_view_items = ViewItem.from_response(server_response.content)
2021
return all_view_items, pagination_item
2122

23+
@api(version="2.0")
2224
def populate_preview_image(self, view_item):
2325
if not view_item.id or not view_item.workbook_id:
2426
error = "View item missing ID or workbook ID."

0 commit comments

Comments
 (0)
0