Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-analytics-data-api
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-analytics-data-api
Commits
87c4a49c
Commit
87c4a49c
authored
Aug 26, 2016
by
Tyler Hallada
Committed by
Dennis Jen
Aug 29, 2016
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Default gender counts to 0, removed unused imports, fixed linting errors
parent
3809ba5b
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
23 additions
and
9 deletions
+23
-9
analytics_data_api/v0/serializers.py
+9
-0
analytics_data_api/v0/views/courses.py
+7
-3
analytics_data_api/v0/views/learners.py
+2
-2
analytics_data_api/v0/views/problems.py
+1
-1
analytics_data_api/v0/views/utils.py
+2
-2
analytics_data_api/v0/views/videos.py
+2
-1
No files found.
analytics_data_api/v0/serializers.py
View file @
87c4a49c
...
@@ -47,6 +47,7 @@ class ModelSerializerWithCreatedField(serializers.ModelSerializer):
...
@@ -47,6 +47,7 @@ class ModelSerializerWithCreatedField(serializers.ModelSerializer):
created
=
serializers
.
DateTimeField
(
format
=
settings
.
DATETIME_FORMAT
)
created
=
serializers
.
DateTimeField
(
format
=
settings
.
DATETIME_FORMAT
)
# pylint: disable=abstract-method
class
ProblemSerializer
(
serializers
.
Serializer
):
class
ProblemSerializer
(
serializers
.
Serializer
):
"""
"""
Serializer for problems.
Serializer for problems.
...
@@ -59,6 +60,7 @@ class ProblemSerializer(serializers.Serializer):
...
@@ -59,6 +60,7 @@ class ProblemSerializer(serializers.Serializer):
created
=
serializers
.
DateTimeField
(
format
=
settings
.
DATETIME_FORMAT
)
created
=
serializers
.
DateTimeField
(
format
=
settings
.
DATETIME_FORMAT
)
# pylint: disable=abstract-method
class
ProblemsAndTagsSerializer
(
serializers
.
Serializer
):
class
ProblemsAndTagsSerializer
(
serializers
.
Serializer
):
"""
"""
Serializer for problems and tags.
Serializer for problems and tags.
...
@@ -231,6 +233,7 @@ class CourseEnrollmentModeDailySerializer(BaseCourseEnrollmentModelSerializer):
...
@@ -231,6 +233,7 @@ class CourseEnrollmentModeDailySerializer(BaseCourseEnrollmentModelSerializer):
fields
=
[
'course_id'
,
'date'
,
'count'
,
'cumulative_count'
,
'created'
]
+
ENROLLMENT_MODES
fields
=
[
'course_id'
,
'date'
,
'count'
,
'cumulative_count'
,
'created'
]
+
ENROLLMENT_MODES
# pylint: disable=abstract-method
class
CountrySerializer
(
serializers
.
Serializer
):
class
CountrySerializer
(
serializers
.
Serializer
):
"""
"""
Serialize country to an object with fields for the complete country name
Serialize country to an object with fields for the complete country name
...
@@ -329,10 +332,12 @@ class VideoTimelineSerializer(ModelSerializerWithCreatedField):
...
@@ -329,10 +332,12 @@ class VideoTimelineSerializer(ModelSerializerWithCreatedField):
)
)
# pylint: disable=abstract-method
class
LastUpdatedSerializer
(
serializers
.
Serializer
):
class
LastUpdatedSerializer
(
serializers
.
Serializer
):
last_updated
=
serializers
.
DateTimeField
(
source
=
'date'
,
format
=
settings
.
DATE_FORMAT
)
last_updated
=
serializers
.
DateTimeField
(
source
=
'date'
,
format
=
settings
.
DATE_FORMAT
)
# pylint: disable=abstract-method
class
LearnerSerializer
(
serializers
.
Serializer
):
class
LearnerSerializer
(
serializers
.
Serializer
):
username
=
serializers
.
CharField
()
username
=
serializers
.
CharField
()
enrollment_mode
=
serializers
.
CharField
()
enrollment_mode
=
serializers
.
CharField
()
...
@@ -407,6 +412,7 @@ class EdxPaginationSerializer(pagination.PageNumberPagination):
...
@@ -407,6 +412,7 @@ class EdxPaginationSerializer(pagination.PageNumberPagination):
]))
]))
# pylint: disable=abstract-method
class
EngagementDaySerializer
(
serializers
.
Serializer
):
class
EngagementDaySerializer
(
serializers
.
Serializer
):
date
=
serializers
.
DateField
(
format
=
settings
.
DATE_FORMAT
)
date
=
serializers
.
DateField
(
format
=
settings
.
DATE_FORMAT
)
problems_attempted
=
serializers
.
SerializerMethodField
()
problems_attempted
=
serializers
.
SerializerMethodField
()
...
@@ -427,11 +433,13 @@ class EngagementDaySerializer(serializers.Serializer):
...
@@ -427,11 +433,13 @@ class EngagementDaySerializer(serializers.Serializer):
return
obj
.
get
(
'videos_viewed'
,
0
)
return
obj
.
get
(
'videos_viewed'
,
0
)
# pylint: disable=abstract-method
class
DateRangeSerializer
(
serializers
.
Serializer
):
class
DateRangeSerializer
(
serializers
.
Serializer
):
start
=
serializers
.
DateTimeField
(
source
=
'start_date'
,
format
=
settings
.
DATE_FORMAT
)
start
=
serializers
.
DateTimeField
(
source
=
'start_date'
,
format
=
settings
.
DATE_FORMAT
)
end
=
serializers
.
DateTimeField
(
source
=
'end_date'
,
format
=
settings
.
DATE_FORMAT
)
end
=
serializers
.
DateTimeField
(
source
=
'end_date'
,
format
=
settings
.
DATE_FORMAT
)
# pylint: disable=abstract-method
class
EnagementRangeMetricSerializer
(
serializers
.
Serializer
):
class
EnagementRangeMetricSerializer
(
serializers
.
Serializer
):
"""
"""
Serializes ModuleEngagementMetricRanges ('bottom', 'average', and 'top') into
Serializes ModuleEngagementMetricRanges ('bottom', 'average', and 'top') into
...
@@ -456,6 +464,7 @@ class EnagementRangeMetricSerializer(serializers.Serializer):
...
@@ -456,6 +464,7 @@ class EnagementRangeMetricSerializer(serializers.Serializer):
return
[
metric_range
.
low_value
,
metric_range
.
high_value
]
if
metric_range
else
None
return
[
metric_range
.
low_value
,
metric_range
.
high_value
]
if
metric_range
else
None
# pylint: disable=abstract-method
class
CourseLearnerMetadataSerializer
(
serializers
.
Serializer
):
class
CourseLearnerMetadataSerializer
(
serializers
.
Serializer
):
enrollment_modes
=
serializers
.
ReadOnlyField
(
source
=
'es_data.enrollment_modes'
)
enrollment_modes
=
serializers
.
ReadOnlyField
(
source
=
'es_data.enrollment_modes'
)
segments
=
serializers
.
ReadOnlyField
(
source
=
'es_data.segments'
)
segments
=
serializers
.
ReadOnlyField
(
source
=
'es_data.segments'
)
...
...
analytics_data_api/v0/views/courses.py
View file @
87c4a49c
...
@@ -15,7 +15,7 @@ from analytics_data_api.constants import enrollment_modes
...
@@ -15,7 +15,7 @@ from analytics_data_api.constants import enrollment_modes
from
analytics_data_api.utils
import
dictfetchall
from
analytics_data_api.utils
import
dictfetchall
from
analytics_data_api.v0
import
models
,
serializers
from
analytics_data_api.v0
import
models
,
serializers
from
utils
import
raise_404_if_none
from
analytics_data_api.v0.views.
utils
import
raise_404_if_none
class
BaseCourseView
(
generics
.
ListAPIView
):
class
BaseCourseView
(
generics
.
ListAPIView
):
...
@@ -242,7 +242,7 @@ class CourseActivityMostRecentWeekView(generics.RetrieveAPIView):
...
@@ -242,7 +242,7 @@ class CourseActivityMostRecentWeekView(generics.RetrieveAPIView):
return
activity_type
return
activity_type
def
get_object
(
self
,
queryset
=
None
):
def
get_object
(
self
):
"""Select the activity report for the given course and activity type."""
"""Select the activity report for the given course and activity type."""
warnings
.
warn
(
'CourseActivityMostRecentWeekView has been deprecated! Use CourseActivityWeeklyView instead.'
,
warnings
.
warn
(
'CourseActivityMostRecentWeekView has been deprecated! Use CourseActivityWeeklyView instead.'
,
...
@@ -403,7 +403,11 @@ class CourseEnrollmentByGenderView(BaseCourseEnrollmentView):
...
@@ -403,7 +403,11 @@ class CourseEnrollmentByGenderView(BaseCourseEnrollmentView):
item
=
{
item
=
{
u'course_id'
:
key
[
0
],
u'course_id'
:
key
[
0
],
u'date'
:
key
[
1
],
u'date'
:
key
[
1
],
u'created'
:
None
u'created'
:
None
,
u'male'
:
0
,
u'female'
:
0
,
u'other'
:
0
,
u'unknown'
:
0
}
}
for
enrollment
in
group
:
for
enrollment
in
group
:
...
...
analytics_data_api/v0/views/learners.py
View file @
87c4a49c
...
@@ -103,7 +103,7 @@ class LearnerView(LastUpdateMixin, CourseViewMixin, generics.RetrieveAPIView):
...
@@ -103,7 +103,7 @@ class LearnerView(LastUpdateMixin, CourseViewMixin, generics.RetrieveAPIView):
def
get_queryset
(
self
):
def
get_queryset
(
self
):
return
RosterEntry
.
get_course_user
(
self
.
course_id
,
self
.
username
)
return
RosterEntry
.
get_course_user
(
self
.
course_id
,
self
.
username
)
def
get_object
(
self
,
queryset
=
None
):
def
get_object
(
self
):
queryset
=
self
.
get_queryset
()
queryset
=
self
.
get_queryset
()
if
len
(
queryset
)
==
1
:
if
len
(
queryset
)
==
1
:
return
queryset
[
0
]
return
queryset
[
0
]
...
@@ -362,7 +362,7 @@ class CourseLearnerMetadata(CourseViewMixin, generics.RetrieveAPIView):
...
@@ -362,7 +362,7 @@ class CourseLearnerMetadata(CourseViewMixin, generics.RetrieveAPIView):
"""
"""
serializer_class
=
CourseLearnerMetadataSerializer
serializer_class
=
CourseLearnerMetadataSerializer
def
get_object
(
self
,
queryset
=
None
):
def
get_object
(
self
):
# Because we're serializing data from both Elasticsearch and MySQL into
# Because we're serializing data from both Elasticsearch and MySQL into
# the same JSON object, we have to pass both sources of data in a dict
# the same JSON object, we have to pass both sources of data in a dict
# to our custom course metadata serializer.
# to our custom course metadata serializer.
...
...
analytics_data_api/v0/views/problems.py
View file @
87c4a49c
...
@@ -22,7 +22,7 @@ from analytics_data_api.v0.serializers import (
...
@@ -22,7 +22,7 @@ from analytics_data_api.v0.serializers import (
)
)
from
analytics_data_api.utils
import
matching_tuple
from
analytics_data_api.utils
import
matching_tuple
from
utils
import
raise_404_if_none
from
analytics_data_api.v0.views.
utils
import
raise_404_if_none
class
ProblemResponseAnswerDistributionView
(
generics
.
ListAPIView
):
class
ProblemResponseAnswerDistributionView
(
generics
.
ListAPIView
):
...
...
analytics_data_api/v0/views/utils.py
View file @
87c4a49c
...
@@ -12,6 +12,7 @@ def split_query_argument(argument):
...
@@ -12,6 +12,7 @@ def split_query_argument(argument):
else
:
else
:
return
None
return
None
def
raise_404_if_none
(
func
):
def
raise_404_if_none
(
func
):
"""
"""
Decorator for raiseing Http404 if function evaulation is falsey (e.g. empty queryset).
Decorator for raiseing Http404 if function evaulation is falsey (e.g. empty queryset).
...
@@ -22,4 +23,4 @@ def raise_404_if_none(func):
...
@@ -22,4 +23,4 @@ def raise_404_if_none(func):
return
queryset
return
queryset
else
:
else
:
raise
Http404
raise
Http404
return
func_wrapper
return
func_wrapper
\ No newline at end of file
analytics_data_api/v0/views/videos.py
View file @
87c4a49c
...
@@ -7,7 +7,8 @@ from rest_framework import generics
...
@@ -7,7 +7,8 @@ from rest_framework import generics
from
analytics_data_api.v0.models
import
VideoTimeline
from
analytics_data_api.v0.models
import
VideoTimeline
from
analytics_data_api.v0.serializers
import
VideoTimelineSerializer
from
analytics_data_api.v0.serializers
import
VideoTimelineSerializer
from
utils
import
raise_404_if_none
from
analytics_data_api.v0.views.utils
import
raise_404_if_none
class
VideoTimelineView
(
generics
.
ListAPIView
):
class
VideoTimelineView
(
generics
.
ListAPIView
):
"""
"""
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment