From dcd2882ff0dc440bbdf94fe1962756d52ad79852 Mon Sep 17 00:00:00 2001 From: Javier San Juan Cervera Date: Mon, 15 Apr 2019 16:29:50 +0200 Subject: [PATCH 1/5] Renamed BaseResource's build_filter and list as get_filters and get_list respectively. get_list now accepts optional filters (get_filters is used if none provided). --- connect/resource/automation.py | 6 ++--- connect/resource/base.py | 29 +++++++++++----------- connect/resource/fulfillment_automation.py | 4 +-- connect/resource/template.py | 9 +++---- connect/resource/usage_automation.py | 4 +-- tests/test_models.py | 6 ++--- tests/test_tier_config.py | 2 +- tests/test_usage.py | 2 +- tests/test_usage_file.py | 2 +- 9 files changed, 31 insertions(+), 33 deletions(-) diff --git a/connect/resource/automation.py b/connect/resource/automation.py index 760a815..855dabf 100644 --- a/connect/resource/automation.py +++ b/connect/resource/automation.py @@ -17,16 +17,16 @@ class AutomationResource(BaseResource): limit = 1000 - def build_filter(self, status='pending'): + def get_filters(self, status='pending'): # type: (str) -> Dict[str, Any] - filters = super(AutomationResource, self).build_filter() + filters = super(AutomationResource, self).get_filters() if status: filters['status'] = status return filters def process(self): # type: () -> None - for request in self.list: + for request in self.get_list(): self.dispatch(request) def dispatch(self, request): diff --git a/connect/resource/base.py b/connect/resource/base.py index e05f212..b0c4c55 100644 --- a/connect/resource/base.py +++ b/connect/resource/base.py @@ -127,21 +127,6 @@ def config(self): # type: () -> Config return self.api.config - @property - def list(self): - # type: () -> List[Any] - filters = self.build_filter() - logger.info('Get list request by filter - {}'.format(filters)) - response = self.api.get(params=filters) - return self._load_schema(response) - - def build_filter(self): - # type: () -> Dict[str, Any] - res_filter = {} - if self.limit: - res_filter['limit'] = self.limit - return res_filter - def get(self, pk): # type: (str) -> Any response = self.api.get(path=pk) @@ -149,6 +134,20 @@ def get(self, pk): if isinstance(objects, list) and len(objects) > 0: return objects[0] + def get_filters(self): + # type: () -> Dict[str, Any] + filters = {} + if self.limit: + filters['limit'] = self.limit + return filters + + def get_list(self, filters=None): + # type: (Dict[str, Any]) -> List[Any] + filters = filters or self.get_filters() + logger.info('Get list request with filters - {}'.format(filters)) + response = self.api.get(params=filters) + return self._load_schema(response) + def _load_schema(self, response, many=None, schema=None): # type: (str, bool, BaseSchema) -> Union[List[Any], Any] schema = schema or self.schema diff --git a/connect/resource/fulfillment_automation.py b/connect/resource/fulfillment_automation.py index 14da443..abd0c6c 100644 --- a/connect/resource/fulfillment_automation.py +++ b/connect/resource/fulfillment_automation.py @@ -21,9 +21,9 @@ class FulfillmentAutomation(AutomationResource): resource = 'requests' schema = FulfillmentSchema(many=True) - def build_filter(self, status='pending'): + def get_filters(self, status='pending'): # type: (str) -> Dict[str, Any] - filters = super(FulfillmentAutomation, self).build_filter(status) + filters = super(FulfillmentAutomation, self).get_filters(status) if self.config.products: filters['asset.product.id__in'] = ','.join(self.config.products) return filters diff --git a/connect/resource/template.py b/connect/resource/template.py index 13e603f..f8baed1 100644 --- a/connect/resource/template.py +++ b/connect/resource/template.py @@ -4,7 +4,7 @@ This file is part of the Ingram Micro Cloud Blue Connect SDK. Copyright (c) 2019 Ingram Micro. All Rights Reserved. """ -from typing import List, Any +from typing import List, Any, Dict from connect.models import ActivationTemplateResponse, ActivationTileResponse from .base import BaseResource @@ -17,10 +17,9 @@ class TemplateResource(BaseResource): """ resource = 'templates' - @property - def list(self): - # type: () -> List[Any] - raise AttributeError('This resource do not have method `list`') + def get_list(self, filters=None): + # type: (Dict[str, Any]) -> List[Any] + raise AttributeError('This resource do not have method `get_list`') def render(self, pk, request_id): # type: (str, str) -> ActivationTileResponse diff --git a/connect/resource/usage_automation.py b/connect/resource/usage_automation.py index 77acaa5..27b5c73 100644 --- a/connect/resource/usage_automation.py +++ b/connect/resource/usage_automation.py @@ -24,9 +24,9 @@ class UsageAutomation(AutomationResource): resource = 'usage/files' schema = FileSchema(many=True) - def build_filter(self, status='listed'): + def get_filters(self, status='listed'): # type: (str) -> Dict[str, Any] - filters = super(UsageAutomation, self).build_filter(status) + filters = super(UsageAutomation, self).get_filters(status) if self.config.products: filters['product__id'] = ','.join(self.config.products) return filters diff --git a/tests/test_models.py b/tests/test_models.py index 3453384..00913d9 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -61,7 +61,7 @@ def test_create_model_from_response(): # Get requests from response resource = FulfillmentAutomation() - requests = resource.list + requests = resource.get_list() request_obj = resource.get(pk='PR-000-000-000') # Assert that all properties exist @@ -102,7 +102,7 @@ def test_create_model_from_response(): @patch('requests.get', MagicMock(return_value=_get_response2_ok())) def test_fulfillment_items(): # Get request - requests = FulfillmentAutomation().list + requests = FulfillmentAutomation().get_list() assert isinstance(requests, list) assert len(requests) == 1 request = requests[0] @@ -133,7 +133,7 @@ def test_fulfillment_items(): @patch('requests.get', MagicMock(return_value=_get_response2_ok())) def test_asset_methods(): # Get asset - requests = FulfillmentAutomation().list + requests = FulfillmentAutomation().get_list() assert len(requests) == 1 assert isinstance(requests[0], Fulfillment) asset = requests[0].asset diff --git a/tests/test_tier_config.py b/tests/test_tier_config.py index 2537ed6..b1a5d73 100644 --- a/tests/test_tier_config.py +++ b/tests/test_tier_config.py @@ -41,7 +41,7 @@ def _get_response_ok_invalid_product(): @patch('requests.get', MagicMock(return_value=_get_response_ok())) def test_create_resource(): - requests = TierConfigAutomation().list + requests = TierConfigAutomation().get_list() assert isinstance(requests, list) assert len(requests) == 1 diff --git a/tests/test_usage.py b/tests/test_usage.py index 2bbf05a..fc9b238 100644 --- a/tests/test_usage.py +++ b/tests/test_usage.py @@ -35,7 +35,7 @@ def _get_response_ok2(): @patch('requests.get', MagicMock(return_value=_get_response_ok())) def test_create_resource(): - requests = UsageAutomation().list + requests = UsageAutomation().get_list() assert isinstance(requests, list) assert len(requests) == 8 diff --git a/tests/test_usage_file.py b/tests/test_usage_file.py index e1588a4..5c1c56b 100644 --- a/tests/test_usage_file.py +++ b/tests/test_usage_file.py @@ -36,7 +36,7 @@ def _get_response_ok(*args, **kwargs): @patch('requests.get', MagicMock(return_value=_get_response_ok())) def test_create_resource(): - requests = UsageFileAutomationTester().list + requests = UsageFileAutomationTester().get_list() assert isinstance(requests, list) assert len(requests) == 1 From 153b086b0a08286ed3b07cded76261baf6fd9392 Mon Sep 17 00:00:00 2001 From: Javier San Juan Cervera Date: Mon, 15 Apr 2019 17:03:38 +0200 Subject: [PATCH 2/5] Now you can pass any filter to get_filters. --- connect/resource/automation.py | 9 +++------ connect/resource/base.py | 6 ++++-- connect/resource/fulfillment_automation.py | 6 +++--- connect/resource/usage_automation.py | 6 +++--- 4 files changed, 13 insertions(+), 14 deletions(-) diff --git a/connect/resource/automation.py b/connect/resource/automation.py index 855dabf..7cabbec 100644 --- a/connect/resource/automation.py +++ b/connect/resource/automation.py @@ -17,12 +17,9 @@ class AutomationResource(BaseResource): limit = 1000 - def get_filters(self, status='pending'): - # type: (str) -> Dict[str, Any] - filters = super(AutomationResource, self).get_filters() - if status: - filters['status'] = status - return filters + def get_filters(self, status='pending', **kwargs): + # type: (str, Dict[str, str]) -> Dict[str, Any] + return super(AutomationResource, self).get_filters(status=status, **kwargs) def process(self): # type: () -> None diff --git a/connect/resource/base.py b/connect/resource/base.py index b0c4c55..13689e8 100644 --- a/connect/resource/base.py +++ b/connect/resource/base.py @@ -134,11 +134,13 @@ def get(self, pk): if isinstance(objects, list) and len(objects) > 0: return objects[0] - def get_filters(self): - # type: () -> Dict[str, Any] + def get_filters(self, **kwargs): + # type: (Dict[str, str]) -> Dict[str, Any] filters = {} if self.limit: filters['limit'] = self.limit + for key, val in kwargs.items(): + filters[key] = val return filters def get_list(self, filters=None): diff --git a/connect/resource/fulfillment_automation.py b/connect/resource/fulfillment_automation.py index abd0c6c..10cc0d1 100644 --- a/connect/resource/fulfillment_automation.py +++ b/connect/resource/fulfillment_automation.py @@ -21,9 +21,9 @@ class FulfillmentAutomation(AutomationResource): resource = 'requests' schema = FulfillmentSchema(many=True) - def get_filters(self, status='pending'): - # type: (str) -> Dict[str, Any] - filters = super(FulfillmentAutomation, self).get_filters(status) + def get_filters(self, status='pending', **kwargs): + # type: (str, Dict[str, str]) -> Dict[str, Any] + filters = super(FulfillmentAutomation, self).get_filters(status=status, **kwargs) if self.config.products: filters['asset.product.id__in'] = ','.join(self.config.products) return filters diff --git a/connect/resource/usage_automation.py b/connect/resource/usage_automation.py index 27b5c73..273b3eb 100644 --- a/connect/resource/usage_automation.py +++ b/connect/resource/usage_automation.py @@ -24,9 +24,9 @@ class UsageAutomation(AutomationResource): resource = 'usage/files' schema = FileSchema(many=True) - def get_filters(self, status='listed'): - # type: (str) -> Dict[str, Any] - filters = super(UsageAutomation, self).get_filters(status) + def get_filters(self, status='listed', **kwargs): + # type: (str, Dict[str, str]) -> Dict[str, Any] + filters = super(UsageAutomation, self).get_filters(status, **kwargs) if self.config.products: filters['product__id'] = ','.join(self.config.products) return filters From f220a899db9c3c292c04ee10b9984368ca617e35 Mon Sep 17 00:00:00 2001 From: Javier San Juan Cervera Date: Mon, 15 Apr 2019 17:07:56 +0200 Subject: [PATCH 3/5] . --- connect/resource/automation.py | 2 +- connect/resource/base.py | 2 +- connect/resource/fulfillment_automation.py | 2 +- connect/resource/usage_automation.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/connect/resource/automation.py b/connect/resource/automation.py index 7cabbec..05f56dd 100644 --- a/connect/resource/automation.py +++ b/connect/resource/automation.py @@ -18,7 +18,7 @@ class AutomationResource(BaseResource): limit = 1000 def get_filters(self, status='pending', **kwargs): - # type: (str, Dict[str, str]) -> Dict[str, Any] + # type: (str, Dict[str, Any]) -> Dict[str, Any] return super(AutomationResource, self).get_filters(status=status, **kwargs) def process(self): diff --git a/connect/resource/base.py b/connect/resource/base.py index 13689e8..2a89f40 100644 --- a/connect/resource/base.py +++ b/connect/resource/base.py @@ -135,7 +135,7 @@ def get(self, pk): return objects[0] def get_filters(self, **kwargs): - # type: (Dict[str, str]) -> Dict[str, Any] + # type: (Dict[str, Any]) -> Dict[str, Any] filters = {} if self.limit: filters['limit'] = self.limit diff --git a/connect/resource/fulfillment_automation.py b/connect/resource/fulfillment_automation.py index 10cc0d1..42c9414 100644 --- a/connect/resource/fulfillment_automation.py +++ b/connect/resource/fulfillment_automation.py @@ -22,7 +22,7 @@ class FulfillmentAutomation(AutomationResource): schema = FulfillmentSchema(many=True) def get_filters(self, status='pending', **kwargs): - # type: (str, Dict[str, str]) -> Dict[str, Any] + # type: (str, Dict[str, Any]) -> Dict[str, Any] filters = super(FulfillmentAutomation, self).get_filters(status=status, **kwargs) if self.config.products: filters['asset.product.id__in'] = ','.join(self.config.products) diff --git a/connect/resource/usage_automation.py b/connect/resource/usage_automation.py index 273b3eb..db898ea 100644 --- a/connect/resource/usage_automation.py +++ b/connect/resource/usage_automation.py @@ -25,7 +25,7 @@ class UsageAutomation(AutomationResource): schema = FileSchema(many=True) def get_filters(self, status='listed', **kwargs): - # type: (str, Dict[str, str]) -> Dict[str, Any] + # type: (str, Dict[str, Any]) -> Dict[str, Any] filters = super(UsageAutomation, self).get_filters(status, **kwargs) if self.config.products: filters['product__id'] = ','.join(self.config.products) From 6b1ca313eb38feb370061f5c6a67de9b96bf0276 Mon Sep 17 00:00:00 2001 From: Javier San Juan Cervera Date: Tue, 23 Apr 2019 15:18:16 +0200 Subject: [PATCH 4/5] Renamed get_filters and get_list to filters and list respectively --- connect/resource/automation.py | 6 +++--- connect/resource/base.py | 8 ++++---- connect/resource/fulfillment_automation.py | 4 ++-- connect/resource/template.py | 2 +- connect/resource/usage_automation.py | 4 ++-- tests/test_models.py | 6 +++--- tests/test_tier_config.py | 2 +- tests/test_usage.py | 2 +- tests/test_usage_file.py | 2 +- 9 files changed, 18 insertions(+), 18 deletions(-) diff --git a/connect/resource/automation.py b/connect/resource/automation.py index 7919c30..5e539fa 100644 --- a/connect/resource/automation.py +++ b/connect/resource/automation.py @@ -17,13 +17,13 @@ class AutomationResource(BaseResource): limit = 1000 - def get_filters(self, status='pending', **kwargs): + def filters(self, status='pending', **kwargs): # type: (str, Dict[str, Any]) -> Dict[str, Any] - return super(AutomationResource, self).get_filters(status=status, **kwargs) + return super(AutomationResource, self).filters(status=status, **kwargs) def process(self): # type: () -> None - for request in self.get_list(): + for request in self.list(): self.dispatch(request) def dispatch(self, request): diff --git a/connect/resource/base.py b/connect/resource/base.py index 47fa5d7..f51fc70 100644 --- a/connect/resource/base.py +++ b/connect/resource/base.py @@ -134,7 +134,7 @@ def get(self, pk): if isinstance(objects, list) and len(objects) > 0: return objects[0] - def get_filters(self, **kwargs): + def filters(self, **kwargs): # type: (Dict[str, Any]) -> Dict[str, Any] filters = {} if self.limit: @@ -143,11 +143,11 @@ def get_filters(self, **kwargs): filters[key] = val return filters - def get_list(self, filters=None): + def list(self, filters=None): # type: (Dict[str, Any]) -> List[Any] - filters = filters or self.get_filters() + filters = filters or self.filters() logger.info('Get list request with filters - {}'.format(filters)) - response = self.api.get(params=filters) + response, _ = self._api.get(params=filters) return self._load_schema(response) def _load_schema(self, response, many=None, schema=None): diff --git a/connect/resource/fulfillment_automation.py b/connect/resource/fulfillment_automation.py index 2e353ce..fb9119e 100644 --- a/connect/resource/fulfillment_automation.py +++ b/connect/resource/fulfillment_automation.py @@ -21,9 +21,9 @@ class FulfillmentAutomation(AutomationResource): resource = 'requests' schema = FulfillmentSchema(many=True) - def get_filters(self, status='pending', **kwargs): + def filters(self, status='pending', **kwargs): # type: (str, Dict[str, Any]) -> Dict[str, Any] - filters = super(FulfillmentAutomation, self).get_filters(status=status, **kwargs) + filters = super(FulfillmentAutomation, self).filters(status=status, **kwargs) if self.config.products: filters['asset.product.id__in'] = ','.join(self.config.products) return filters diff --git a/connect/resource/template.py b/connect/resource/template.py index efbc17d..157d8b0 100644 --- a/connect/resource/template.py +++ b/connect/resource/template.py @@ -17,7 +17,7 @@ class TemplateResource(BaseResource): """ resource = 'templates' - def get_list(self, filters=None): + def list(self, filters=None): # type: (Dict[str, Any]) -> List[Any] raise AttributeError('This resource do not have method `get_list`') diff --git a/connect/resource/usage_automation.py b/connect/resource/usage_automation.py index f2eb809..ffc4406 100644 --- a/connect/resource/usage_automation.py +++ b/connect/resource/usage_automation.py @@ -24,9 +24,9 @@ class UsageAutomation(AutomationResource): resource = 'usage/files' schema = FileSchema(many=True) - def get_filters(self, status='listed', **kwargs): + def filters(self, status='listed', **kwargs): # type: (str, Dict[str, Any]) -> Dict[str, Any] - filters = super(UsageAutomation, self).get_filters(status, **kwargs) + filters = super(UsageAutomation, self).filters(status, **kwargs) if self.config.products: filters['product__id'] = ','.join(self.config.products) return filters diff --git a/tests/test_models.py b/tests/test_models.py index 217ac34..b391e45 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -59,7 +59,7 @@ def test_create_model_from_response(): # Get requests from response resource = FulfillmentAutomation() - requests = resource.get_list() + requests = resource.list() request_obj = resource.get(pk='PR-000-000-000') # Assert that all properties exist @@ -100,7 +100,7 @@ def test_create_model_from_response(): @patch('requests.get', MagicMock(return_value=_get_response2_ok())) def test_fulfillment_items(): # Get request - requests = FulfillmentAutomation().get_list() + requests = FulfillmentAutomation().list() assert isinstance(requests, list) assert len(requests) == 1 request = requests[0] @@ -131,7 +131,7 @@ def test_fulfillment_items(): @patch('requests.get', MagicMock(return_value=_get_response2_ok())) def test_asset_methods(): # Get asset - requests = FulfillmentAutomation().get_list() + requests = FulfillmentAutomation().list() assert len(requests) == 1 assert isinstance(requests[0], Fulfillment) asset = requests[0].asset diff --git a/tests/test_tier_config.py b/tests/test_tier_config.py index 62c9db8..45500c7 100644 --- a/tests/test_tier_config.py +++ b/tests/test_tier_config.py @@ -42,7 +42,7 @@ def _get_response_ok_invalid_product(): @patch('requests.get', MagicMock(return_value=_get_response_ok())) def test_create_resource(): - requests = TierConfigAutomation().get_list() + requests = TierConfigAutomation().list() assert isinstance(requests, list) assert len(requests) == 1 diff --git a/tests/test_usage.py b/tests/test_usage.py index 60e8df2..1549c05 100644 --- a/tests/test_usage.py +++ b/tests/test_usage.py @@ -33,7 +33,7 @@ def _get_response_ok2(): @patch('requests.get', MagicMock(return_value=_get_response_ok())) def test_create_resource(): - requests = UsageAutomation().get_list() + requests = UsageAutomation().list() assert isinstance(requests, list) assert len(requests) == 8 diff --git a/tests/test_usage_file.py b/tests/test_usage_file.py index cde93e1..fdb2a6d 100644 --- a/tests/test_usage_file.py +++ b/tests/test_usage_file.py @@ -35,7 +35,7 @@ def _get_response_ok(*args, **kwargs): @patch('requests.get', MagicMock(return_value=_get_response_ok())) def test_create_resource(): - requests = UsageFileAutomationTester().get_list() + requests = UsageFileAutomationTester().list() assert isinstance(requests, list) assert len(requests) == 1 From 5a1a76e5e9a46a32fbf5781b7fb7cfbb11f2d44f Mon Sep 17 00:00:00 2001 From: Javier San Juan Cervera Date: Tue, 23 Apr 2019 15:21:16 +0200 Subject: [PATCH 5/5] Fixed message --- connect/resource/template.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/connect/resource/template.py b/connect/resource/template.py index 157d8b0..89d91aa 100644 --- a/connect/resource/template.py +++ b/connect/resource/template.py @@ -19,7 +19,7 @@ class TemplateResource(BaseResource): def list(self, filters=None): # type: (Dict[str, Any]) -> List[Any] - raise AttributeError('This resource do not have method `get_list`') + raise AttributeError('This resource do not have method `list`') def render(self, pk, request_id): # type: (str, str) -> ActivationTileResponse