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
2 changes: 1 addition & 1 deletion connect_transformations/constants.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
SEPARATOR = '; '
SEPARATOR = ';'
27 changes: 23 additions & 4 deletions connect_transformations/lookup_subscription/mixins.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,10 +83,11 @@ async def lookup_subscription(
self.extract_row_from_subscription(subscription, output_columns),
)

@staticmethod
def extract_row_from_subscription(subscription, output_columns):
def extract_row_from_subscription(self, subscription, output_columns):
row = {}

item_attrs = []

for col_name, col_config in output_columns.items():
value = None
attr = col_config['attribute']
Expand All @@ -96,15 +97,33 @@ def extract_row_from_subscription(subscription, output_columns):
if param_data['name'] == param_name:
value = param_data['value']
break
elif attr == 'items.id':
value = SEPARATOR.join(i['id'] for i in subscription['items'])
elif attr.startswith('items.'):
item_attr = attr.split('.')[-1]
item_attrs.append((col_name, item_attr))
value = ''
else:
value = deep_itemgetter(subscription, attr)

row[col_name] = value

if item_attrs:
self.extract_item_attrs_from_sutbscription(item_attrs, row, subscription)

return row

@staticmethod
def extract_item_attrs_from_sutbscription(item_attrs, row, subscription):
for item in subscription['items']:
if (
item.get('item_type') == 'reservation'
and item.get('quantity') == 0
):
continue

for col_name, item_attr in item_attrs:
item_value = str(item.get(item_attr, ''))
row[col_name] += f'{SEPARATOR}{item_value}' if row[col_name] else item_value

async def get_subscription(self, lookup):
k = ''
for key, value in lookup.items():
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -479,6 +479,22 @@ const AVAILABLE_SUBSCRIPTION_ATTRS = [
value: 'items.id',
label: 'Product item IDs',
},
{
value: 'items.global_id',
label: 'Product item global IDs',
},
{
value: 'items.mpn',
label: 'Product item MPNs',
},
{
value: 'items.item_type',
label: 'Product item types',
},
{
value: 'items.quantity',
label: 'Product item quantities',
},
];

