Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
course-discovery
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
course-discovery
Commits
85109386
Commit
85109386
authored
Apr 20, 2017
by
tasawernawaz
Committed by
Tasawer Nawaz
Apr 20, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added support for different date formats in datetime fields
ECOM- 7725
parent
8b05d8db
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
61 additions
and
2 deletions
+61
-2
course_discovery/apps/publisher/tests/test_utils.py
+26
-1
course_discovery/apps/publisher/utils.py
+21
-0
course_discovery/apps/publisher/views.py
+14
-1
No files found.
course_discovery/apps/publisher/tests/test_utils.py
View file @
85109386
""" Tests publisher.utils"""
""" Tests publisher.utils"""
from
datetime
import
datetime
import
ddt
import
ddt
from
django.contrib.auth.models
import
Group
from
django.contrib.auth.models
import
Group
from
django.core.urlresolvers
import
reverse
from
django.core.urlresolvers
import
reverse
...
@@ -16,7 +18,7 @@ from course_discovery.apps.publisher.tests import factories
...
@@ -16,7 +18,7 @@ from course_discovery.apps.publisher.tests import factories
from
course_discovery.apps.publisher.utils
import
(
get_internal_users
,
has_role_for_course
,
from
course_discovery.apps.publisher.utils
import
(
get_internal_users
,
has_role_for_course
,
is_email_notification_enabled
,
is_internal_user
,
is_email_notification_enabled
,
is_internal_user
,
is_project_coordinator_user
,
is_publisher_admin
,
is_publisher_user
,
is_project_coordinator_user
,
is_publisher_admin
,
is_publisher_user
,
make_bread_crumbs
)
make_bread_crumbs
,
parse_datetime_field
)
@ddt.ddt
@ddt.ddt
...
@@ -204,3 +206,26 @@ class PublisherUtilsTests(TestCase):
...
@@ -204,3 +206,26 @@ class PublisherUtilsTests(TestCase):
self
.
assertFalse
(
has_role_for_course
(
self
.
course
,
self
.
user
))
self
.
assertFalse
(
has_role_for_course
(
self
.
course
,
self
.
user
))
factories
.
CourseUserRoleFactory
(
course
=
self
.
course
,
user
=
self
.
user
)
factories
.
CourseUserRoleFactory
(
course
=
self
.
course
,
user
=
self
.
user
)
self
.
assertTrue
(
has_role_for_course
(
self
.
course
,
self
.
user
))
self
.
assertTrue
(
has_role_for_course
(
self
.
course
,
self
.
user
))
@ddt.data
(
'april 20, 2017'
,
'aug 20 2019'
,
'2020 may 20'
,
'09 04 2018'
,
'jan 20 2020'
)
def
test_parse_datetime_field
(
self
,
date
):
""" Verify that function return datetime after parsing different possible date format. """
parsed_date
=
parse_datetime_field
(
date
)
self
.
assertTrue
(
isinstance
(
parsed_date
,
datetime
))
@ddt.data
(
None
,
'jan 20 20203'
'invalid-date-string'
'jan 20'
)
def
test_parse_datetime_field_with_invalid_date_format
(
self
,
invalid_date
):
""" Verify that function return None if date string does not match any possible date format. """
parsed_date
=
parse_datetime_field
(
invalid_date
)
self
.
assertIsNone
(
parsed_date
)
course_discovery/apps/publisher/utils.py
View file @
85109386
""" Publisher Utils."""
""" Publisher Utils."""
from
dateutil
import
parser
from
course_discovery.apps.core.models
import
User
from
course_discovery.apps.core.models
import
User
from
course_discovery.apps.publisher.constants
import
(
ADMIN_GROUP_NAME
,
INTERNAL_USER_GROUP_NAME
,
from
course_discovery.apps.publisher.constants
import
(
ADMIN_GROUP_NAME
,
INTERNAL_USER_GROUP_NAME
,
PROJECT_COORDINATOR_GROUP_NAME
)
PROJECT_COORDINATOR_GROUP_NAME
)
...
@@ -107,3 +108,23 @@ def has_role_for_course(course, user):
...
@@ -107,3 +108,23 @@ def has_role_for_course(course, user):
bool: True, if user has a role for course; otherwise, False.
bool: True, if user has a role for course; otherwise, False.
"""
"""
return
course
.
course_user_roles
.
filter
(
user
=
user
)
.
exists
()
return
course
.
course_user_roles
.
filter
(
user
=
user
)
.
exists
()
def
parse_datetime_field
(
date
):
"""
Parse datetime field to make same format YYYY-MM-DD 00:00:00.
Arguments:
date (str): date string in any possible format
Returns:
datetime (object): returns datetime object after parsing
"""
if
not
date
:
return
try
:
return
parser
.
parse
(
date
)
except
ValueError
:
return
course_discovery/apps/publisher/views.py
View file @
85109386
...
@@ -25,7 +25,8 @@ from course_discovery.apps.publisher.forms import CustomCourseForm, CustomCourse
...
@@ -25,7 +25,8 @@ from course_discovery.apps.publisher.forms import CustomCourseForm, CustomCourse
from
course_discovery.apps.publisher.models
import
(
Course
,
CourseRun
,
CourseRunState
,
CourseState
,
CourseUserRole
,
from
course_discovery.apps.publisher.models
import
(
Course
,
CourseRun
,
CourseRunState
,
CourseState
,
CourseUserRole
,
OrganizationExtension
,
UserAttributes
)
OrganizationExtension
,
UserAttributes
)
from
course_discovery.apps.publisher.utils
import
(
get_internal_users
,
has_role_for_course
,
is_internal_user
,
from
course_discovery.apps.publisher.utils
import
(
get_internal_users
,
has_role_for_course
,
is_internal_user
,
is_project_coordinator_user
,
is_publisher_admin
,
make_bread_crumbs
)
is_project_coordinator_user
,
is_publisher_admin
,
make_bread_crumbs
,
parse_datetime_field
)
from
course_discovery.apps.publisher.wrappers
import
CourseRunWrapper
from
course_discovery.apps.publisher.wrappers
import
CourseRunWrapper
logger
=
logging
.
getLogger
(
__name__
)
logger
=
logging
.
getLogger
(
__name__
)
...
@@ -237,6 +238,10 @@ class CreateCourseView(mixins.LoginRequiredMixin, mixins.PublisherUserRequiredMi
...
@@ -237,6 +238,10 @@ class CreateCourseView(mixins.LoginRequiredMixin, mixins.PublisherUserRequiredMi
# choices into institution admin field
# choices into institution admin field
user
=
self
.
request
.
user
user
=
self
.
request
.
user
organization
=
self
.
request
.
POST
.
get
(
'organization'
)
organization
=
self
.
request
.
POST
.
get
(
'organization'
)
self
.
request
.
POST
[
'start'
]
=
parse_datetime_field
(
self
.
request
.
POST
.
get
(
'start'
))
self
.
request
.
POST
[
'end'
]
=
parse_datetime_field
(
self
.
request
.
POST
.
get
(
'end'
))
course_form
=
self
.
course_form
(
course_form
=
self
.
course_form
(
request
.
POST
,
request
.
FILES
,
user
=
user
,
organization
=
organization
request
.
POST
,
request
.
FILES
,
user
=
user
,
organization
=
organization
)
)
...
@@ -484,6 +489,10 @@ class CreateCourseRunView(mixins.LoginRequiredMixin, CreateView):
...
@@ -484,6 +489,10 @@ class CreateCourseRunView(mixins.LoginRequiredMixin, CreateView):
def
post
(
self
,
request
,
*
args
,
**
kwargs
):
def
post
(
self
,
request
,
*
args
,
**
kwargs
):
user
=
request
.
user
user
=
request
.
user
parent_course
=
self
.
get_parent_course
()
parent_course
=
self
.
get_parent_course
()
self
.
request
.
POST
[
'start'
]
=
parse_datetime_field
(
self
.
request
.
POST
.
get
(
'start'
))
self
.
request
.
POST
[
'end'
]
=
parse_datetime_field
(
self
.
request
.
POST
.
get
(
'end'
))
run_form
=
self
.
run_form
(
request
.
POST
,
initial
=
{
'contacted_partner_manager'
:
False
})
run_form
=
self
.
run_form
(
request
.
POST
,
initial
=
{
'contacted_partner_manager'
:
False
})
seat_form
=
self
.
seat_form
(
request
.
POST
)
seat_form
=
self
.
seat_form
(
request
.
POST
)
...
@@ -573,6 +582,10 @@ class CourseRunEditView(mixins.LoginRequiredMixin, mixins.PublisherPermissionMix
...
@@ -573,6 +582,10 @@ class CourseRunEditView(mixins.LoginRequiredMixin, mixins.PublisherPermissionMix
context
=
self
.
get_context_data
()
context
=
self
.
get_context_data
()
course_run
=
context
.
get
(
'course_run'
)
course_run
=
context
.
get
(
'course_run'
)
lms_course_id
=
course_run
.
lms_course_id
lms_course_id
=
course_run
.
lms_course_id
self
.
request
.
POST
[
'start'
]
=
parse_datetime_field
(
self
.
request
.
POST
.
get
(
'start'
))
self
.
request
.
POST
[
'end'
]
=
parse_datetime_field
(
self
.
request
.
POST
.
get
(
'end'
))
run_form
=
self
.
run_form
(
run_form
=
self
.
run_form
(
request
.
POST
,
instance
=
course_run
,
is_project_coordinator
=
context
.
get
(
'is_project_coordinator'
)
request
.
POST
,
instance
=
course_run
,
is_project_coordinator
=
context
.
get
(
'is_project_coordinator'
)
)
)
...
...
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