Skip to content

Commit a4710f0

Browse files
committed
more code polishing, use helper to get microclient inside resources
1 parent aa39958 commit a4710f0

9 files changed

Lines changed: 68 additions & 130 deletions

File tree

splitapiclient/resources/attribute.py

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from __future__ import absolute_import, division, print_function, \
22
unicode_literals
33
from splitapiclient.resources.base_resource import BaseResource
4+
from splitapiclient.util.helpers import require_client
45

56

67
class Attribute(BaseResource):
@@ -73,14 +74,7 @@ def save(self, apiclient=None):
7374
the IdentifyClient instance should be passed in order to perform the
7475
http call
7576
'''
76-
if apiclient is not None:
77-
amc = apiclient.attributes
78-
elif self._client is not None:
79-
from splitapiclient.microclients import AttributeMicroClient
80-
amc = AttributeMicroClient(self._client)
81-
else:
82-
raise ClientRequiredError('An IdentityMicroClient is required')
83-
77+
amc = require_client('Attribute', self._client, apiclient)
8478
return amc.save(self)
8579

8680
def delete(self, apiclient=None):
@@ -91,12 +85,5 @@ def delete(self, apiclient=None):
9185
the IdentifyClient instance should be passed in order to perform the
9286
http call
9387
'''
94-
if apiclient is not None:
95-
amc = apiclient.attributes
96-
elif self._client is not None:
97-
from splitapiclient.microclients import AttributeMicroClient
98-
amc = AttributeMicroClient(self._client)
99-
else:
100-
raise ClientRequiredError('An IdentityMicroClient is required')
101-
88+
amc = require_client('Attribute', self._client, apiclient)
10289
return amc.delete_by_instance(self)

splitapiclient/resources/environment.py

Lines changed: 7 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from __future__ import absolute_import, division, print_function, \
22
unicode_literals
33
from splitapiclient.resources.base_resource import BaseResource
4-
from splitapiclient.resources.identity import Identity
4+
from splitapiclient.util.helpers import require_client, as_dict
55

66

77
class Environment(BaseResource):
@@ -35,17 +35,9 @@ def add_identity(self, data, apiclient=None):
3535
the IdentifyClient instance should be passed in order to perform the
3636
http call
3737
'''
38-
if apiclient is not None:
39-
imc = apiclient.identities
40-
elif self._client is not None:
41-
from splitapiclient.microclients import IdentityMicroClient
42-
imc = IdentityMicroClient(self._client)
43-
else:
44-
raise ClientRequiredError('An IdentifyClient is required')
45-
46-
identity = data.to_dict() if isinstance(data, Identity) else data
47-
if not identity.get('environmentId'):
48-
identity['environmentId'] = self.id
38+
imc = require_client('Identity', self._client, apiclient)
39+
identity = as_dict(data)
40+
identity['environmentId'] = self.id
4941
return imc.save(identity)
5042

5143
def add_identities(self, data, apiclient=None):
@@ -63,21 +55,8 @@ def add_identities(self, data, apiclient=None):
6355
for the failed item togegther with a status code and a message
6456
:rtype: tuple
6557
'''
66-
if apiclient is not None:
67-
imc = apiclient.identities
68-
elif self._client is not None:
69-
from splitapiclient.microclients import IdentityMicroClient
70-
imc = IdentityMicroClient(self._client)
71-
else:
72-
raise ClientRequiredError('An IdentityMicroClient is required')
73-
74-
# Convert identity objects to dicts if necessary before updating the
75-
# environmentId
76-
identities = [
77-
i.to_dict() if isinstance(i, Identity) else i
78-
for i in data
79-
]
58+
imc = require_client('Identity', self._client, apiclient)
59+
identities = [as_dict(i) for i in data]
8060
for item in identities:
81-
if not item.get('environmentId'):
82-
item['environmentId'] = self.id
61+
item['environmentId'] = self.id
8362
return imc.save_all(identities)