const SUBSCRIPTION_ATTR_TYPES = {
Expand Down Expand Up @@ -557,7 +573,7 @@ const lookupSubscription = (app) => {
context: { available_columns: availableColumns, stream },
settings,
} = config;
const outputConfigs = settings?.output_config;
const outputConfigs = settings.output_config;
let rowIndex = 0;

const hasProduct = 'product' in stream.context;
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<!doctype html><html><head><meta charset="utf-8"/><title>Transformations/Lookup subscription</title><script defer="defer" src="../vendors.b7829ba6a3fa12b6e5cb.js"></script><script defer="defer" src="../transformations/lookup_subscription.da4bc651efb677749346.js"></script><link href="../transformations/lookup_subscription.421df6826da3f2351526.css" rel="stylesheet"></head><body><div id="loader"></div><div id="app"><div class="main-container lookup" id="content"><div class="subtitle">Supported search criteria include Subscription External ID, ID and Parameter values.</div><div class="input-group"><label class="label" for="criteria">Criterion</label> <select class="input" id="criteria"></select></div><div class="input-group" id="param_name_group"><label class="label" for="parameter">Parameter Name</label> <select class="input" id="parameter"></select></div><div class="input-group"><label class="label" for="column">Input Column</label> <select class="input" id="column"></select></div><div class="input-group"><p class="radio-buttons label">Choose what to do if a subscription is not found:</p><div class="radio-buttons input"><input type="radio" id="not_found_leave_empty" name="if_not_found" value="leave_empty"/> <label for="not_found_leave_empty">Leave empty</label> <input type="radio" id="not_found_fail" name="if_not_found" value="fail"/> <label for="not_found_fail">Fail</label></div></div><div class="input-group"><p class="radio-buttons label">Choose what to do if multiple subscriptions are found:</p><div class="radio-buttons input"><input type="radio" id="multiple_use_most_actual" name="if_multiple" value="use_most_actual"/> <label for="multiple_use_most_actual">Use the most recent</label> <input type="radio" id="multiple_leave_empty" name="if_multiple" value="leave_empty"/> <label for="multiple_leave_empty">Leave empty</label> <input type="radio" id="multiple_fail" name="if_multiple" value="fail"/> <label for="multiple_fail">Fail</label></div></div><div class="output"><label>Output columns:</label><div id="output-columns"></div><div class="button-container"><button id="add" class="button">ADD</button></div></div></div></div></body></html>
<!doctype html><html><head><meta charset="utf-8"/><title>Transformations/Lookup subscription</title><script defer="defer" src="../vendors.b7829ba6a3fa12b6e5cb.js"></script><script defer="defer" src="../transformations/lookup_subscription.dea7924cefa1af23f0be.js"></script><link href="../transformations/lookup_subscription.421df6826da3f2351526.css" rel="stylesheet"></head><body><div id="loader"></div><div id="app"><div class="main-container lookup" id="content"><div class="subtitle">Supported search criteria include Subscription External ID, ID and Parameter values.</div><div class="input-group"><label class="label" for="criteria">Criterion</label> <select class="input" id="criteria"></select></div><div class="input-group" id="param_name_group"><label class="label" for="parameter">Parameter Name</label> <select class="input" id="parameter"></select></div><div class="input-group"><label class="label" for="column">Input Column</label> <select class="input" id="column"></select></div><div class="input-group"><p class="radio-buttons label">Choose what to do if a subscription is not found:</p><div class="radio-buttons input"><input type="radio" id="not_found_leave_empty" name="if_not_found" value="leave_empty"/> <label for="not_found_leave_empty">Leave empty</label> <input type="radio" id="not_found_fail" name="if_not_found" value="fail"/> <label for="not_found_fail">Fail</label></div></div><div class="input-group"><p class="radio-buttons label">Choose what to do if multiple subscriptions are found:</p><div class="radio-buttons input"><input type="radio" id="multiple_use_most_actual" name="if_multiple" value="use_most_actual"/> <label for="multiple_use_most_actual">Use the most recent</label> <input type="radio" id="multiple_leave_empty" name="if_multiple" value="leave_empty"/> <label for="multiple_leave_empty">Leave empty</label> <input type="radio" id="multiple_fail" name="if_multiple" value="fail"/> <label for="multiple_fail">Fail</label></div></div><div class="output"><label>Output columns:</label><div id="output-columns"></div><div class="button-container"><button id="add" class="button">ADD</button></div></div></div></div></body></html>
17 changes: 12 additions & 5 deletions tests/transformations/test_lookup_subscription.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,10 @@ async def test_lookup_subscription(mocker, async_connect_client, async_client_mo
{'id': 'PAR-112', 'name': 'Param2', 'value': '113'},
],
'items': [
{'id': 'i1'},
{'id': 'i2'},
{'id': 'i3'},
{'id': 'i1', 'mpn': 'm1', 'item_type': 'reservation', 'quantity': 11},
{'id': 'i2', 'mpn': 'm2', 'item_type': 'reservation', 'quantity': 0},
{'id': 'i3', 'mpn': 'm3', 'item_type': 'payasyougo', 'quantity': 0},
{'id': 'i4', 'mpn': 'm4', 'item_type': 'reservation', 'quantity': 12},
],
}])

Expand All @@ -60,7 +61,10 @@ async def test_lookup_subscription(mocker, async_connect_client, async_client_mo
'deeper': {'attribute': 'events.created.at'},
'param val': {'attribute': 'parameter.value', 'parameter_name': 'Param1'},
'param_not_exist': {'attribute': 'parameter.value', 'parameter_name': 'no'},
'items': {'attribute': 'items.id'},
'item ids': {'attribute': 'items.id'},
'item mpns': {'attribute': 'items.mpn'},
'item types': {'attribute': 'items.item_type'},
'item quantities': {'attribute': 'items.quantity'},
},
},
'columns': {
Expand All @@ -85,7 +89,10 @@ async def test_lookup_subscription(mocker, async_connect_client, async_client_mo
'deeper': '2022-01-01 11:23:23',
'param val': '111',
'param_not_exist': None,
'items': 'i1; i2; i3',
'item ids': 'i1;i3;i4',
'item mpns': 'm1;m3;m4',
'item types': 'reservation;payasyougo;reservation',
'item quantities': '11;0;12',
}


Expand Down
16 changes: 16 additions & 0 deletions ui/src/pages/transformations/lookup_subscription.js
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,22 @@ const AVAILABLE_SUBSCRIPTION_ATTRS = [
value: 'items.id',
label: 'Product item IDs',
},
{
value: 'items.global_id',
label: 'Product item global IDs',
},
{
value: 'items.mpn',
label: 'Product item MPNs',
},
{
value: 'items.item_type',
label: 'Product item types',
},
{
value: 'items.quantity',
label: 'Product item quantities',
},
];

const SUBSCRIPTION_ATTR_TYPES = {
Expand Down