Skip to content

Commit d38a1e3

Browse files
Merge pull request #30 from JaviCerveraIngram/CPS-10-get-list
Normalize naming for getting list of resources and getting filter for resources
2 parents c51c4c2 + 5a1a76e commit d38a1e3

File tree

9 files changed

+36
-44
lines changed

9 files changed

+36
-44
lines changed

connect/resource/automation.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,13 @@
1717
class AutomationResource(BaseResource):
1818
limit = 1000
1919

20-
def build_filter(self, status='pending'):
21-
# type: (str) -> Dict[str, Any]
22-
filters = super(AutomationResource, self).build_filter()
23-
if status:
24-
filters['status'] = status
25-
return filters
20+
def filters(self, status='pending', **kwargs):
21+
# type: (str, Dict[str, Any]) -> Dict[str, Any]
22+
return super(AutomationResource, self).filters(status=status, **kwargs)
2623

2724
def process(self):
2825
# type: () -> None
29-
for request in self.list:
26+
for request in self.list():
3027
self.dispatch(request)
3128

3229
def dispatch(self, request):

connect/resource/base.py

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -120,40 +120,36 @@ def __init__(self, config=None):
120120
raise AttributeError('Resource name not specified in class {}. '
121121
'Add an attribute `resource` with the name of the resource'
122122
.format(self.__class__.__name__))
123-
self.__api = ApiClient(config, self.__class__.resource)
124-
125-
@property
126-
def _api(self):
127-
# type: () -> ApiClient
128-
return self.__api
123+
self._api = ApiClient(config, self.__class__.resource)
129124

130125
@property
131126
def config(self):
132127
# type: () -> Config
133128
return self._api.config
134129

135-
@property
136-
def list(self):
137-
# type: () -> List[Any]
138-
filters = self.build_filter()
139-
logger.info('Get list request by filter - {}'.format(filters))
140-
response, _ = self._api.get(params=filters)
141-
return self._load_schema(response)
142-
143-
def build_filter(self):
144-
# type: () -> Dict[str, Any]
145-
res_filter = {}
146-
if self.limit:
147-
res_filter['limit'] = self.limit
148-
return res_filter
149-
150130
def get(self, pk):
151131
# type: (str) -> Any
152132
response, _ = self._api.get(path=pk)
153133
objects = self._load_schema(response)
154134
if isinstance(objects, list) and len(objects) > 0:
155135
return objects[0]
156136

137+
def filters(self, **kwargs):
138+
# type: (Dict[str, Any]) -> Dict[str, Any]
139+
filters = {}
140+
if self.limit:
141+
filters['limit'] = self.limit
142+
for key, val in kwargs.items():
143+
filters[key] = val
144+
return filters
145+
146+
def list(self, filters=None):
147+
# type: (Dict[str, Any]) -> List[Any]
148+
filters = filters or self.filters()
149+
logger.info('Get list request with filters - {}'.format(filters))
150+
response, _ = self._api.get(params=filters)
151+
return self._load_schema(response)
152+
157153
def _load_schema(self, response, many=None, schema=None):
158154
# type: (str, bool, BaseSchema) -> Union[List[Any], Any]
159155
schema = schema or self.schema

connect/resource/fulfillment_automation.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ class FulfillmentAutomation(AutomationResource):
2121
resource = 'requests'
2222
schema = FulfillmentSchema(many=True)
2323

24-
def build_filter(self, status='pending'):
25-
# type: (str) -> Dict[str, Any]
26-
filters = super(FulfillmentAutomation, self).build_filter(status)
24+
def filters(self, status='pending', **kwargs):
25+
# type: (str, Dict[str, Any]) -> Dict[str, Any]
26+
filters = super(FulfillmentAutomation, self).filters(status=status, **kwargs)
2727
if self.config.products:
2828
filters['asset.product.id__in'] = ','.join(self.config.products)
2929
return filters

connect/resource/template.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
This file is part of the Ingram Micro Cloud Blue Connect SDK.
55
Copyright (c) 2019 Ingram Micro. All Rights Reserved.
66
"""
7-
from typing import List, Any
7+
from typing import List, Any, Dict
88

99
from connect.models import ActivationTemplateResponse, ActivationTileResponse
1010
from .base import BaseResource
@@ -17,9 +17,8 @@ class TemplateResource(BaseResource):
1717
"""
1818
resource = 'templates'
1919

20-
@property
21-
def list(self):
22-
# type: () -> List[Any]
20+
def list(self, filters=None):
21+
# type: (Dict[str, Any]) -> List[Any]
2322
raise AttributeError('This resource do not have method `list`')
2423

2524
def render(self, pk, request_id):

connect/resource/usage_automation.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ class UsageAutomation(AutomationResource):
2424
resource = 'usage/files'
2525
schema = FileSchema(many=True)
2626

27-
def build_filter(self, status='listed'):
28-
# type: (str) -> Dict[str, Any]
29-
filters = super(UsageAutomation, self).build_filter(status)
27+
def filters(self, status='listed', **kwargs):
28+
# type: (str, Dict[str, Any]) -> Dict[str, Any]
29+
filters = super(UsageAutomation, self).filters(status, **kwargs)
3030
if self.config.products:
3131
filters['product__id'] = ','.join(self.config.products)
3232
return filters

tests/test_models.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ def test_create_model_from_response():
5959

6060
# Get requests from response
6161
resource = FulfillmentAutomation()
62-
requests = resource.list
62+
requests = resource.list()
6363
request_obj = resource.get(pk='PR-000-000-000')
6464

6565
# Assert that all properties exist
@@ -100,7 +100,7 @@ def test_create_model_from_response():
100100
@patch('requests.get', MagicMock(return_value=_get_response2_ok()))
101101
def test_fulfillment_items():
102102
# Get request
103-
requests = FulfillmentAutomation().list
103+
requests = FulfillmentAutomation().list()
104104
assert isinstance(requests, list)
105105
assert len(requests) == 1
106106
request = requests[0]
@@ -131,7 +131,7 @@ def test_fulfillment_items():
131131
@patch('requests.get', MagicMock(return_value=_get_response2_ok()))
132132
def test_asset_methods():
133133
# Get asset
134-
requests = FulfillmentAutomation().list
134+
requests = FulfillmentAutomation().list()
135135
assert len(requests) == 1
136136
assert isinstance(requests[0], Fulfillment)
137137
asset = requests[0].asset

tests/test_tier_config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def _get_response_ok_invalid_product():
4242

4343
@patch('requests.get', MagicMock(return_value=_get_response_ok()))
4444
def test_create_resource():
45-
requests = TierConfigAutomation().list
45+
requests = TierConfigAutomation().list()
4646
assert isinstance(requests, list)
4747
assert len(requests) == 1
4848

tests/test_usage.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def _get_response_ok2():
3333

3434
@patch('requests.get', MagicMock(return_value=_get_response_ok()))
3535
def test_create_resource():
36-
requests = UsageAutomation().list
36+
requests = UsageAutomation().list()
3737
assert isinstance(requests, list)
3838
assert len(requests) == 8
3939

tests/test_usage_file.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def _get_response_ok(*args, **kwargs):
3535

3636
@patch('requests.get', MagicMock(return_value=_get_response_ok()))
3737
def test_create_resource():
38-
requests = UsageFileAutomationTester().list
38+
requests = UsageFileAutomationTester().list()
3939
assert isinstance(requests, list)
4040
assert len(requests) == 1
4141

0 commit comments

Comments
 (0)