Commit 58046383 by Clinton Blackburn

Including Creation Datetime with All Data

parent dc785961
...@@ -18,6 +18,7 @@ class CourseActivityWeekly(models.Model): ...@@ -18,6 +18,7 @@ class CourseActivityWeekly(models.Model):
interval_end = models.DateTimeField(db_index=True) interval_end = models.DateTimeField(db_index=True)
activity_type = models.CharField(db_index=True, max_length=255, db_column='label') activity_type = models.CharField(db_index=True, max_length=255, db_column='label')
count = models.IntegerField() count = models.IntegerField()
created = models.DateTimeField(auto_now_add=True)
@classmethod @classmethod
def get_most_recent(cls, course_id, activity_type): def get_most_recent(cls, course_id, activity_type):
......
...@@ -56,6 +56,7 @@ class ProblemResponseAnswerDistributionSerializer(serializers.ModelSerializer): ...@@ -56,6 +56,7 @@ class ProblemResponseAnswerDistributionSerializer(serializers.ModelSerializer):
class BaseCourseEnrollmentModelSerializer(serializers.ModelSerializer): class BaseCourseEnrollmentModelSerializer(serializers.ModelSerializer):
date = serializers.DateField(format=settings.DATE_FORMAT) date = serializers.DateField(format=settings.DATE_FORMAT)
created = serializers.DateTimeField(format=settings.DATETIME_FORMAT)
class CourseEnrollmentDailySerializer(BaseCourseEnrollmentModelSerializer): class CourseEnrollmentDailySerializer(BaseCourseEnrollmentModelSerializer):
...@@ -63,7 +64,7 @@ class CourseEnrollmentDailySerializer(BaseCourseEnrollmentModelSerializer): ...@@ -63,7 +64,7 @@ class CourseEnrollmentDailySerializer(BaseCourseEnrollmentModelSerializer):
class Meta(object): class Meta(object):
model = models.CourseEnrollmentDaily model = models.CourseEnrollmentDaily
fields = ('course_id', 'date', 'count') fields = ('course_id', 'date', 'count', 'created')
class CountrySerializer(serializers.Serializer): class CountrySerializer(serializers.Serializer):
...@@ -92,13 +93,13 @@ class CourseEnrollmentByCountrySerializer(BaseCourseEnrollmentModelSerializer): ...@@ -92,13 +93,13 @@ class CourseEnrollmentByCountrySerializer(BaseCourseEnrollmentModelSerializer):
class Meta(object): class Meta(object):
model = models.CourseEnrollmentByCountry model = models.CourseEnrollmentByCountry
fields = ('date', 'course_id', 'country', 'count') fields = ('date', 'course_id', 'country', 'count', 'created')
class CourseEnrollmentByGenderSerializer(BaseCourseEnrollmentModelSerializer): class CourseEnrollmentByGenderSerializer(BaseCourseEnrollmentModelSerializer):
class Meta(object): class Meta(object):
model = models.CourseEnrollmentByGender model = models.CourseEnrollmentByGender
fields = ('course_id', 'date', 'gender', 'count') fields = ('course_id', 'date', 'gender', 'count', 'created')
class CourseEnrollmentByEducationSerializer(BaseCourseEnrollmentModelSerializer): class CourseEnrollmentByEducationSerializer(BaseCourseEnrollmentModelSerializer):
...@@ -106,13 +107,13 @@ class CourseEnrollmentByEducationSerializer(BaseCourseEnrollmentModelSerializer) ...@@ -106,13 +107,13 @@ class CourseEnrollmentByEducationSerializer(BaseCourseEnrollmentModelSerializer)
class Meta(object): class Meta(object):
model = models.CourseEnrollmentByEducation model = models.CourseEnrollmentByEducation
fields = ('course_id', 'date', 'education_level', 'count') fields = ('course_id', 'date', 'education_level', 'count', 'created')
class CourseEnrollmentByBirthYearSerializer(BaseCourseEnrollmentModelSerializer): class CourseEnrollmentByBirthYearSerializer(BaseCourseEnrollmentModelSerializer):
class Meta(object): class Meta(object):
model = models.CourseEnrollmentByBirthYear model = models.CourseEnrollmentByBirthYear
fields = ('course_id', 'date', 'birth_year', 'count') fields = ('course_id', 'date', 'birth_year', 'count', 'created')
class CourseActivityWeeklySerializer(serializers.ModelSerializer): class CourseActivityWeeklySerializer(serializers.ModelSerializer):
...@@ -122,8 +123,10 @@ class CourseActivityWeeklySerializer(serializers.ModelSerializer): ...@@ -122,8 +123,10 @@ class CourseActivityWeeklySerializer(serializers.ModelSerializer):
attempted_problem = serializers.IntegerField(required=False) attempted_problem = serializers.IntegerField(required=False)
played_video = serializers.IntegerField(required=False) played_video = serializers.IntegerField(required=False)
posted_forum = serializers.IntegerField(required=False) posted_forum = serializers.IntegerField(required=False)
created = serializers.DateTimeField(format=settings.DATETIME_FORMAT)
class Meta(object): class Meta(object):
model = CourseActivityWeekly model = CourseActivityWeekly
fields = ( fields = (
'interval_start', 'interval_end', 'course_id', 'any', 'attempted_problem', 'played_video', 'posted_forum') 'interval_start', 'interval_end', 'course_id', 'any', 'attempted_problem', 'played_video', 'posted_forum',
'created')
...@@ -225,7 +225,7 @@ class CourseEnrollmentByBirthYearViewTests(CourseEnrollmentViewTestCaseMixin, Te ...@@ -225,7 +225,7 @@ class CourseEnrollmentByBirthYearViewTests(CourseEnrollmentViewTestCaseMixin, Te
def format_as_response(self, *args): def format_as_response(self, *args):
return [ return [
{'course_id': str(ce.course_id), 'count': ce.count, 'date': ce.date.strftime(settings.DATE_FORMAT), {'course_id': str(ce.course_id), 'count': ce.count, 'date': ce.date.strftime(settings.DATE_FORMAT),
'birth_year': ce.birth_year} for ce in args] 'birth_year': ce.birth_year, 'created': ce.created.strftime(settings.DATETIME_FORMAT)} for ce in args]
def test_get(self): def test_get(self):
response = self.authenticated_get('/api/v0/courses/%s%s' % (self.course_id, self.path,)) response = self.authenticated_get('/api/v0/courses/%s%s' % (self.course_id, self.path,))
...@@ -252,7 +252,8 @@ class CourseEnrollmentByEducationViewTests(CourseEnrollmentViewTestCaseMixin, Te ...@@ -252,7 +252,8 @@ class CourseEnrollmentByEducationViewTests(CourseEnrollmentViewTestCaseMixin, Te
def format_as_response(self, *args): def format_as_response(self, *args):
return [ return [
{'course_id': str(ce.course_id), 'count': ce.count, 'date': ce.date.strftime(settings.DATE_FORMAT), {'course_id': str(ce.course_id), 'count': ce.count, 'date': ce.date.strftime(settings.DATE_FORMAT),
'education_level': {'name': ce.education_level.name, 'short_name': ce.education_level.short_name}} for 'education_level': {'name': ce.education_level.name, 'short_name': ce.education_level.short_name},
'created': ce.created.strftime(settings.DATETIME_FORMAT)} for
ce in args] ce in args]
...@@ -270,7 +271,7 @@ class CourseEnrollmentByGenderViewTests(CourseEnrollmentViewTestCaseMixin, TestC ...@@ -270,7 +271,7 @@ class CourseEnrollmentByGenderViewTests(CourseEnrollmentViewTestCaseMixin, TestC
def format_as_response(self, *args): def format_as_response(self, *args):
return [ return [
{'course_id': str(ce.course_id), 'count': ce.count, 'date': ce.date.strftime(settings.DATE_FORMAT), {'course_id': str(ce.course_id), 'count': ce.count, 'date': ce.date.strftime(settings.DATE_FORMAT),
'gender': ce.gender} for ce in args] 'gender': ce.gender, 'created': ce.created.strftime(settings.DATETIME_FORMAT)} for ce in args]
# pylint: disable=no-member,no-value-for-parameter # pylint: disable=no-member,no-value-for-parameter
...@@ -315,7 +316,8 @@ class CourseEnrollmentViewTests(CourseEnrollmentViewTestCaseMixin, TestCaseWithA ...@@ -315,7 +316,8 @@ class CourseEnrollmentViewTests(CourseEnrollmentViewTestCaseMixin, TestCaseWithA
def format_as_response(self, *args): def format_as_response(self, *args):
return [ return [
{'course_id': str(ce.course_id), 'count': ce.count, 'date': ce.date.strftime(settings.DATE_FORMAT)} {'course_id': str(ce.course_id), 'count': ce.count, 'date': ce.date.strftime(settings.DATE_FORMAT),
'created': ce.created.strftime(settings.DATETIME_FORMAT)}
for ce in args] for ce in args]
...@@ -332,6 +334,7 @@ class CourseEnrollmentByLocationViewTests(CourseEnrollmentViewTestCaseMixin, Tes ...@@ -332,6 +334,7 @@ class CourseEnrollmentByLocationViewTests(CourseEnrollmentViewTestCaseMixin, Tes
unknown['course_id'] = arg.course_id unknown['course_id'] = arg.course_id
unknown['date'] = arg.date.strftime(settings.DATE_FORMAT) unknown['date'] = arg.date.strftime(settings.DATE_FORMAT)
unknown['count'] += arg.count unknown['count'] += arg.count
unknown['created'] = arg.created.strftime(settings.DATETIME_FORMAT)
args = [arg for arg in args if arg.country != UNKNOWN_COUNTRY] args = [arg for arg in args if arg.country != UNKNOWN_COUNTRY]
args = sorted(args, key=lambda item: (item.date, item.course_id, item.country.alpha3)) args = sorted(args, key=lambda item: (item.date, item.course_id, item.country.alpha3))
...@@ -339,7 +342,8 @@ class CourseEnrollmentByLocationViewTests(CourseEnrollmentViewTestCaseMixin, Tes ...@@ -339,7 +342,8 @@ class CourseEnrollmentByLocationViewTests(CourseEnrollmentViewTestCaseMixin, Tes
response = [unknown] response = [unknown]
response += [ response += [
{'course_id': str(ce.course_id), 'count': ce.count, 'date': ce.date.strftime(settings.DATE_FORMAT), {'course_id': str(ce.course_id), 'count': ce.count, 'date': ce.date.strftime(settings.DATE_FORMAT),
'country': {'alpha2': ce.country.alpha2, 'alpha3': ce.country.alpha3, 'name': ce.country.name}} for ce in 'country': {'alpha2': ce.country.alpha2, 'alpha3': ce.country.alpha3, 'name': ce.country.name},
'created': ce.created.strftime(settings.DATETIME_FORMAT)} for ce in
args] args]
return response return response
...@@ -399,6 +403,7 @@ class CourseActivityWeeklyViewTests(CourseViewTestCaseMixin, TestCaseWithAuthent ...@@ -399,6 +403,7 @@ class CourseActivityWeeklyViewTests(CourseViewTestCaseMixin, TestCaseWithAuthent
u'course_id': activity.course_id, u'course_id': activity.course_id,
u'interval_start': activity.interval_start.strftime(settings.DATETIME_FORMAT), u'interval_start': activity.interval_start.strftime(settings.DATETIME_FORMAT),
u'interval_end': activity.interval_end.strftime(settings.DATETIME_FORMAT), u'interval_end': activity.interval_end.strftime(settings.DATETIME_FORMAT),
u'created': activity.created.strftime(settings.DATETIME_FORMAT),
activity_type: activity.count activity_type: activity.count
}) })
......
...@@ -128,11 +128,13 @@ class CourseActivityWeeklyView(BaseCourseView): ...@@ -128,11 +128,13 @@ class CourseActivityWeeklyView(BaseCourseView):
u'course_id': key[0], u'course_id': key[0],
u'interval_start': key[1], u'interval_start': key[1],
u'interval_end': key[2], u'interval_end': key[2],
u'created': None
} }
for activity in group: for activity in group:
activity_type = self._format_activity_type(activity.activity_type) activity_type = self._format_activity_type(activity.activity_type)
item[activity_type] = activity.count item[activity_type] = activity.count
item[u'created'] = max(activity.created, item[u'created']) if item[u'created'] else activity.created
formatted_data.append(item) formatted_data.append(item)
...@@ -348,8 +350,10 @@ class CourseEnrollmentByLocationView(BaseCourseEnrollmentView): ...@@ -348,8 +350,10 @@ class CourseEnrollmentByLocationView(BaseCourseEnrollmentView):
date = key[0] date = key[0]
country_code = key[1] country_code = key[1]
course_id = key[2] course_id = key[2]
created = None
for item in group: for item in group:
created = max(created, item.created) if created else item.created
count += item.count count += item.count
# pylint: disable=no-value-for-parameter,unexpected-keyword-arg # pylint: disable=no-value-for-parameter,unexpected-keyword-arg
...@@ -357,7 +361,8 @@ class CourseEnrollmentByLocationView(BaseCourseEnrollmentView): ...@@ -357,7 +361,8 @@ class CourseEnrollmentByLocationView(BaseCourseEnrollmentView):
course_id=course_id, course_id=course_id,
date=date, date=date,
country_code=country_code, country_code=country_code,
count=count count=count,
created=created
)) ))
# Note: We are returning a list, instead of a queryset. This is # Note: We are returning a list, instead of a queryset. This is
......
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