8000 pushing up in-progress files · bonomali/server-client-python@c65efa3 · GitHub
[go: up one dir, main page]

Skip to content

Commit c65efa3

Browse files
committed
pushing up in-progress files
1 parent ffd7683 commit c65efa3

File tree

4 files changed

+187
-0
lines changed

4 files changed

+187
-0
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
class AccessPermissions(object):
2+
class Mode(object):
3+
Allow = 'Allow'
4+
Deny = 'Deny'
5+
6+
class _Base_Permssions(object):
7+
Read = 'Read'
8+
Write = 'Write'
9+
10+
class Workbook(_Base_Permssions):
11+
AddComment = 'AddComment'
12+
ChangeHierarchy = 'ChangeHierarchy'
13+
ChangePermissions = 'ChangePermissions'
14+
Delete = 'Delete'
15+
ExportData = 'ExportData'
16+
ExportImage = 'ExportImage'
17+
ExportXml = 'ExportXml'
18+
Filter = 'Filter'
19+
ShareView = 'ShareView'
20+
ViewComments = 'ViewComments'
21+
ViewUnderlyingData = 'ViewUnderlyingData'
22+
WebAuthoring = 'WebAuthoring'
23+
24+
25+
class Datasource(_Base_Permssions):
26+
ChangePermissions = 'ChangePermissions'
27+
Connect = 'Connect'
28+
Delete = 'Delete'
29+
ExportXml = 'ExportXml'
30+
31+
32+
class Project(_Base_Permssions):
33+
ProjectLeader = 'ProjectLeader'
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import xml.etree.ElementTree as ET
2+
import re
3+
from .. import NAMESPACE
4+
5+
6+
class FavoriteItem(object):
7+
# Note that name must be the same as string value
8+
class Types:
9+
Workbook = 'Workbook'
10+
View = 'View'
11+
Datasource = 'Datasource'
12+
13+
def __init__(self, label, id, type):
14+
self._label = None
15+
self._id = None
16+
self._type = None
17+
self.label = label
18+
self.id = id
19+
self.type = type
20+
21+
@property
22+
def label(self):
23+
return self._label
24+
25+
@label.setter
26+
def label(self, value):
27+
if not value:
28+
error = 'Label must be defined.'
29+
raise ValueError(error)
30+
else:
31+
self._label = value
32+
33+
@property
34+
def id(self):
35+
return self._id
36+
37+
@id.setter
38+
def id(self, value):
39+
if not value:
40+
error = 'ID must be defined.'
41+
raise ValueError(error)
42+
else:
43+
self._id = value
44+
45+
@property
46+
def type(self):
47+
return self._type
48+
49+
@type.setter
50+
def type(self, value):
51 57AE +
if not value:
52+
error = 'Type must be defined.'
53+
raise ValueError(error)
54+
elif not hasattr(FavoriteItem.Types, value):
55+
error = 'Invalid type for favorite.'
56+
raise ValueError(error)
57+
else:
58+
self._type = value
59+
60+
@classmethod
61+
def from_response(cls, resp):
62+
all_favorite_items = set()
63+
parsed_response = ET.fromstring(resp)
64+
all_favorite_xml = parsed_response.findall('.//t:favorite', namespaces=NAMESPACE)
65+
for favorite_xml in all_favorite_xml:
66+
child_elem = favorite_xml.getchildren()[0]
67+
leading_namespace = '{{{0}}}'.format(NAMESPACE['t'])
68+
favorite_type = child_elem.tag.replace(leading_namespace, '')
69+
subject_elem = favorite_xml.find('.//t:' + favorite_type, namespaces=NAMESPACE)
70+
id = subject_elem.get('id', None)
71+
label = favorite_xml.get('label', None)
72+
type = favorite_type.title()
73+
favorite_item = cls(label, id, type)
74+
all_favorite_items.add(favorite_item)
75+
return all_favorite_items
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import xml.etree.ElementTree as ET
2+
from .. import NAMESPACE
3+
4+
5+
class PermissionItem(object):
6+
Group = 'group'
7+
User = 'user'
8+
9+
def __init__(self):
10+
self._grantee_type = None
11+
self._grantee_id = None
12+
self.permissions = {}
13+
14+
@property
15+
def grantee_type(self):
16+
return self._grantee_type
17+
18+
@property
19+
def grantee_id(self):
20+
return self._grantee_id
21+
22+
@classmethod
23+
def from_response(cls, resp):
24+
all_permission_items = list()
25+
parsed_response = ET.fromstring(resp)
26+
all_grantee_xml = parsed_response.findall('.//t:granteeCapabilities', namespaces=NAMESPACE)
27+
for grantee_xml in all_grantee_xml:
28+
permission_item = cls()
29+
all_capability_xml = grantee_xml.findall('.//t:capability', namespaces=NAMESPACE)
30+
for capability_xml in all_capability_xml:
31+
name = capability_xml.get('name', None)
32+
mode = capability_xml.get('mode', None)
33+
permission_item.permissions[name] = mode
34+
35+
group_elem = grantee_xml.find('.//t:group', namespaces=NAMESPACE)
36+
user_elem = grantee_xml.find('.//t:user', namespaces=NAMESPACE)
37+
if group_elem is not None:
38+
permission_item._grantee_id = group_elem.get('id', None)
39+
permission_item._grantee_type = permission_item.Group
40+
elif user_elem is not None:
41+
permission_item._grantee_id = user_elem.get('id', None)
42+
permission_item._grantee_type = permission_item.User
43+
all_permission_items.append(permission_item)
44+
return all_permission_items
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
from endpoint import Endpoint
2+
from exceptions import MissingRequiredFieldError
3+
from .. import RequestFactory, FavoriteItem
4+
import logging
5+
6+
logger = logging.getLogger('tableau.endpoint.favorites')
7+
8+
9+
class Favorites(Endpoint):
10+
def __init__(self, parent_srv):
11+
super(Endpoint, self).__init__()
12+
self.baseurl = "{0}/sites/{1}/favorites"
13+
self.parent_srv = parent_srv
14+
15+
def _construct_url(self):
16+
return self.baseurl.format(self.parent_srv.baseurl, self.parent_srv.site_id)
17+
18+
def add(self, favorite_item, user_item):
19+
url = "{0}/{1}".format(self._construct_url(), user_item.id)
20+
add_req = RequestFactory().favorite.add_req(favorite_item)
21+
server_response = self.put_request(url, add_req)
22+
logger.info('Added {0} (ID: {1}) to {2}\'s favorites'.format(favorite_item.type,
23+
favorite_item.id, user_item.name))
24+
return FavoriteItem.from_response(server_response.text)
25+
26+
def delete(self, favorite_item, user_item):
27+
if not user_item.id:
28+
error = "User item missing ID."
29+
raise MissingRequiredFieldError(error)
30+
31+
url = "{0}/{1}/{2}s/{3}".format(self._construct_url(), user_item.id,
32+
favorite_item.type.lower(), favorite_item.id)
33+
self.delete_request(url)
34+
logger.info('Deleted {0} (ID: {1}) from {2}\'s favorites'.format(favorite_item.type,
35+
favorite_item.id, user_item.name))

0 commit comments

Comments
 (0)
0