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
03e0bf7d
Commit
03e0bf7d
authored
Oct 24, 2014
by
Zia Fazal
Committed by
Jonathan Piacenti
Aug 20, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ziafazal/api-org-groups-relationship: added group
association with organisation
parent
fab6e489
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
124 additions
and
51 deletions
+124
-51
lms/djangoapps/api_manager/groups/serializers.py
+53
-0
lms/djangoapps/api_manager/organizations/tests.py
+39
-0
lms/djangoapps/api_manager/organizations/views.py
+27
-1
lms/djangoapps/projects/serializers.py
+2
-50
lms/djangoapps/projects/tests/test_workgroups.py
+3
-0
No files found.
lms/djangoapps/api_manager/groups/serializers.py
0 → 100644
View file @
03e0bf7d
import
json
from
django.core.exceptions
import
ObjectDoesNotExist
from
django.contrib.auth.models
import
Group
from
rest_framework
import
serializers
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
):
"""
Group name is actually stored on the profile record, in order to
allow for duplicate name values in the system.
"""
try
:
group_profile
=
group
.
groupprofile
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'
,
'type'
,
'data'
)
lms/djangoapps/api_manager/organizations/tests.py
View file @
03e0bf7d
...
...
@@ -254,6 +254,45 @@ class OrganizationsApiTests(ModuleStoreTestCase):
response
=
self
.
do_post
(
users_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
400
)
def
test_organizations_groups_get_post
(
self
):
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
)
org_id
=
response
.
data
[
'id'
]
# create groups
max_groups
,
groups
=
4
,
[]
for
i
in
xrange
(
1
,
max_groups
+
1
):
data
=
{
'name'
:
'{} {}'
.
format
(
'Test Group'
,
i
),
'type'
:
'contactgroup'
,
'data'
:
{
'display_name'
:
'organization contacts group'
}
}
response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
groups
.
append
(
response
.
data
[
'id'
])
test_uri
=
'{}{}/'
.
format
(
self
.
base_organizations_uri
,
org_id
)
groups_uri
=
'{}groups/'
.
format
(
test_uri
)
for
group
in
groups
:
data
=
{
"id"
:
group
}
response
=
self
.
do_post
(
groups_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
response
=
self
.
do_get
(
groups_uri
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
len
(
response
.
data
),
max_groups
)
# post an invalid group
data
=
{
"id"
:
'45533333'
}
response
=
self
.
do_post
(
groups_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
400
)
def
test_organizations_users_get
(
self
):
data
=
{
'name'
:
self
.
test_organization_name
,
...
...
lms/djangoapps/api_manager/organizations/views.py
View file @
03e0bf7d
...
...
@@ -2,7 +2,7 @@
""" ORGANIZATIONS API VIEWS """
from
django.conf
import
settings
from
django.contrib.auth.models
import
User
from
django.contrib.auth.models
import
User
,
Group
from
django.core.exceptions
import
ObjectDoesNotExist
from
django.db.models
import
Avg
,
F
...
...
@@ -13,6 +13,7 @@ from rest_framework.response import Response
from
api_manager.courseware_access
import
get_course_key
from
api_manager.models
import
Organization
from
api_manager.users.serializers
import
UserSerializer
from
api_manager.groups.serializers
import
GroupSerializer
from
api_manager.utils
import
str2bool
from
gradebook.models
import
StudentGradebook
from
student.models
import
CourseEnrollment
...
...
@@ -86,3 +87,28 @@ class OrganizationsViewSet(viewsets.ModelViewSet):
organization
.
users
.
add
(
user
)
organization
.
save
()
return
Response
({},
status
=
status
.
HTTP_201_CREATED
)
@action
(
methods
=
[
'get'
,
'post'
])
def
groups
(
self
,
request
,
pk
):
"""
Add a Group to a organization or retrieve list of groups in organization
"""
if
request
.
method
==
'GET'
:
groups
=
Group
.
objects
.
filter
(
organizations
=
pk
)
response_data
=
[]
if
groups
:
for
group
in
groups
:
serializer
=
GroupSerializer
(
group
)
response_data
.
append
(
serializer
.
data
)
# pylint: disable=E1101
return
Response
(
response_data
,
status
=
status
.
HTTP_200_OK
)
else
:
group_id
=
request
.
DATA
.
get
(
'id'
)
try
:
group
=
Group
.
objects
.
get
(
id
=
group_id
)
except
ObjectDoesNotExist
:
message
=
'Group {} does not exist'
.
format
(
group_id
)
return
Response
({
"detail"
:
message
},
status
.
HTTP_400_BAD_REQUEST
)
organization
=
self
.
get_object
()
organization
.
groups
.
add
(
group
)
organization
.
save
()
return
Response
({},
status
=
status
.
HTTP_201_CREATED
)
lms/djangoapps/projects/serializers.py
View file @
03e0bf7d
""" Django REST Framework Serializers """
import
json
from
django.contrib.auth.models
import
Group
,
User
from
django.core.exceptions
import
ObjectDoesNotExist
from
django.contrib.auth.models
import
User
from
rest_framework
import
serializers
from
api_manager.groups.serializers
import
GroupSerializer
from
.models
import
Project
,
Workgroup
,
WorkgroupSubmission
from
.models
import
WorkgroupReview
,
WorkgroupSubmissionReview
,
WorkgroupPeerReview
...
...
@@ -19,53 +18,6 @@ class UserSerializer(serializers.HyperlinkedModelSerializer):
fields
=
(
'id'
,
'url'
,
'username'
,
'email'
)
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
):
"""
Group name is actually stored on the profile record, in order to
allow for duplicate name values in the system.
"""
try
:
group_profile
=
group
.
groupprofile
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'
,
'type'
,
'data'
)
class
GradeSerializer
(
serializers
.
Serializer
):
""" Serializer for model interactions """
grade
=
serializers
.
Field
()
...
...
lms/djangoapps/projects/tests/test_workgroups.py
View file @
03e0bf7d
...
...
@@ -17,6 +17,7 @@ from django.test.utils import override_settings
from
api_manager.models
import
GroupProfile
from
xmodule.modulestore.tests.django_utils
import
ModuleStoreTestCase
from
projects.models
import
Project
,
Workgroup
from
student.tests.factories
import
CourseEnrollmentFactory
from
xmodule.modulestore.tests.factories
import
CourseFactory
,
ItemFactory
from
openedx.core.djangoapps.course_groups.cohorts
import
(
get_cohort_by_name
,
remove_user_from_cohort
,
delete_empty_cohort
,
is_user_in_cohort
,
get_course_cohort_names
)
...
...
@@ -110,6 +111,8 @@ class WorkgroupsApiTests(ModuleStoreTestCase):
username
=
self
.
test_user_username2
)
CourseEnrollmentFactory
.
create
(
user
=
self
.
test_user
,
course_id
=
self
.
test_course
.
id
)
CourseEnrollmentFactory
.
create
(
user
=
self
.
test_user2
,
course_id
=
self
.
test_course
.
id
)
self
.
client
=
SecureClient
()
cache
.
clear
()
...
...
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