10000 Add cancel job (#299) · SnarkyPapi/server-client-python@dd87aa6 · GitHub
[go: up one dir, main page]

Skip to content

Commit dd87aa6

Browse files
author
Russell Hay
authored
Add cancel job (tableau#299)
* added cancel job * fixing whitespace issues * addressing small nits in the sample and the docs
1 parent 6ddbb80 commit dd87aa6

File tree

5 files changed

+70
-1
lines changed

5 files changed

+70
-1
lines changed

samples/kill_all_jobs.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
####
2+
# This script demonstrates how to kill all of the running jobs
3+
#
4+
# To run the script, you must have installed Python 2.7.X or 3.3 and later.
5+
####
6+
7+
import argparse
8+
import getpass
9+
import logging
10+
11+
import tableauserverclient as TSC
12+
13+
14+
def main():
15+
parser = argparse.ArgumentParser(description='Cancel all of the running background jobs')
16+
parser.add_argument('--server', '-s', required=True, help='server address')
17+
parser.add_argument('--site', '-S', default=None, help='site to log into, do not specify for default site')
18+
parser.add_argument('--username', '-u', required=True, help='username to sign into server')
19+
parser.add_argument('--password', '-p', default=None, help='password for the user')
20+
21+
parser.add_argument('--logging-level', '-l', choices=['debug', 'info', 'error'], default='error',
22+
help='desired logging level (set to error by default)')
23+
24+
args = parser.parse_args()
25+
26+
if args.password is None:
27+
password = getpass.getpass("Password: ")
28+
else:
29+
password = args.password
30+
31+
# Set logging level based on user input, or error by default
32+
logging_level = getattr(logging, args.logging_level.upper())
33+
logging.basicConfig(level=logging_level)
34+
35+
# SIGN IN
36+
tableau_auth = TSC.TableauAuth(args.username, password, args.site)
37+
server = TSC.Server(args.server, use_server_version=True)
38+
with server.auth.sign_in(tableau_auth):
39+
req = TSC.RequestOptions()
40+
41+
req.filter.add(TSC.Filter("progress", TSC.RequestOptions.Operator.LessThanOrEqual, 0))
42+
for job in TSC.Pager(server.jobs, request_opts=req):
43+
print(server.jobs.cancel(job.id), job.id, job.status, job.type)
44+
45+
46+
if __name__ == '__main__':
47+
main()

tableauserverclient/server/endpoint/endpoint.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ def delete_request(self, url):
7676
# We don't return anything for a delete
7777
self._make_request(self.parent_srv.session.delete, url, auth_token=self.parent_srv.auth_token)
7878

79-
def put_request(self, url, xml_request, content_type='text/xml'):
79+
def put_request(self, url, xml_request=None, content_type='text/xml'):
8080
return self._make_request(self.parent_srv.session.put, url,
8181
content=xml_request,
8282
auth_token=self.parent_srv.auth_token,

tableauserverclient/server/endpoint/jobs_endpoint.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from .endpoint import Endpoint, api
22
from .. import JobItem, BackgroundJobItem, PaginationItem
3+
from ..request_options import RequestOptionsBase
34
import logging
45

56
logger = logging.getLogger('tableau.endpoint.jobs')
@@ -17,12 +18,20 @@ def get(self, job_id=None, req_options=None):
1718
import warnings
1819
warnings.warn("Jobs.get(job_id) is deprecated, update code to use Jobs.get_by_id(job_id)")
1920
return self.get_by_id(job_id)
21+
if isinstance(job_id, RequestOptionsBase):
22+
req_options = job_id
23+
2024
self.parent_srv.assert_at_least_version('3.1')
2125
server_response = self.get_request(self.baseurl, req_options)
2226
pagination_item = PaginationItem.from_response(server_response.content, self.parent_srv.namespace)
2327
jobs = BackgroundJobItem.from_response(server_response.content, self.parent_srv.namespace)
2428
return jobs, pagination_item
2529

30+
@api(version='3.1')
31+
def cancel(self, job_id):
32+
url = '{0}/{1}'.format(self.baseurl, job_id)
33+
return self.put_request(url)
34+
2635
@api(version='2.6')
2736
def get_by_id(self, job_id):
2837
logger.info('Query for information about job ' + job_id)

tableauserverclient/server/request_options.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,27 @@ class Operator:
1313
In = 'in'
1414

1515
class Field:
16+
Args = 'args'
17+
CompletedAt = 'completedAt'
1618
CreatedAt = 'createdAt'
1719
DomainName = 'domainName'
1820
DomainNickname = 'domainNickname'
1921
HitsTotal = 'hitsTotal'
2022
IsLocal = 'isLocal'
23+
JobType = 'jobType'
2124
LastLogin = 'lastLogin'
2225
MinimumSiteRole = 'minimumSiteRole'
2326
Name = 'name'
27+
Notes = 'notes'
2428
OwnerDomain = 'ownerDomain'
2529
OwnerEmail = 'ownerEmail'
2630
OwnerName = 'ownerName'
31+
Progress = 'progress'
2732
ProjectName = 'projectName'
2833
SiteRole = 'siteRole'
34+
Subtitle = 'subtitle'
2935
Tags = 'tags'
36+
Title = 'title'
3037
Type = 'type'
3138
UpdatedAt = 'updatedAt'
3239
UserCount = 'userCount'

test/test_job.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ def test_get(self):
3131
created_at = datetime(2018, 5, 22, 13, 0, 29, tzinfo=utc)
3232
started_at = datetime(2018, 5, 22, 13, 0, 37, tzinfo=utc)
3333
ended_at = datetime(2018, 5, 22, 13, 0, 45, tzinfo=utc)
34+
3435
self.assertEquals(1, pagination_item.total_available)
3536
self.assertEquals('2eef4225-aa0c-41c4-8662-a76d89ed7336', job.id)
3637
self.assertEquals('Success', job.status)
@@ -43,3 +44,8 @@ def test_get(self):
4344
def test_get_before_signin(self):
4445
self.server._auth_token = None
4546
self.assertRaises(TSC.NotSig 5185 nedInError, self.server.jobs.get)
47+
48+
def test_cancel(self):
49+
with requests_mock.mock() as m:
50+
m.put(self.baseurl + '/ee8c6e70-43b6-11e6-af4f-f7b0d8e20760', status_code=204)
51+
self.server.jobs.cancel('ee8c6e70-43b6-11e6-af4f-f7b0d8e20760')

0 commit comments

Comments
 (0)
0