splitapiclient/resources/identity.py

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from __future__ import absolute_import, division, print_function, \
22
unicode_literals
33
from splitapiclient.resources.base_resource import BaseResource
4+
from splitapiclient.util.helpers import as_dict, require_client
45

56

67
class Identity(BaseResource):
@@ -75,14 +76,7 @@ def save(self, apiclient=None):
7576
:returns: newly saved Identity object
7677
:rtype: Identity
7778
'''
78-
if apiclient is not None:
79-
imc = apiclient.identities
80-
elif self._client is not None:
81-
from splitapiclient.microclients import IdentityMicroClient
82-
imc = IdentityMicroClient(self._client)
83-
else:
84-
raise ClientRequiredError('An IdentityMicroClient is required')
85-
79+
imc = require_client('Identity', self._client, apiclient)
8680
return imc.save(self.to_dict())
8781

8882
def update(self, apiclient=None):
@@ -96,14 +90,7 @@ def update(self, apiclient=None):
9690
:returns: newly saved Identity object
9791
:rtype: Identity
9892
'''
99-
if apiclient is not None:
100-
imc = apiclient.identities
101-
elif self._client is not None:
102-
from splitapiclient.microclients import IdentityMicroClient
103-
imc = IdentityMicroClient(self._client)
104-
else:
105-
raise ClientRequiredError('An IdentityMicroClient is required')
106-
93+
imc = require_client('Identity', self._client, apiclient)
10794
return imc.update(self.to_dict())
10895

10996
def delete(self, apiclient=None):
@@ -114,12 +101,5 @@ def delete(self, apiclient=None):
114101
the IdentifyClient instance should be passed in order to perform the
115102
http call
116103
'''
117-
if apiclient is not None:
118-
imc = apiclient.identities
119-
elif self._client is not None:
120-
from splitapiclient.microclients import IdentityMicroClient
121-
imc = IdentityMicroClient(self._client)
122-
else:
123-
raise ClientRequiredError('An IdentityMicroClient is required')
124-
104+
imc = require_client('Identity', self._client, apiclient)
125105
return imc.delete_by_instance(self)

splitapiclient/resources/traffic_type.py

Lines changed: 11 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
from __future__ import absolute_import, division, print_function, \
22
unicode_literals
33
from splitapiclient.resources.base_resource import BaseResource
4-
from splitapiclient.resources.attribute import Attribute
5-
from splitapiclient.resources.identity import Identity
6-
from splitapiclient.util.exceptions import ClientRequiredError
7-
4+
from splitapiclient.util.helpers import as_dict, require_client
85

96
class TrafficType(BaseResource):
107
'''
@@ -50,13 +47,7 @@ def fetch_attributes(self, apiclient=None):
5047
:returns: List of attributes associated with this traffic type
5148
:rtype: list(Attribute)
5249
'''
53-
if apiclient is not None:
54-
amc = apiclient.attributes
55-
elif self._client is not None:
56-
from splitapiclient.microclients import AttributeMicroClient
57-
amc = AttributeMicroClient(self._client)
58-
else:
59-
raise ClientRequiredError('An AttributeMicroClient is required')
50+
amc = require_client('Attribute', self._client, apiclient)
6051
return amc.list(self.id)
6152

6253
def add_attribute(self, data, apiclient=None):
@@ -71,17 +62,9 @@ def add_attribute(self, data, apiclient=None):
7162
:returns: Newly created attribute
7263
:rtype: Attribute
7364
'''
74-
if apiclient is not None:
75-
amc = apiclient.attributes
76-
elif self._client is not None:
77-
from splitapiclient.microclients import AttributeMicroClient
78-
amc = AttributeMicroClient(self._client)
79-
else:
80-
raise ClientRequiredError('An AttributeMicroClient is required')
81-
82-
attribute = data.to_dict() if isinstance(data, Attribute) else data
83-
if not attribute.get('trafficTypeId'):
84-
attribute['trafficTypeId'] = self.id
65+
amc = require_client('Attribute', self._client, apiclient)
66+
attribute = as_dict(data)
67+
attribute['trafficTypeId'] = self.id
8568
return amc.save(attribute)
8669

