Commit 9983c7a9 by Clinton Blackburn Committed by GitHub

Updated data loaders to pull course run start dates from the marketing site (#299)

ECOM-5468
parent 53ad61a7
...@@ -121,16 +121,17 @@ class CoursesApiDataLoader(AbstractDataLoader): ...@@ -121,16 +121,17 @@ class CoursesApiDataLoader(AbstractDataLoader):
key = body['id'] key = body['id']
defaults = { defaults = {
'key': key, 'key': key,
'start': self.parse_date(body['start']),
'end': self.parse_date(body['end']), 'end': self.parse_date(body['end']),
'enrollment_start': self.parse_date(body['enrollment_start']), 'enrollment_start': self.parse_date(body['enrollment_start']),
'enrollment_end': self.parse_date(body['enrollment_end']), 'enrollment_end': self.parse_date(body['enrollment_end']),
'pacing_type': self.get_pacing_type(body), 'pacing_type': self.get_pacing_type(body),
} }
# When using a marketing site, only date and pacing information should come from the Course API # When using a marketing site, only date (excluding start date) and pacing information
# should come from the Course API.
if not self.partner.has_marketing_site: if not self.partner.has_marketing_site:
defaults.update({ defaults.update({
'start': self.parse_date(body['start']),
'card_image_url': body['media'].get('image', {}).get('raw'), 'card_image_url': body['media'].get('image', {}).get('raw'),
'title_override': body['name'], 'title_override': body['name'],
'short_description_override': body['short_description'], 'short_description_override': body['short_description'],
......
import abc import abc
import datetime
import logging import logging
from urllib.parse import urlencode from urllib.parse import urlencode
from uuid import UUID from uuid import UUID
import pytz
import requests import requests
from django.db.models import Q from django.db.models import Q
from django.utils.functional import cached_property from django.utils.functional import cached_property
...@@ -392,6 +394,8 @@ class CourseMarketingSiteDataLoader(AbstractMarketingSiteDataLoader): ...@@ -392,6 +394,8 @@ class CourseMarketingSiteDataLoader(AbstractMarketingSiteDataLoader):
slug = data['url'].split('/')[-1] slug = data['url'].split('/')[-1]
language_tags = self._extract_language_tags(data['field_course_languages']) language_tags = self._extract_language_tags(data['field_course_languages'])
language = language_tags[0] if language_tags else None language = language_tags[0] if language_tags else None
start = data.get('field_course_start_date')
start = datetime.datetime.fromtimestamp(int(start), tz=pytz.UTC) if start else None
defaults = { defaults = {
'key': key, 'key': key,
...@@ -401,6 +405,7 @@ class CourseMarketingSiteDataLoader(AbstractMarketingSiteDataLoader): ...@@ -401,6 +405,7 @@ class CourseMarketingSiteDataLoader(AbstractMarketingSiteDataLoader):
'slug': slug, 'slug': slug,
'card_image_url': self._get_nested_url(data.get('field_course_image_promoted')), 'card_image_url': self._get_nested_url(data.get('field_course_image_promoted')),
'status': self.get_course_run_status(data), 'status': self.get_course_run_status(data),
'start': start,
} }
try: try:
......
...@@ -141,7 +141,6 @@ class CoursesApiDataLoaderTests(ApiClientTestMixin, DataLoaderTestMixin, TestCas ...@@ -141,7 +141,6 @@ class CoursesApiDataLoaderTests(ApiClientTestMixin, DataLoaderTestMixin, TestCas
expected_values = { expected_values = {
'title': self.loader.clean_string(body['name']), 'title': self.loader.clean_string(body['name']),
'short_description': self.loader.clean_string(body['short_description']), 'short_description': self.loader.clean_string(body['short_description']),
'start': self.loader.parse_date(body['start']),
'end': self.loader.parse_date(body['end']), 'end': self.loader.parse_date(body['end']),
'enrollment_start': self.loader.parse_date(body['enrollment_start']), 'enrollment_start': self.loader.parse_date(body['enrollment_start']),
'enrollment_end': self.loader.parse_date(body['enrollment_end']), 'enrollment_end': self.loader.parse_date(body['enrollment_end']),
...@@ -154,6 +153,7 @@ class CoursesApiDataLoaderTests(ApiClientTestMixin, DataLoaderTestMixin, TestCas ...@@ -154,6 +153,7 @@ class CoursesApiDataLoaderTests(ApiClientTestMixin, DataLoaderTestMixin, TestCas
if not partner_has_marketing_site: if not partner_has_marketing_site:
expected_values.update({ expected_values.update({
'start': self.loader.parse_date(body['start']),
'card_image_url': body['media'].get('image', {}).get('raw'), 'card_image_url': body['media'].get('image', {}).get('raw'),
'title_override': body['name'], 'title_override': body['name'],
'short_description_override': self.loader.clean_string(body['short_description']), 'short_description_override': self.loader.clean_string(body['short_description']),
......
import datetime
import json import json
from urllib.parse import parse_qs, urlparse from urllib.parse import parse_qs, urlparse
from uuid import UUID from uuid import UUID
import ddt import ddt
import mock import mock
import pytz
import responses import responses
from django.test import TestCase from django.test import TestCase
from opaque_keys.edx.keys import CourseKey from opaque_keys.edx.keys import CourseKey
...@@ -421,6 +423,8 @@ class CourseMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMixi ...@@ -421,6 +423,8 @@ class CourseMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMixi
course_run = course.course_runs.get(uuid=data['uuid']) course_run = course.course_runs.get(uuid=data['uuid'])
language_names = [language['name'] for language in data['field_course_languages']] language_names = [language['name'] for language in data['field_course_languages']]
language = self.loader.get_language_tags_from_names(language_names).first() language = self.loader.get_language_tags_from_names(language_names).first()
start = data.get('field_course_start_date')
start = datetime.datetime.fromtimestamp(int(start), tz=pytz.UTC) if start else None
expected_values = { expected_values = {
'key': data['field_course_id'], 'key': data['field_course_id'],
...@@ -428,6 +432,7 @@ class CourseMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMixi ...@@ -428,6 +432,7 @@ class CourseMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMixi
'slug': data['url'].split('/')[-1], 'slug': data['url'].split('/')[-1],
'card_image_url': (data.get('field_course_image_promoted') or {}).get('url'), 'card_image_url': (data.get('field_course_image_promoted') or {}).get('url'),
'status': self.loader.get_course_run_status(data), 'status': self.loader.get_course_run_status(data),
'start': start
} }
for field, value in expected_values.items(): for field, value in expected_values.items():
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment