Skip to content

Commit 8aa9d86

Browse files
authored
fix: use "price" in ecommerce data loader (#4450) (#4459)
The Django Oscar upgrade of ecommerce changed the item's price field from `price_excl_tax` to just `price` causing the EcommerceApi data loader to fail. This commit checks for the `price_excl_tax` key and falls back to the 'price' value. Ref: openedx-unsupported/ecommerce#4050
1 parent ebf521e commit 8aa9d86

File tree

3 files changed

+21
-19
lines changed

3 files changed

+21
-19
lines changed

course_discovery/apps/course_metadata/data_loaders/api.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,7 @@ def update_seats(self, body):
573573
def update_seat(self, course_run, product_body):
574574
stock_record = product_body['stockrecords'][0]
575575
currency_code = stock_record['price_currency']
576-
price = Decimal(stock_record['price_excl_tax'])
576+
price = Decimal(stock_record.get('price_excl_tax', stock_record['price']))
577577
sku = stock_record['partner_sku']
578578

579579
# For more context see ADR docs/decisions/0025-dont-sync-mobile-skus-on-discovery.rst
@@ -644,9 +644,11 @@ def update_seat(self, course_run, product_body):
644644
def validate_stockrecord(self, stockrecords, title, product_class):
645645
"""
646646
Argument:
647-
body (dict): product data from ecommerce, either entitlement or enrollment code
647+
sockrecords (list): a list of stock records to validate from ecommerce
648+
title (str): product title
649+
product_class (str): either entitlement or enrollment code
648650
Returns:
649-
product sku if no exceptions, else None
651+
True when all validation checks pass, else None
650652
"""
651653
# Map product_class keys with how they should be displayed in the exception messages.
652654
product_classes = {
@@ -681,7 +683,7 @@ def validate_stockrecord(self, stockrecords, title, product_class):
681683

682684
try:
683685
currency_code = stock_record['price_currency']
684-
Decimal(stock_record['price_excl_tax'])
686+
Decimal(stock_record.get('price_excl_tax', stock_record['price']))
685687
sku = stock_record['partner_sku']
686688
except (KeyError, ValueError):
687689
msg = 'A necessary stockrecord field is missing or incorrectly set for {product} {title}'.format(
@@ -720,7 +722,7 @@ def update_entitlement(self, body):
720722

721723
stock_record = stockrecords[0]
722724
currency_code = stock_record['price_currency']
723-
price = Decimal(stock_record['price_excl_tax'])
725+
price = Decimal(stock_record.get('price_excl_tax', stock_record['price']))
724726
sku = stock_record['partner_sku']
725727

726728
try:

course_discovery/apps/course_metadata/data_loaders/tests/mock_data.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@
195195
"stockrecords": [
196196
{
197197
"price_currency": "USD",
198-
"price_excl_tax": "0.00",
198+
"price": "0.00",
199199
"partner_sku": "sku001",
200200
}
201201
]
@@ -225,7 +225,7 @@
225225
"stockrecords": [
226226
{
227227
"price_currency": "EUR",
228-
"price_excl_tax": "0.00",
228+
"price": "0.00",
229229
"partner_sku": "sku002",
230230
}
231231
]
@@ -242,7 +242,7 @@
242242
"stockrecords": [
243243
{
244244
"price_currency": "EUR",
245-
"price_excl_tax": "25.00",
245+
"price": "25.00",
246246
"partner_sku": "sku003",
247247
}
248248
]
@@ -260,7 +260,7 @@
260260
"stockrecords": [
261261
{
262262
"price_currency": "EUR",
263-
"price_excl_tax": "250.00",
263+
"price": "250.00",
264264
"partner_sku": "mobile.android.sku003",
265265
}
266266
]
@@ -277,7 +277,7 @@
277277
"stockrecords": [
278278
{
279279
"price_currency": "EUR",
280-
"price_excl_tax": "25.00",
280+
"price": "25.00",
281281
"partner_sku": "sku004"
282282
}
283283
]
@@ -304,7 +304,7 @@
304304
"stockrecords": [
305305
{
306306
"price_currency": "USD",
307-
"price_excl_tax": "0.00",
307+
"price": "0.00",
308308
"partner_sku": "sku005",
309309
}
310310
]
@@ -321,7 +321,7 @@
321321
"stockrecords": [
322322
{
323323
"price_currency": "USD",
324-
"price_excl_tax": "25.00",
324+
"price": "25.00",
325325
"partner_sku": "sku006",
326326
}
327327
]
@@ -350,7 +350,7 @@
350350
"stockrecords": [
351351
{
352352
"price_currency": "USD",
353-
"price_excl_tax": "250.00",
353+
"price": "250.00",
354354
"partner_sku": "sku007",
355355
}
356356
]
@@ -379,7 +379,7 @@
379379
"stockrecords": [
380380
{
381381
"price_currency": "USD",
382-
"price_excl_tax": "250.00",
382+
"price": "250.00",
383383
"partner_sku": "sku008",
384384
}
385385
]
@@ -404,7 +404,7 @@
404404
"stockrecords": [
405405
{
406406
"price_currency": "123",
407-
"price_excl_tax": "0.00",
407+
"price": "0.00",
408408
"partner_sku": "sku009",
409409
}
410410
]
@@ -429,7 +429,7 @@
429429
"stockrecords": [
430430
{
431431
"price_currency": "USD",
432-
"price_excl_tax": "0.00",
432+
"price": "0.00",
433433
"partner_sku": "sku010",
434434
}
435435
]

course_discovery/apps/course_metadata/data_loaders/tests/test_api.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -769,7 +769,7 @@ def mock_products_api(self, alt_course=None, alt_currency=None, alt_mode=None, h
769769

770770
stockrecord = {
771771
"price_currency": alt_currency if alt_currency else "USD",
772-
"price_excl_tax": "10.00",
772+
"price": "10.00",
773773
}
774774
if valid_stockrecord:
775775
stockrecord.update({"partner_sku": "sku132"})
@@ -856,7 +856,7 @@ def assert_seats_loaded(self, body, mock_products):
856856
for product in products:
857857
stock_record = product['stockrecords'][0]
858858
price_currency = stock_record['price_currency']
859-
price = Decimal(stock_record['price_excl_tax'])
859+
price = Decimal(stock_record['price'])
860860
sku = stock_record['partner_sku']
861861
certificate_type = Seat.AUDIT
862862
credit_provider = None
@@ -908,7 +908,7 @@ def assert_entitlements_loaded(self, body):
908908
course = Course.objects.get(uuid=attributes['UUID'])
909909
stock_record = datum['stockrecords'][0]
910910
price_currency = stock_record['price_currency']
911-
price = Decimal(stock_record['price_excl_tax'])
911+
price = Decimal(stock_record['price'])
912912
sku = stock_record['partner_sku']
913913

914914
mode_name = attributes['certificate_type']

0 commit comments

Comments
 (0)