8000 Bugfix 66 add create group basic (#69) · d45/server-client-python@eb91b41 · GitHub
[go: up one dir, main page]

Skip to content

Commit eb91b41

Browse files
author
Russell Hay
authored
Bugfix 66 add create group basic (tableau#69)
1 parent 02559ab commit eb91b41

File tree

6 files changed

+80
-0
lines changed

6 files changed

+80
-0
lines changed

samples/create_group.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
####
2+
# This script demonstrates how to create groups using the Tableau
3+
# Server Client.
4+
#
5+
# To run the script, you must have installed Python 2.7.9 or later.
6+
####
7+
8+
9+
import argparse
10+
import getpass
11+
import logging
12+
13+
from datetime import time
14+
15+
import tableauserverclient as TSC
16+
17+
18+
def main():
19+
20+
parser = argparse.ArgumentParser(description='Creates sample schedules for each type of frequency.')
21+
parser.add_argument('--server', '-s', required=True, help='server address')
22+
parser.add_argument('--username', '-u', required=True, help='username to sign into server')
23+
parser.add_argument('--logging-level', '-l', choices=['debug', 'info', 'error'], default='error',
24+
help='desired logging level (set to error by default)')
25+
args = parser.parse_args()
26+
27+
password = getpass.getpass("Password: ")
28+
29+
# Set logging level based on user input, or error by default
30+
logging_level = getattr(logging, args.logging_level.upper())
31+
logging.basicConfig(level=logging_level)
32+
33+
tableau_auth = TSC.TableauAuth(args.username, password)
34+
server = TSC.Server(args.server)
35+
with server.auth.sign_in(tableau_auth):
36+
group = TSC.GroupItem('test')
37+
group = server.groups.create(group)
38+
print(group)
39+
40+
41+
if __name__ == '__main__':
42+
main()

tableauserverclient/server/endpoint/groups_endpoint.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,12 @@ def delete(self, group_id):
4646
self.delete_request(url)
4747
logger.info('Deleted single group (ID: {0})'.format(group_id))
4848

49+
def create(self, group_item):
50+
url = self.baseurl
51+
create_req = RequestFactory.Group.create_req(group_item)
52+
server_response = self.post_request(url, create_req)
53+
return GroupItem.from_response(server_response.content)[0]
54+
4955
# Removes 1 user from 1 group
5056
def remove_user(self, group_item, user_id):
5157
self._remove_user(group_item, user_id)

tableauserverclient/server/request_factory.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,12 @@ def add_user_req(self, user_id):
7777
user_element.attrib['id'] = user_id
7878
return ET.tostring(xml_request)
7979

80+
def create_req(self, group_item):
81+
xml_request = ET.Element('tsRequest')
82+
group_element = ET.SubElement(xml_request, 'group')
83+
group_element.attrib['name'] = group_item.name
84+
return ET.tostring(xml_request)
85+
8086

8187
class PermissionRequest(object):
8288
def _add_capability(self, parent_element, capability_set, mode):

test/assets/group_create.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version='1.0' encoding='UTF-8'?>
2+
<tsResponse xmlns="http://tableau.com/api"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-2.3.xsd">
5+
<group id="3e4a9ea0-a07a-4fe6-b50f-c345c8c81034" name="試供品" />
6+
</tsResponse>

test/assets/group_create_async.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?xml version='1.0' encoding='UTF-8'?>
2+
<tsResponse xmlns="http://tableau.com/api"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-2.3.xsd">
5+
<job id="job-id" mode="Asynchronous" type="GroupImport"
6+
progress="0" createdAt="time-job-created" />
7+
</tsResponse>

test/test_group.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# encoding=utf-8
12
import unittest
23
import os
34
import requests_mock
@@ -8,6 +9,8 @@
89
GET_XML = os.path.join(TEST_ASSET_DIR, 'group_get.xml')
910
POPULATE_USERS = os.path.join(TEST_ASSET_DIR, 'group_populate_users.xml')
1011
ADD_USER = os.path.join(TEST_ASSET_DIR, 'group_add_user.xml')
12+
CREATE_GROUP = os.path.join(TEST_ASSET_DIR, 'group_create.xml')
13+
CREATE_GROUP_ASYNC = os.path.join(TEST_ASSET_DIR, 'group_create_async.xml')
1114

1215

1316
class GroupTests(unittest.TestCase):
@@ -155,3 +158,13 @@ def test_remove_user_missing_group_id(self):
155158
single_group._users = []
156159
self.assertRaises(TSC.MissingRequiredFieldError, self.server.groups.remove_user, single_group,
157160
'5de011f8-5aa9-4d5b-b991-f462c8dd6bb7')
161+
162+
def test_create_group(self):
163+
with open(CREATE_GROUP, 'rb') as f:
164+
response_xml = f.read().decode('utf-8')
165+
with requests_mock.mock() as m:
166+
m.post(self.baseurl, text=response_xml)
167+
group_to_create = TSC.GroupItem(u'試供品')
168+
group = self.server.groups.create(group_to_create)
169+
self.assertEqual(group.name, u'試供品')
170+
self.assertEqual(group.id, '3e4a9ea0-a07a-4fe6-b50f-c345c8c81034')

0 commit comments

Comments
 (0)
0