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
f384d6e3
Commit
f384d6e3
authored
Jul 22, 2014
by
Zia Fazal
Committed by
Jonathan Piacenti
Aug 20, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
filter by groups
parent
232af6ed
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
68 additions
and
5 deletions
+68
-5
lms/djangoapps/api_manager/courses/tests.py
+49
-0
lms/djangoapps/api_manager/courses/views.py
+19
-5
No files found.
lms/djangoapps/api_manager/courses/tests.py
View file @
f384d6e3
...
@@ -921,6 +921,55 @@ class CoursesApiTests(TestCase):
...
@@ -921,6 +921,55 @@ class CoursesApiTests(TestCase):
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
len
(
response
.
data
[
'enrollments'
]),
3
)
self
.
assertEqual
(
len
(
response
.
data
[
'enrollments'
]),
3
)
def
test_courses_users_list_get_filter_by_groups
(
self
):
# create 2 groups
group_ids
=
[]
for
i
in
xrange
(
1
,
3
):
data
=
{
'name'
:
'{} {}'
.
format
(
self
.
test_group_name
,
i
),
'type'
:
'test'
}
response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
group_ids
.
append
(
response
.
data
[
'id'
])
# create 5 users
users
=
[]
for
i
in
xrange
(
0
,
5
):
data
=
{
'email'
:
'test{}@example.com'
.
format
(
i
),
'username'
:
'test_user{}'
.
format
(
i
),
'password'
:
'test_pass'
,
'first_name'
:
'John{}'
.
format
(
i
),
'last_name'
:
'Doe{}'
.
format
(
i
)
}
response
=
self
.
do_post
(
'/api/users'
,
data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
users
.
append
(
response
.
data
[
'id'
])
if
i
<
2
:
data
=
{
'user_id'
:
response
.
data
[
'id'
]}
response
=
self
.
do_post
(
'{}{}/users'
.
format
(
self
.
base_groups_uri
,
group_ids
[
i
]),
data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
# enroll all users in course
test_uri
=
self
.
base_courses_uri
+
'/'
+
self
.
test_course_id
+
'/users'
for
user
in
users
:
data
=
{
'user_id'
:
user
}
response
=
self
.
do_post
(
test_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
# retrieve all users enrolled in the course and member of group 1
response
=
self
.
do_get
(
'{}?groups={}'
.
format
(
test_uri
,
group_ids
[
0
]))
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertGreaterEqual
(
len
(
response
.
data
[
'enrollments'
]),
1
)
# retrieve all users enrolled in the course and member of group 1 and group 2
response
=
self
.
do_get
(
'{}?groups={},{}'
.
format
(
test_uri
,
group_ids
[
0
],
group_ids
[
1
]))
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertGreaterEqual
(
len
(
response
.
data
[
'enrollments'
]),
2
)
# retrieve all users enrolled in the course and not member of group 1
response
=
self
.
do_get
(
'{}?exclude_groups={}'
.
format
(
test_uri
,
group_ids
[
0
]))
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertGreaterEqual
(
len
(
response
.
data
[
'enrollments'
]),
4
)
def
test_courses_users_detail_get
(
self
):
def
test_courses_users_detail_get
(
self
):
test_uri
=
self
.
base_courses_uri
+
'/'
+
self
.
test_course_id
+
'/users'
test_uri
=
self
.
base_courses_uri
+
'/'
+
self
.
test_course_id
+
'/users'
test_user_uri
=
'/api/users'
test_user_uri
=
'/api/users'
...
...
lms/djangoapps/api_manager/courses/views.py
View file @
f384d6e3
...
@@ -921,11 +921,17 @@ class CoursesUsersList(SecureAPIView):
...
@@ -921,11 +921,17 @@ class CoursesUsersList(SecureAPIView):
* username: The username of the user.
* username: The username of the user.
* GET supports filtering of user by organization(s)
like thi
s
* GET supports filtering of user by organization(s)
, group
s
* To get users enrolled in a course and are also member of organization
* To get users enrolled in a course and are also member of organization
/api/courses/{course_id}/users?organizations={organization_id}
```/api/courses/{course_id}/users?organizations={organization_id}```
* organizations filter can be a single id or multiple ids separated by comma
* organizations filter can be a single id or multiple ids separated by comma
/api/courses/{course_id}/users?organizations={organization_id1},{organization_id2}
```/api/courses/{course_id}/users?organizations={organization_id1},{organization_id2}```
* To get users enrolled in a course and also member of specific groups
```/api/courses/{course_id}/users?groups={group_id1},{group_id2}```
* GET supports exclude filtering of user by groups
* To get users enrolled in a course and also not member of specific groups
```/api/courses/{course_id}/users?exclude_groups={group_id1},{group_id2}```
**Post Values**
**Post Values**
...
@@ -972,6 +978,8 @@ class CoursesUsersList(SecureAPIView):
...
@@ -972,6 +978,8 @@ class CoursesUsersList(SecureAPIView):
GET /api/courses/{course_id}
GET /api/courses/{course_id}
"""
"""
orgs
=
request
.
QUERY_PARAMS
.
get
(
'organizations'
)
orgs
=
request
.
QUERY_PARAMS
.
get
(
'organizations'
)
groups
=
request
.
QUERY_PARAMS
.
get
(
'groups'
,
None
)
exclude_groups
=
request
.
QUERY_PARAMS
.
get
(
'exclude_groups'
,
None
)
response_data
=
OrderedDict
()
response_data
=
OrderedDict
()
base_uri
=
generate_base_uri
(
request
)
base_uri
=
generate_base_uri
(
request
)
response_data
[
'uri'
]
=
base_uri
response_data
[
'uri'
]
=
base_uri
...
@@ -980,11 +988,17 @@ class CoursesUsersList(SecureAPIView):
...
@@ -980,11 +988,17 @@ class CoursesUsersList(SecureAPIView):
return
Response
({},
status
=
status
.
HTTP_404_NOT_FOUND
)
return
Response
({},
status
=
status
.
HTTP_404_NOT_FOUND
)
# Get a list of all enrolled students
# Get a list of all enrolled students
users
=
CourseEnrollment
.
users_enrolled_in
(
course_key
)
users
=
CourseEnrollment
.
users_enrolled_in
(
course_key
)
if
orgs
:
if
','
in
orgs
:
upper_bound
=
getattr
(
settings
,
'API_LOOKUP_UPPER_BOUND'
,
100
)
upper_bound
=
getattr
(
settings
,
'API_LOOKUP_UPPER_BOUND'
,
100
)
if
orgs
:
orgs
=
orgs
.
split
(
","
)[:
upper_bound
]
orgs
=
orgs
.
split
(
","
)[:
upper_bound
]
users
=
users
.
filter
(
organizations__in
=
orgs
)
users
=
users
.
filter
(
organizations__in
=
orgs
)
if
groups
:
groups
=
groups
.
split
(
","
)[:
upper_bound
]
users
=
users
.
filter
(
groups__in
=
groups
)
if
exclude_groups
:
exclude_groups
=
exclude_groups
.
split
(
","
)[:
upper_bound
]
users
=
users
.
exclude
(
groups__in
=
exclude_groups
)
response_data
[
'enrollments'
]
=
[]
response_data
[
'enrollments'
]
=
[]
for
user
in
users
:
for
user
in
users
:
user_data
=
OrderedDict
()
user_data
=
OrderedDict
()
...
...
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