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
3125c9c7
Commit
3125c9c7
authored
Dec 22, 2014
by
Zia Fazal
Committed by
Jonathan Piacenti
Aug 20, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added course_complete status
return grades instead of complete status added complete_status too
parent
215fde0b
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
68 additions
and
2 deletions
+68
-2
lms/djangoapps/organizations/tests.py
+39
-1
lms/djangoapps/organizations/views.py
+29
-1
No files found.
lms/djangoapps/organizations/tests.py
View file @
3125c9c7
...
@@ -16,8 +16,8 @@ from django.test.utils import override_settings
...
@@ -16,8 +16,8 @@ from django.test.utils import override_settings
from
gradebook.models
import
StudentGradebook
from
gradebook.models
import
StudentGradebook
from
student.models
import
UserProfile
from
student.models
import
UserProfile
from
student.tests.factories
import
CourseEnrollmentFactory
from
xmodule.modulestore.tests.django_utils
import
ModuleStoreTestCase
from
xmodule.modulestore.tests.django_utils
import
ModuleStoreTestCase
from
student.tests.factories
import
CourseEnrollmentFactory
,
UserFactory
from
xmodule.modulestore.tests.factories
import
CourseFactory
from
xmodule.modulestore.tests.factories
import
CourseFactory
TEST_API_KEY
=
str
(
uuid
.
uuid4
())
TEST_API_KEY
=
str
(
uuid
.
uuid4
())
...
@@ -343,6 +343,44 @@ class OrganizationsApiTests(ModuleStoreTestCase):
...
@@ -343,6 +343,44 @@ class OrganizationsApiTests(ModuleStoreTestCase):
self
.
assertEqual
(
response
.
data
[
0
][
'id'
],
self
.
test_user
.
id
)
self
.
assertEqual
(
response
.
data
[
0
][
'id'
],
self
.
test_user
.
id
)
self
.
assertEqual
(
response
.
data
[
0
][
'course_count'
],
2
)
self
.
assertEqual
(
response
.
data
[
0
][
'course_count'
],
2
)
def
test_organizations_users_get_with_grades
(
self
):
# Create 4 users
user_course
=
4
users_completed
=
2
users
=
[
UserFactory
.
create
(
username
=
"testuser"
+
str
(
__
),
profile
=
'test'
)
for
__
in
xrange
(
user_course
)]
for
i
,
user
in
enumerate
(
users
):
CourseEnrollmentFactory
.
create
(
user
=
user
,
course_id
=
self
.
course
.
id
)
grades
=
(
0.75
,
0.85
)
# mark 3 users as who completed course and 1 who did not
if
i
<
users_completed
:
grades
=
(
0.90
,
0.91
)
StudentGradebook
.
objects
.
create
(
user
=
user
,
course_id
=
self
.
course
.
id
,
grade
=
grades
[
0
],
proforma_grade
=
grades
[
1
])
data
=
{
'name'
:
self
.
test_organization_name
,
'display_name'
:
self
.
test_organization_display_name
,
'contact_name'
:
self
.
test_organization_contact_name
,
'contact_email'
:
self
.
test_organization_contact_email
,
'contact_phone'
:
self
.
test_organization_contact_phone
}
response
=
self
.
do_post
(
self
.
base_organizations_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
test_uri
=
'{}{}/'
.
format
(
self
.
base_organizations_uri
,
str
(
response
.
data
[
'id'
]))
users_uri
=
'{}users/'
.
format
(
test_uri
)
for
user
in
users
:
data
=
{
"id"
:
user
.
id
}
response
=
self
.
do_post
(
users_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
response
=
self
.
do_get
(
'{}?{}&course_id={}'
.
format
(
users_uri
,
'include_grades=True'
,
self
.
course
.
id
))
self
.
assertEqual
(
response
.
status_code
,
200
)
complete_count
=
len
([
user
for
user
in
response
.
data
if
user
[
'complete_status'
]])
self
.
assertEqual
(
complete_count
,
users_completed
)
grade_sum
=
sum
([
user
[
'grade'
]
for
user
in
response
.
data
])
proforma_grade_sum
=
sum
([
user
[
'proforma_grade'
]
for
user
in
response
.
data
])
self
.
assertEqual
(
grade_sum
,
0.75
+
0.75
+
0.9
+
0.9
)
self
.
assertEqual
(
proforma_grade_sum
,
0.85
+
0.85
+
0.91
+
0.91
)
def
test_organizations_metrics_get
(
self
):
def
test_organizations_metrics_get
(
self
):
users
=
[]
users
=
[]
for
i
in
xrange
(
1
,
6
):
for
i
in
xrange
(
1
,
6
):
...
...
lms/djangoapps/organizations/views.py
View file @
3125c9c7
...
@@ -73,11 +73,30 @@ class OrganizationsViewSet(viewsets.ModelViewSet):
...
@@ -73,11 +73,30 @@ class OrganizationsViewSet(viewsets.ModelViewSet):
@action
(
methods
=
[
'get'
,
'post'
])
@action
(
methods
=
[
'get'
,
'post'
])
def
users
(
self
,
request
,
pk
):
def
users
(
self
,
request
,
pk
):
"""
"""
Add a User to an Organization
- URI: ```/api/organizations/{org_id}/users/```
- GET: Returns users in an organization
* course_id parameter should filter user by course
* include_course_counts parameter should be `true` to get user's enrollment count
* include_grades parameter should be `true` to get user's grades
* for the course given in the course_id parameter
- POST: Adds a User to an Organization
"""
"""
if
request
.
method
==
'GET'
:
if
request
.
method
==
'GET'
:
include_course_counts
=
request
.
QUERY_PARAMS
.
get
(
'include_course_counts'
,
None
)
include_course_counts
=
request
.
QUERY_PARAMS
.
get
(
'include_course_counts'
,
None
)
include_grades
=
request
.
QUERY_PARAMS
.
get
(
'include_grades'
,
None
)
course_id
=
request
.
QUERY_PARAMS
.
get
(
'course_id'
,
None
)
grade_complete_match_range
=
getattr
(
settings
,
'GRADEBOOK_GRADE_COMPLETE_PROFORMA_MATCH_RANGE'
,
0.01
)
course_key
=
None
if
course_id
:
course_key
=
get_course_key
(
course_id
)
users
=
User
.
objects
.
filter
(
organizations
=
pk
)
users
=
User
.
objects
.
filter
(
organizations
=
pk
)
if
course_key
:
users
=
users
.
filter
(
courseenrollment__course_id__exact
=
course_key
,
courseenrollment__is_active
=
True
)
if
str2bool
(
include_grades
):
users
=
users
.
select_related
(
'studentgradebook'
)
response_data
=
[]
response_data
=
[]
if
users
:
if
users
:
for
user
in
users
:
for
user
in
users
:
...
@@ -86,6 +105,15 @@ class OrganizationsViewSet(viewsets.ModelViewSet):
...
@@ -86,6 +105,15 @@ class OrganizationsViewSet(viewsets.ModelViewSet):
if
str2bool
(
include_course_counts
):
if
str2bool
(
include_course_counts
):
enrollments
=
CourseEnrollment
.
enrollments_for_user
(
user
)
.
count
()
enrollments
=
CourseEnrollment
.
enrollments_for_user
(
user
)
.
count
()
user_data
[
'course_count'
]
=
enrollments
user_data
[
'course_count'
]
=
enrollments
if
str2bool
(
include_grades
)
and
course_key
:
user_grades
=
{
'grade'
:
0
,
'proforma_grade'
:
0
}
gradebook
=
user
.
studentgradebook_set
.
filter
(
course_id
=
course_key
)
if
gradebook
:
user_grades
[
'grade'
]
=
gradebook
[
0
]
.
grade
user_grades
[
'proforma_grade'
]
=
gradebook
[
0
]
.
proforma_grade
user_grades
[
'complete_status'
]
=
True
if
0
<
gradebook
[
0
]
.
proforma_grade
<=
\
gradebook
[
0
]
.
grade
+
grade_complete_match_range
else
False
user_data
.
update
(
user_grades
)
response_data
.
append
(
user_data
)
response_data
.
append
(
user_data
)
return
Response
(
response_data
,
status
=
status
.
HTTP_200_OK
)
return
Response
(
response_data
,
status
=
status
.
HTTP_200_OK
)
else
:
else
:
...
...
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