8770
def add_identity(self, data, apiclient=None):
@@ -96,17 +79,9 @@ def add_identity(self, data, apiclient=None):
9679
:returns: newly created Identity
9780
:rtype: Identity
9881
'''
99-
if apiclient is not None:
100-
imc = apiclient.identities
101-
elif self._client is not None:
102-
from splitapiclient.microclients import IdentityMicroClient
103-
imc = IdentityMicroClient(self._client)
104-
else:
105-
raise ClientRequiredError('An IdentityMicroClient is required')
106-
107-
identity = data.to_dict() if isinstance(data, Identity) else data
108-
if not identity.get('trafficTypeId'):
109-
identity['trafficTypeId'] = self.id
82+
imc = require_client('Identity', self._client, apiclient)
83+
identity = as_dict(data)
84+
identity['trafficTypeId'] = self.id
11085
return imc.save(identity)
11186

11287
def add_identities(self, data, apiclient=None):
@@ -124,20 +99,8 @@ def add_identities(self, data, apiclient=None):
12499
for the failed item togegther with a status code and a message
125100
:rtype: tuple
126101
'''
127-
if apiclient is not None:
128-
imc = apiclient.identities
129-
elif self._client is not None:
130-
from splitapiclient.microclients.identity_microclient import IdentityMicroClient
131-
imc = IdentityMicroClient(self._client)
132-
else:
133-
raise ClientRequiredError('An IdentityMicroClient is required')
134-
135-
identities = [
136-
i.to_dict() if isinstance(i, Identity) else i
137-
for i in data
138-
]
102+
imc = require_client('Identity', self._client, apiclient)
103+
identities = [as_dict(i) for i in data]
139104
for item in identities:
140-
if not item.get('trafficTypeId'):
141-
item['trafficTypeId'] = self.id
105+
item['trafficTypeId'] = self.id
142106
return imc.save_all(identities)
143-

splitapiclient/tests/resources/test_attribute.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from splitapiclient.resources import Attribute
55
from splitapiclient.microclients import AttributeMicroClient
66
from splitapiclient.http_clients.sync_client import SyncHttpClient
7+
from splitapiclient.http_clients.base_client import BaseHttpClient
78
from splitapiclient.main import get_client
89

910

@@ -65,7 +66,7 @@ def test_save(self, mocker):
6566
'dataType': 'string',
6667
'isSearchable': False,
6768
}
68-
http_client_mock = mocker.Mock()
69+
http_client_mock = mocker.Mock(spec=BaseHttpClient)
6970
http_client_mock.make_request.return_value = attr_data
7071
a1 = Attribute(attr_data, http_client_mock)
7172

