Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
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-platform
Commits
350a9c02
Commit
350a9c02
authored
Sep 15, 2014
by
Matt Drayer
Committed by
Jonathan Piacenti
Aug 20, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mattdrayer/api: Fixes to support Apros cohort page
parent
77654cae
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
59 additions
and
55 deletions
+59
-55
lms/djangoapps/api_manager/courses/tests.py
+3
-1
lms/djangoapps/api_manager/courses/views.py
+10
-9
lms/djangoapps/gradebook/models.py
+46
-45
No files found.
lms/djangoapps/api_manager/courses/tests.py
View file @
350a9c02
...
@@ -1817,7 +1817,6 @@ class CoursesApiTests(TestCase):
...
@@ -1817,7 +1817,6 @@ class CoursesApiTests(TestCase):
response
=
self
.
do_post
(
completion_uri
,
completions_data
)
response
=
self
.
do_post
(
completion_uri
,
completions_data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
self
.
assertEqual
(
response
.
status_code
,
201
)
# get course metrics
# get course metrics
course_metrics_uri
=
'{}/{}/metrics/'
.
format
(
self
.
base_courses_uri
,
self
.
test_course_id
)
course_metrics_uri
=
'{}/{}/metrics/'
.
format
(
self
.
base_courses_uri
,
self
.
test_course_id
)
response
=
self
.
do_get
(
course_metrics_uri
)
response
=
self
.
do_get
(
course_metrics_uri
)
...
@@ -1825,6 +1824,9 @@ class CoursesApiTests(TestCase):
...
@@ -1825,6 +1824,9 @@ class CoursesApiTests(TestCase):
self
.
assertEqual
(
response
.
data
[
'users_enrolled'
],
users_to_add
+
USER_COUNT
)
self
.
assertEqual
(
response
.
data
[
'users_enrolled'
],
users_to_add
+
USER_COUNT
)
self
.
assertEqual
(
response
.
data
[
'users_started'
],
1
)
self
.
assertEqual
(
response
.
data
[
'users_started'
],
1
)
self
.
assertIsNotNone
(
response
.
data
[
'grade_cutoffs'
])
self
.
assertIsNotNone
(
response
.
data
[
'grade_cutoffs'
])
# TODO: (mattdrayer) Uncomment after comment service has been updated
# self.assertEqual(response.data['num_threads'], 5)
# self.assertEqual(response.data['num_active_threads'], 3)
# get course metrics by organization
# get course metrics by organization
course_metrics_uri
=
'{}/{}/metrics/?organization={}'
.
format
(
self
.
base_courses_uri
,
self
.
test_course_id
,
org_id
)
course_metrics_uri
=
'{}/{}/metrics/?organization={}'
.
format
(
self
.
base_courses_uri
,
self
.
test_course_id
,
org_id
)
...
...
lms/djangoapps/api_manager/courses/views.py
View file @
350a9c02
...
@@ -1503,15 +1503,16 @@ class CoursesMetrics(SecureAPIView):
...
@@ -1503,15 +1503,16 @@ class CoursesMetrics(SecureAPIView):
'users_started'
:
users_started_qs
.
values
(
'user'
)
.
distinct
()
.
count
(),
'users_started'
:
users_started_qs
.
values
(
'user'
)
.
distinct
()
.
count
(),
'grade_cutoffs'
:
course_descriptor
.
grading_policy
[
'GRADE_CUTOFFS'
]
'grade_cutoffs'
:
course_descriptor
.
grading_policy
[
'GRADE_CUTOFFS'
]
}
}
thread_stats
=
{}
# TODO: (mattdrayer) Uncomment after comment service has been updated
try
:
# thread_stats = {}
thread_stats
=
get_course_thread_stats
(
slash_course_id
)
# try:
except
CommentClientRequestError
,
e
:
# thread_stats = get_course_thread_stats(slash_course_id)
data
=
{
# except CommentClientRequestError, e:
"err_msg"
:
str
(
e
)
# data = {
}
# "err_msg": str(e)
return
Response
(
data
,
status
=
status
.
HTTP_500_INTERNAL_SERVER_ERROR
)
# }
data
.
update
(
thread_stats
)
# return Response(data, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
# data.update(thread_stats)
return
Response
(
data
,
status
=
status
.
HTTP_200_OK
)
return
Response
(
data
,
status
=
status
.
HTTP_200_OK
)
...
...
lms/djangoapps/gradebook/models.py
View file @
350a9c02
...
@@ -69,51 +69,52 @@ class StudentGradebook(TimeStampedModel):
...
@@ -69,51 +69,52 @@ class StudentGradebook(TimeStampedModel):
queryset
=
StudentGradebook
.
objects
.
select_related
(
'user'
)
\
queryset
=
StudentGradebook
.
objects
.
select_related
(
'user'
)
\
.
filter
(
course_id__exact
=
course_key
,
user__is_active
=
True
)
.
filter
(
course_id__exact
=
course_key
,
user__is_active
=
True
)
gradebook_user_count
=
len
(
queryset
)
gradebook_user_count
=
len
(
queryset
)
if
gradebook_user_count
:
# Remove any users who should not be considered for the statistics
if
exclude_users
:
# Remove any users who should not be considered for the statistics
total_user_count
=
total_user_count
-
len
(
exclude_users
)
if
exclude_users
:
queryset
=
queryset
.
exclude
(
user__in
=
exclude_users
)
total_user_count
=
total_user_count
-
len
(
exclude_users
)
gradebook_user_count
=
len
(
queryset
)
queryset
=
queryset
.
exclude
(
user__in
=
exclude_users
)
gradebook_user_count
=
len
(
queryset
)
# Calculate the class average
course_avg
=
queryset
.
aggregate
(
Avg
(
'grade'
))[
'grade__avg'
]
# Calculate the class average
if
course_avg
is
not
None
and
gradebook_user_count
<
total_user_count
:
course_avg
=
queryset
.
aggregate
(
Avg
(
'grade'
))[
'grade__avg'
]
# Take into account any ungraded students (assumes zeros for grades...)
if
course_avg
is
not
None
and
gradebook_user_count
<
total_user_count
:
course_avg
=
course_avg
/
total_user_count
*
gradebook_user_count
# Take into account any ungraded students (assumes zeros for grades...)
course_avg
=
course_avg
/
total_user_count
*
gradebook_user_count
# Fill up the response container
data
[
'course_avg'
]
=
course_avg
# Fill up the response container
data
[
'course_max'
]
=
queryset
.
aggregate
(
Max
(
'grade'
))[
'grade__max'
]
data
[
'course_avg'
]
=
course_avg
data
[
'course_min'
]
=
queryset
.
aggregate
(
Min
(
'grade'
))[
'grade__min'
]
data
[
'course_max'
]
=
queryset
.
aggregate
(
Max
(
'grade'
))[
'grade__max'
]
data
[
'course_count'
]
=
queryset
.
aggregate
(
Count
(
'grade'
))[
'grade__count'
]
data
[
'course_min'
]
=
queryset
.
aggregate
(
Min
(
'grade'
))[
'grade__min'
]
data
[
'course_count'
]
=
queryset
.
aggregate
(
Count
(
'grade'
))[
'grade__count'
]
# Construct the leaderboard as a queryset
data
[
'queryset'
]
=
queryset
.
values
(
# Construct the leaderboard as a queryset
'user__id'
,
data
[
'queryset'
]
=
queryset
.
values
(
'user__username'
,
'user__id'
,
'user__profile__title'
,
'user__username'
,
'user__profile__avatar_url'
,
'user__profile__title'
,
'grade'
,
'user__profile__avatar_url'
,
'created'
)
\
'grade'
,
.
order_by
(
'-grade'
,
'created'
)[:
count
]
'created'
)
\
.
order_by
(
'-grade'
,
'created'
)[:
count
]
# If a user_id value was provided, we need to provide some additional user-specific data to the caller
if
user_id
:
# If a user_id value was provided, we need to provide some additional user-specific data to the caller
user_grade
=
0
if
user_id
:
user_time_scored
=
timezone
.
now
()
user_grade
=
0
try
:
user_time_scored
=
timezone
.
now
()
user_queryset
=
StudentGradebook
.
objects
.
get
(
course_id__exact
=
course_key
,
user__id
=
user_id
)
try
:
except
StudentGradebook
.
DoesNotExist
:
user_queryset
=
StudentGradebook
.
objects
.
get
(
course_id__exact
=
course_key
,
user__id
=
user_id
)
user_queryset
=
None
except
StudentGradebook
.
DoesNotExist
:
if
user_queryset
:
user_queryset
=
None
user_grade
=
user_queryset
.
grade
if
user_queryset
:
user_time_scored
=
user_queryset
.
created
user_grade
=
user_queryset
.
grade
users_above
=
queryset
.
filter
(
grade__gte
=
user_grade
)
\
user_time_scored
=
user_queryset
.
created
.
exclude
(
user__id
=
user_id
)
\
users_above
=
queryset
.
filter
(
grade__gte
=
user_grade
)
\
.
exclude
(
grade
=
user_grade
,
created__lt
=
user_time_scored
)
.
exclude
(
user__id
=
user_id
)
\
data
[
'user_position'
]
=
len
(
users_above
)
+
1
.
exclude
(
grade
=
user_grade
,
created__lt
=
user_time_scored
)
data
[
'user_grade'
]
=
user_grade
data
[
'user_position'
]
=
len
(
users_above
)
+
1
data
[
'user_grade'
]
=
user_grade
return
data
return
data
...
...
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