Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions connect/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ def __init__(self, config=None):
'logger',
'models',
'resources',
'rql',
'FulfillmentAutomation',
'TierConfigAutomation',
]
7 changes: 5 additions & 2 deletions connect/models/product.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
# This file is part of the Ingram Micro Cloud Blue Connect SDK.
# Copyright (c) 2019 Ingram Micro. All Rights Reserved.

from copy import copy
import datetime
from typing import Optional

Expand All @@ -17,6 +18,7 @@
from .template import Template
from connect.config import Config
from connect.resources.base import ApiClient
from connect.rql import Query


class Product(BaseModel):
Expand Down Expand Up @@ -80,7 +82,7 @@ def get_templates(self, config=None):

def get_product_configurations(self, filters=None, config=None):
"""
:param Dict[str, Any] filters: Filters for the requests. Supported filters are:
:param dict|Query filters: Filters for the requests. Supported filters are:
- ``parameter.id``
- ``parameter.title``
- ``parameter.scope``
Expand All @@ -93,6 +95,7 @@ def get_product_configurations(self, filters=None, config=None):
:return: A list with the product configuration parameter data.
:rtype: List[ProductConfigurationParameter]
"""
query = copy(filters) if isinstance(filters, Query) else Query(filters)
text, _ = ApiClient(config or Config.get_instance(),
'products/' + self.id + '/configurations').get(params=filters)
'products/' + self.id + '/configurations' + query.compile()).get()
return ProductConfigurationParameter.deserialize(text)
39 changes: 25 additions & 14 deletions connect/resources/directory.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,14 @@
# This file is part of the Ingram Micro Cloud Blue Connect SDK.
# Copyright (c) 2019 Ingram Micro. All Rights Reserved.

from copy import copy

from connect.config import Config
from connect.models.asset import Asset
from connect.models.product import Product
from connect.models.tier_config import TierConfig
from connect.resources.base import ApiClient
from connect.rql import Query


class Directory(object):
Expand All @@ -24,15 +27,12 @@ def __init__(self, config=None):
def list_assets(self, filters=None):
""" List the assets.

:param (dict[str, Any] filters: Filters to pass to the request.
:param dict|Query filters: Filters to pass to the request.
:return: A list with the assets that match the given filters.
:rtype: list[Asset]
"""
products = ','.join(self._config.products) if self._config.products else None
url = self._config.api_url + 'assets?in(product.id,(' + products + '))' \
if products \
else 'assets'
text, code = ApiClient(self._config, url).get(params=filters)
query = self._get_filters_query(filters, True)
text, code = ApiClient(self._config, 'assets' + query.compile()).get()
return Asset.deserialize(text)

def get_asset(self, asset_id):
Expand All @@ -45,13 +45,15 @@ def get_asset(self, asset_id):
text, code = ApiClient(self._config, 'assets/' + asset_id).get()
return Asset.deserialize(text)

def list_products(self):
""" List the products. Filtering is not possible at the moment.
def list_products(self, filters=None):
""" List the products.

:param dict|Query filters: Filters to pass to the request.
:return: A list with all products.
:rtype: list[Product]
"""
text, code = ApiClient(self._config, 'products').get()
query = self._get_filters_query(filters, False)
text, code = ApiClient(self._config, 'products' + query.compile()).get()
return Product.deserialize(text)

def get_product(self, product_id):
Expand All @@ -71,11 +73,8 @@ def list_tier_configs(self, filters=None):
:return: A list with the tier configs that match the given filters.
:rtype: list[TierConfig]
"""
filters = filters or {}
products_key = 'product.id'
if products_key not in filters and self._config.products:
filters[products_key] = ','.join(self._config.products)
text, code = ApiClient(self._config, 'tier/configs').get(params=filters)
query = self._get_filters_query(filters, True)
text, code = ApiClient(self._config, 'tier/configs' + query.compile()).get()
return TierConfig.deserialize(text)

def get_tier_config(self, tier_config_id):
Expand All @@ -87,3 +86,15 @@ def get_tier_config(self, tier_config_id):
"""
text, code = ApiClient(self._config, 'tier/configs/' + tier_config_id).get()
return TierConfig.deserialize(text)

def _get_filters_query(self, filters, add_product):
"""
:param dict|Query filters: Filters to return as query (with product.id field).
:param bool add_product: Whether to add a product.id field to the query.
:return: The query.
:rtype: Query
"""
query = copy(filters) if isinstance(filters, Query) else Query(filters)
if add_product and self._config.products:
query.in_('product.id', self._config.products)
return query
10 changes: 10 additions & 0 deletions connect/rql/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# -*- coding: utf-8 -*-

# This file is part of the Ingram Micro Cloud Blue Connect SDK.
# Copyright (c) 2019 Ingram Micro. All Rights Reserved.

from .query import Query

__all__ = [
'Query'
]
Loading