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
29a82ecc
Commit
29a82ecc
authored
Jun 20, 2014
by
Zia Fazal
Committed by
Jonathan Piacenti
Aug 20, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
implemented paging on groups list
parent
33e5803e
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
68 additions
and
44 deletions
+68
-44
lms/djangoapps/api_manager/groups/tests.py
+26
-22
lms/djangoapps/api_manager/groups/views.py
+14
-20
lms/djangoapps/projects/serializers.py
+28
-2
No files found.
lms/djangoapps/api_manager/groups/tests.py
View file @
29a82ecc
...
...
@@ -111,7 +111,8 @@ class GroupsApiTests(ModuleStoreTestCase):
def
test_group_list_get_with_profile
(
self
):
group_type
=
'series'
profile_data
=
{
'display_name'
:
'My first series'
}
display_name
=
'My first series'
profile_data
=
{
'display_name'
:
display_name
}
data
=
{
'name'
:
self
.
test_group_name
,
'type'
:
group_type
,
...
...
@@ -130,13 +131,14 @@ class GroupsApiTests(ModuleStoreTestCase):
test_uri
=
'{}?type={}'
.
format
(
self
.
base_groups_uri
,
group_type
)
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
len
(
response
.
data
),
1
)
self
.
assertEqual
(
response
.
data
[
0
][
'id'
],
group_id
)
self
.
assertEqual
(
response
.
data
[
0
][
'type'
],
'series'
)
self
.
assertEqual
(
response
.
data
[
0
][
'name'
],
self
.
test_group_name
)
response_profile_data
=
response
.
data
[
0
][
'data'
]
self
.
assertEqual
(
response_profile_data
[
'display_name'
],
'My first series'
)
self
.
assertEqual
(
response
.
data
[
'count'
],
1
)
self
.
assertEqual
(
response
.
data
[
'num_pages'
],
1
)
self
.
assertEqual
(
len
(
response
.
data
[
'results'
]),
1
)
self
.
assertEqual
(
response
.
data
[
'results'
][
0
][
'id'
],
group_id
)
self
.
assertEqual
(
response
.
data
[
'results'
][
0
][
'type'
],
group_type
)
self
.
assertEqual
(
response
.
data
[
'results'
][
0
][
'name'
],
self
.
test_group_name
)
response_profile_data
=
response
.
data
[
'results'
][
0
][
'data'
]
self
.
assertEqual
(
response_profile_data
[
'display_name'
],
display_name
)
# query the group detail
test_uri
=
'{}/{}'
.
format
(
self
.
base_groups_uri
,
str
(
group_id
))
...
...
@@ -146,15 +148,17 @@ class GroupsApiTests(ModuleStoreTestCase):
confirm_uri
=
self
.
test_server_prefix
+
test_uri
self
.
assertEqual
(
response
.
data
[
'uri'
],
confirm_uri
)
self
.
assertEqual
(
response
.
data
[
'name'
],
self
.
test_group_name
)
self
.
assertEqual
(
response
.
data
[
'type'
],
'series'
)
self
.
assertEqual
(
response
.
data
[
'type'
],
group_type
)
response_profile_data
=
response
.
data
[
'data'
]
self
.
assertEqual
(
response_profile_data
[
'display_name'
],
'My first series'
)
self
.
assertEqual
(
response_profile_data
[
'display_name'
],
display_name
)
# update the profile
profile_data
=
{
'display_name'
:
'My updated series'
}
updated_group_type
=
'seriesX'
updated_display_name
=
'My updated series'
profile_data
=
{
'display_name'
:
updated_display_name
}
data
=
{
'name'
:
self
.
test_group_name
,
'type'
:
'seriesX'
,
'type'
:
updated_group_type
,
'data'
:
profile_data
}
response
=
self
.
do_post
(
test_uri
,
data
)
...
...
@@ -164,17 +168,17 @@ class GroupsApiTests(ModuleStoreTestCase):
test_uri
=
self
.
base_groups_uri
+
'?type=series'
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
len
(
response
.
data
),
0
)
self
.
assertEqual
(
len
(
response
.
data
[
'results'
]
),
0
)
test_uri
=
self
.
base_groups_uri
+
'?type=seriesX'
test_uri
=
'{}?type={}'
.
format
(
self
.
base_groups_uri
,
updated_group_type
)
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
len
(
response
.
data
),
1
)
self
.
assertEqual
(
response
.
data
[
0
][
'id'
],
group_id
)
self
.
assertEqual
(
response
.
data
[
0
][
'type'
],
'seriesX'
)
self
.
assertEqual
(
response
.
data
[
0
][
'name'
],
self
.
test_group_name
)
response_profile_data
=
response
.
data
[
0
][
'data'
]
self
.
assertEqual
(
response_profile_data
[
'display_name'
],
'My updated series'
)
self
.
assertEqual
(
len
(
response
.
data
[
'results'
]
),
1
)
self
.
assertEqual
(
response
.
data
[
'results'
][
0
][
'id'
],
group_id
)
self
.
assertEqual
(
response
.
data
[
'results'
][
0
][
'type'
],
updated_group_type
)
self
.
assertEqual
(
response
.
data
[
'results'
][
0
][
'name'
],
self
.
test_group_name
)
response_profile_data
=
response
.
data
[
'results'
][
0
][
'data'
]
self
.
assertEqual
(
response_profile_data
[
'display_name'
],
updated_display_name
)
def
test_group_list_post_invalid_name
(
self
):
data
=
{
'name'
:
''
,
'type'
:
'test'
}
...
...
@@ -197,12 +201,12 @@ class GroupsApiTests(ModuleStoreTestCase):
test_uri
=
'{}?type=test'
.
format
(
self
.
base_groups_uri
)
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
response
.
data
[
0
][
'name'
],
'{:04d}: {}'
.
format
(
group_id
,
self
.
test_group_name
))
self
.
assertEqual
(
response
.
data
[
'results'
][
0
][
'name'
],
'{:04d}: {}'
.
format
(
group_id
,
self
.
test_group_name
))
profile
.
name
=
None
profile
.
save
()
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
response
.
data
[
0
][
'name'
],
'{:04d}: {}'
.
format
(
group_id
,
self
.
test_group_name
))
self
.
assertEqual
(
response
.
data
[
'results'
][
0
][
'name'
],
'{:04d}: {}'
.
format
(
group_id
,
self
.
test_group_name
))
def
test_group_detail_get
(
self
):
data
=
{
'name'
:
self
.
test_group_name
,
'type'
:
'test'
}
...
...
lms/djangoapps/api_manager/groups/views.py
View file @
29a82ecc
...
...
@@ -14,13 +14,13 @@ from api_manager.models import GroupRelationship, CourseGroupRelationship, Group
from
api_manager.permissions
import
SecureAPIView
,
SecureListAPIView
from
api_manager.utils
import
str2bool
,
generate_base_uri
from
api_manager.organizations
import
serializers
from
projects.serializers
import
BasicWorkgroupSerializer
from
projects.serializers
import
BasicWorkgroupSerializer
,
GroupSerializer
RELATIONSHIP_TYPES
=
{
'hierarchical'
:
'h'
,
'graph'
:
'g'
}
class
GroupsList
(
SecureAPIView
):
class
GroupsList
(
Secure
List
APIView
):
"""
### The GroupsList view allows clients to retrieve/append a list of Group entities
- URI: ```/api/groups/```
...
...
@@ -55,6 +55,7 @@ class GroupsList(SecureAPIView):
** organization: display_name, contact_name, phone, email
* Ultimately, both 'type' and 'data' are determined by the client/caller. Open edX has no type or data specifications at the present time.
"""
serializer_class
=
GroupSerializer
def
post
(
self
,
request
):
"""
...
...
@@ -91,30 +92,23 @@ class GroupsList(SecureAPIView):
response_status
=
status
.
HTTP_201_CREATED
return
Response
(
response_data
,
status
=
response_status
)
def
get
(
self
,
request
):
def
get
(
self
,
request
,
*
args
,
**
kwargs
):
"""
GET /api/groups
if checks if get request has `type` filter
"""
response_data
=
[]
group_type
=
request
.
QUERY_PARAMS
.
get
(
'type'
,
None
)
if
group_type
is
None
:
return
Response
({},
status
=
status
.
HTTP_400_BAD_REQUEST
)
profiles
=
GroupProfile
.
objects
.
filter
(
group_type
=
request
.
GET
[
'type'
])
.
select_related
(
'group'
)
for
profile
in
profiles
:
item_data
=
{}
item_data
[
'id'
]
=
profile
.
group_id
if
profile
.
name
and
len
(
profile
.
name
):
group_name
=
profile
.
name
else
:
group_name
=
profile
.
group
.
name
item_data
[
'name'
]
=
group_name
item_data
[
'type'
]
=
profile
.
group_type
if
profile
.
data
:
item_data
[
'data'
]
=
json
.
loads
(
profile
.
data
)
item_data
[
'uri'
]
=
'{}/{}'
.
format
(
generate_base_uri
(
request
,
True
),
profile
.
group_id
)
response_data
.
append
(
item_data
)
return
Response
(
response_data
,
status
=
status
.
HTTP_200_OK
)
else
:
return
self
.
list
(
request
,
*
args
,
**
kwargs
)
def
get_queryset
(
self
):
"""
returns queryset filter by group type
"""
group_type
=
self
.
request
.
QUERY_PARAMS
.
get
(
'type'
,
None
)
groups
=
Group
.
objects
.
filter
(
groupprofile__group_type
=
group_type
)
.
select_related
(
'group'
)
return
groups
class
GroupsDetail
(
SecureAPIView
):
"""
...
...
lms/djangoapps/projects/serializers.py
View file @
29a82ecc
""" Django REST Framework Serializers """
import
json
from
django.contrib.auth.models
import
Group
,
User
from
django.core.exceptions
import
ObjectDoesNotExist
...
...
@@ -21,6 +22,8 @@ class UserSerializer(serializers.HyperlinkedModelSerializer):
class
GroupSerializer
(
serializers
.
HyperlinkedModelSerializer
):
""" Serializer for model interactions """
name
=
serializers
.
SerializerMethodField
(
'get_group_name'
)
type
=
serializers
.
SerializerMethodField
(
'get_group_type'
)
data
=
serializers
.
SerializerMethodField
(
'get_group_data'
)
def
get_group_name
(
self
,
group
):
"""
...
...
@@ -29,15 +32,38 @@ class GroupSerializer(serializers.HyperlinkedModelSerializer):
"""
try
:
group_profile
=
group
.
groupprofile
if
group_profile
:
if
group_profile
and
group_profile
.
name
:
return
group_profile
.
name
else
:
return
group
.
name
except
ObjectDoesNotExist
:
return
group
.
name
def
get_group_type
(
self
,
group
):
"""
Loads data from group profile
"""
try
:
group_profile
=
group
.
groupprofile
return
group_profile
.
group_type
except
ObjectDoesNotExist
:
return
None
def
get_group_data
(
self
,
group
):
"""
Loads data from group profile
"""
try
:
group_profile
=
group
.
groupprofile
if
group_profile
.
data
:
return
json
.
loads
(
group_profile
.
data
)
except
ObjectDoesNotExist
:
return
None
class
Meta
:
""" Meta class for defining additional serializer characteristics """
model
=
Group
fields
=
(
'id'
,
'url'
,
'name'
)
fields
=
(
'id'
,
'url'
,
'name'
,
'type'
,
'data'
)
class
GradeSerializer
(
serializers
.
Serializer
):
...
...
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