@@ -94,7 +95,7 @@ def test_save(self, mocker):
9495
def test_delete(self, mocker):
9596
'''
9697
'''
97-
http_client_mock = mocker.Mock()
98+
http_client_mock = mocker.Mock(spec=BaseHttpClient)
9899
http_client_mock.make_request.return_value = None
99100
a1 = Attribute(
100101
{

splitapiclient/tests/resources/test_environment.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from splitapiclient.resources import Identity
66
from splitapiclient.microclients import IdentityMicroClient
77
from splitapiclient.http_clients.sync_client import SyncHttpClient
8+
from splitapiclient.http_clients.base_client import BaseHttpClient
89
from splitapiclient.main import get_client
910

1011

@@ -51,7 +52,7 @@ def test_add_identity(self, mocker):
5152
'values': {'a1': 'v1'},
5253
'organizationId': 'o1',
5354
}
54-
http_client_mock = mocker.Mock()
55+
http_client_mock = mocker.Mock(spec=BaseHttpClient)
5556
http_client_mock.make_request.return_value = data
5657
env1 = Environment(
5758
{
@@ -122,7 +123,7 @@ def test_add_identities(self, mocker):
122123
'organizationId': 'o1',
123124
}]
124125

125-
http_client_mock = mocker.Mock()
126+
http_client_mock = mocker.Mock(spec=BaseHttpClient)
126127
http_client_mock.make_request.return_value = {
127128
'objects': data,
128129
'failed': [],

splitapiclient/tests/resources/test_identity.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
unicode_literals
33

44
from splitapiclient.http_clients.sync_client import SyncHttpClient
5+
from splitapiclient.http_clients.base_client import BaseHttpClient
56
from splitapiclient.resources import Identity
67
from splitapiclient.microclients import IdentityMicroClient
78
from splitapiclient.main import get_client
@@ -52,7 +53,7 @@ def test_getters_and_setters(self):
5253
def test_save(self, mocker):
5354
'''
5455
'''
55-
http_client_mock = mocker.Mock()
56+
http_client_mock = mocker.Mock(spec=BaseHttpClient)
5657
i1 = Identity(
5758
{
5859
'key': 'key1',
@@ -94,7 +95,7 @@ def test_save(self, mocker):
9495
def test_update(self, mocker):
9596
'''
9697
'''
97-
http_client_mock = mocker.Mock()
98+
http_client_mock = mocker.Mock(spec=BaseHttpClient)
9899
i1 = Identity(
99100
{
100101
'key': 'key1',
@@ -136,7 +137,7 @@ def test_update(self, mocker):
136137
def test_delete(self, mocker):
137138
'''
138139
'''
139-
http_client_mock = mocker.Mock()
140+
http_client_mock = mocker.Mock(spec=BaseHttpClient)
140141
i1 = Identity(
141142
{
142143
'key': 'key1',

splitapiclient/tests/resources/test_traffic_type.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from splitapiclient.microclients import AttributeMicroClient
88
from splitapiclient.microclients import IdentityMicroClient
99
from splitapiclient.http_clients.sync_client import SyncHttpClient
10+
from splitapiclient.http_clients.base_client import BaseHttpClient
1011
from splitapiclient.main import get_client
1112

1213

@@ -64,7 +65,7 @@ def test_fetch_attributes(self, mocker):
6465
'dataType': 'string',
6566
'description': 'd2',
6667
}]
67-
http_client_mock = mocker.Mock()
68+
http_client_mock = mocker.Mock(spec=BaseHttpClient)
6869
http_client_mock.make_request.return_value = data
6970
tt1 = TrafficType(
7071
{
@@ -109,7 +110,7 @@ def test_add_attribute(self, mocker):
109110
'dataType': 'string',
110111
'description': 'd1',
111112
}
112-
http_client_mock = mocker.Mock()
113+
http_client_mock = mocker.Mock(spec=BaseHttpClient)
113114
http_client_mock.make_request.return_value = data
114115
tt1 = TrafficType(
115116
{
@@ -166,7 +167,7 @@ def test_add_identity(self, mocker):
166167
'values': {'a1': 'v1'},
167168
'organizationId': 'o1',
168169
}
169-
http_client_mock = mocker.Mock()
170+
http_client_mock = mocker.Mock(spec=BaseHttpClient)
170171
http_client_mock.make_request.return_value = data
171172
tt1 = TrafficType(
172173
{
@@ -240,7 +241,7 @@ def test_add_identities(self, mocker):
240241
'organizationId': 'o1',
241242
}]
242243

243-
http_client_mock = mocker.Mock()
244+
http_client_mock = mocker.Mock(spec=BaseHttpClient)
244245
http_client_mock.make_request.return_value = {
245246
'objects': data,
246247
'failed': [],

0 commit comments

Comments
 (0)