Skip to content

Commit 92c8320

Browse files
committed
feat: get linked tasks
1 parent 8f0609d commit 92c8320

7 files changed

Lines changed: 48 additions & 7 deletions

File tree

tableauserverclient/__init__.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121
IntervalItem,
2222
JobItem,
2323
JWTAuth,
24+
LinkedTaskItem,
25+
LinkedTaskStepItem,
26+
LinkedTaskFlowRunItem,
2427
MetricItem,
2528
MonthlyInterval,
2629
PaginationItem,
@@ -116,4 +119,8 @@
116119
"Pager",
117120
"Server",
118121
"Sort",
122+
"LinkedTaskItem",
123+
"LinkedTaskStepItem",
124+
"LinkedTaskFlowRunItem",
125+
119126
]

tableauserverclient/models/__init__.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@
2222
HourlyInterval,
2323
)
2424
from tableauserverclient.models.job_item import JobItem, BackgroundJobItem
25+
from tableauserverclient.models.linked_tasks_item import (
26+
LinkedTaskItem,
27+
LinkedTaskStepItem,
28+
LinkedTaskFlowRunItem,
29+
)
2530
from tableauserverclient.models.metric_item import MetricItem
2631
from tableauserverclient.models.pagination_item import PaginationItem
2732
from tableauserverclient.models.permissions_item import PermissionsRule, Permission
@@ -91,4 +96,7 @@
9196
"ViewItem",
9297
"WebhookItem",
9398
"WorkbookItem",
99+
"LinkedTaskItem",
100+
"LinkedTaskStepItem",
101+
"LinkedTaskFlowRunItem",
94102
]

tableauserverclient/models/linked_tasks_item.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
from defusedxml.ElementTree import fromstring
33

44
from tableauserverclient.models.schedule_item import ScheduleItem
5-
from tableauserverclient.models.task_item import TaskItem
65

76
class LinkedTaskItem:
87
def __init__(self) -> None:

tableauserverclient/server/endpoint/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from tableauserverclient.server.endpoint.flow_task_endpoint import FlowTasks
1414
from tableauserverclient.server.endpoint.groups_endpoint import Groups
1515
from tableauserverclient.server.endpoint.jobs_endpoint import Jobs
16+
from tableauserverclient.server.endpoint.linked_tasks_endpoint import LinkedTasks
1617
from tableauserverclient.server.endpoint.metadata_endpoint import Metadata
1718
from tableauserverclient.server.endpoint.metrics_endpoint import Metrics
1819
from tableauserverclient.server.endpoint.projects_endpoint import Projects
@@ -44,6 +45,7 @@
4445
"FlowTasks",
4546
"Groups",
4647
"Jobs",
48+
"LinkedTasks",
4749
"Metadata",
4850
"Metrics",
4951
"Projects",
Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,26 @@
1-
from typing import Optional
1+
from typing import List, Optional, Tuple
2+
3+
from tableauserverclient.helpers.logging import logger
4+
from tableauserverclient.models.linked_tasks_item import LinkedTaskItem
5+
from tableauserverclient.models.pagination_item import PaginationItem
26
from tableauserverclient.server.endpoint.endpoint import QuerysetEndpoint, api
37
from tableauserverclient.server.request_options import RequestOptions
48

5-
class LinkedTasks(QuerysetEndpoint):
9+
class LinkedTasks(QuerysetEndpoint[LinkedTaskItem]):
610
def __init__(self, parent_srv):
711
super().__init__(parent_srv)
812
self._parent_srv = parent_srv
913

1014
@property
11-
def baseurl(self):
15+
def baseurl(self) -> str:
1216
return f"{self.parent_srv.baseurl}/sites/{self.parent_srv.site_id}/tasks/linked"
1317

1418
@api(version="3.15")
15-
def get(self, req_options: Optional[RequestOptions] = None):
16-
...
19+
def get(self, req_options: Optional["RequestOptions"] = None) -> Tuple[List[LinkedTaskItem], PaginationItem]:
20+
logger.info("Querying all linked tasks on site")
21+
url = self.baseurl
22+
server_response = self.get_request(url, req_options)
23+
pagination_item = PaginationItem.from_response(server_response.content, self.parent_srv.namespace)
24+
all_group_items = LinkedTaskItem.from_response(server_response.content, self.parent_srv.namespace)
25+
return all_group_items, pagination_item
1726

tableauserverclient/server/server.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
Metrics,
3434
Endpoint,
3535
CustomViews,
36+
LinkedTasks,
3637
)
3738
from tableauserverclient.server.exceptions import (
3839
ServerInfoEndpointNotFoundError,
@@ -99,6 +100,7 @@ def __init__(self, server_address, use_server_version=False, http_options=None,
99100
self.flow_runs = FlowRuns(self)
100101
self.metrics = Metrics(self)
101102
self.custom_views = CustomViews(self)
103+
self.linked_tasks = LinkedTasks(self)
102104

103105
self._session = self._session_factory()
104106
self._http_options = dict() # must set this before making a server call

test/test_linked_tasks.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
from defusedxml.ElementTree import fromstring
55
import pytest
6+
import requests_mock
67

78
import tableauserverclient as TSC
89
from tableauserverclient.models.linked_tasks_item import LinkedTaskItem, LinkedTaskStepItem, LinkedTaskFlowRunItem
@@ -15,12 +16,13 @@ class TestLinkedTasks(unittest.TestCase):
1516

1617
def setUp(self) -> None:
1718
self.server = TSC.Server("http://test", False)
19+
self.server.version = "3.15"
1820

1921
# Fake signin
2022
self.server._site_id = "dad65087-b08b-4603-af4e-2887b8aafc67"
2123
self.server._auth_token = "j80k54ll2lfMZ0tv97mlPvvSCRyD0DOM"
2224

23-
# self.baseurl = self.server.linked_tasks.baseurl
25+
self.baseurl = self.server.linked_tasks.baseurl
2426

2527
def test_parse_linked_task_flow_run(self):
2628
xml = fromstring(GET_LINKED_TASKS.read_bytes())
@@ -60,3 +62,15 @@ def test_parse_linked_task(self):
6062
self.assertEqual(task.num_steps, 1)
6163
self.assertEqual(task.schedule.id, "be077332-d01d-481b-b2f3-917e463d4dca")
6264

65+
def test_get_linked_tasks(self):
66+
with requests_mock.mock() as m:
67+
m.get(self.baseurl, text=GET_LINKED_TASKS.read_text())
68+
tasks, pagination_item = self.server.linked_tasks.get()
69+
70+
self.assertEqual(1, len(tasks))
71+
task = tasks[0]
72+
self.assertEqual(task.id, "1b8211dc-51a8-45ce-a831-b5921708e03e")
73+
self.assertEqual(task.num_steps, 1)
74+
self.assertEqual(task.schedule.id, "be077332-d01d-481b-b2f3-917e463d4dca")
75+
76+

0 commit comments

Comments
 (0)