Skip to content

Commit

Permalink
Merge bbe41e5 into fa4444c
Browse files Browse the repository at this point in the history
  • Loading branch information
annagav committed Apr 8, 2019
2 parents fa4444c + bbe41e5 commit f9f7391
Show file tree
Hide file tree
Showing 6 changed files with 47 additions and 37 deletions.
2 changes: 2 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ matrix:
include:
- python: 2.7
env: TOXENV=quality
- python: 3.6
env: TOXENV=py36
before_install:
- export DJANGO_SETTINGS_MODULE=settings
install:
Expand Down
32 changes: 17 additions & 15 deletions milestones/data.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,11 @@
else:
import milestones.resources as remote
"""
from __future__ import absolute_import
from . import exceptions
from . import models as internal
from . import serializers
import six


# PRIVATE/INTERNAL METHODS (public methods located further down)
Expand Down Expand Up @@ -194,7 +196,7 @@ def fetch_milestones(milestone):
))
if milestone_obj.namespace:
return serializers.serialize_milestones(internal.Milestone.objects.filter(
namespace=unicode(milestone_obj.namespace),
namespace=six.text_type(milestone_obj.namespace),
active=True
))

Expand All @@ -218,7 +220,7 @@ def create_course_milestone(course_key, relationship, milestone):
milestone_obj = serializers.deserialize_milestone(milestone)
try:
relationship = internal.CourseMilestone.objects.get(
course_id=unicode(course_key),
course_id=six.text_type(course_key),
milestone=milestone_obj,
milestone_relationship_type=relationship_type
)
Expand All @@ -227,7 +229,7 @@ def create_course_milestone(course_key, relationship, milestone):
_activate_record(relationship)
except internal.CourseMilestone.DoesNotExist:
relationship = internal.CourseMilestone.objects.create(
course_id=unicode(course_key),
course_id=six.text_type(course_key),
milestone=milestone_obj,
milestone_relationship_type=relationship_type,
active=True
Expand All @@ -241,7 +243,7 @@ def delete_course_milestone(course_key, milestone):
"""
try:
relationship = internal.CourseMilestone.objects.get(
course_id=unicode(course_key),
course_id=six.text_type(course_key),
milestone=milestone['id'],
active=True,
)
Expand Down Expand Up @@ -292,8 +294,8 @@ def create_course_content_milestone(course_key, content_key, relationship, miles
requirements = serializers.serialize_requirements(requirements)
try:
relationship = internal.CourseContentMilestone.objects.get(
course_id=unicode(course_key),
content_id=unicode(content_key),
course_id=six.text_type(course_key),
content_id=six.text_type(content_key),
milestone=milestone_obj,
milestone_relationship_type=relationship_type
)
Expand All @@ -307,8 +309,8 @@ def create_course_content_milestone(course_key, content_key, relationship, miles
relationship.save()
except internal.CourseContentMilestone.DoesNotExist:
relationship = internal.CourseContentMilestone.objects.create(
course_id=unicode(course_key),
content_id=unicode(content_key),
course_id=six.text_type(course_key),
content_id=six.text_type(content_key),
milestone=milestone_obj,
milestone_relationship_type=relationship_type,
requirements=requirements,
Expand All @@ -323,8 +325,8 @@ def delete_course_content_milestone(course_key, content_key, milestone):
"""
try:
relationship = internal.CourseContentMilestone.objects.get(
course_id=unicode(course_key),
content_id=unicode(content_key),
course_id=six.text_type(course_key),
content_id=six.text_type(content_key),
milestone=milestone['id'],
active=True,
)
Expand All @@ -346,10 +348,10 @@ def fetch_course_content_milestones(content_key=None, course_key=None, relations
).select_related('milestone')

if course_key is not None:
queryset = queryset.filter(course_id=unicode(course_key))
queryset = queryset.filter(course_id=six.text_type(course_key))

if content_key is not None:
queryset = queryset.filter(content_id=unicode(content_key))
queryset = queryset.filter(content_id=six.text_type(content_key))

if relationship is not None:
mrt = _get_milestone_relationship_type(relationship)
Expand Down Expand Up @@ -472,7 +474,7 @@ def delete_content_references(content_key):
Supports the 'delete entrance exam' Studio use case, when Milestones is enabled
"""
[_inactivate_record(record) for record in internal.CourseContentMilestone.objects.filter(
content_id=unicode(content_key),
content_id=six.text_type(content_key),
active=True
)]

Expand All @@ -482,11 +484,11 @@ def delete_course_references(course_key):
Inactivates references to course keys within this app (ref: receivers.py and api.py)
"""
[_inactivate_record(record) for record in internal.CourseMilestone.objects.filter(
course_id=unicode(course_key),
course_id=six.text_type(course_key),
active=True
)]

[_inactivate_record(record) for record in internal.CourseContentMilestone.objects.filter(
course_id=unicode(course_key),
course_id=six.text_type(course_key),
active=True
)]
22 changes: 12 additions & 10 deletions milestones/tests/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@
"""
Milestones API Module Test Cases
"""
from __future__ import absolute_import
from opaque_keys.edx.keys import UsageKey

import milestones.api as api
import milestones.exceptions as exceptions
import milestones.tests.utils as utils
import six


class MilestonesApiTestCase(utils.MilestonesTestCaseMixin, utils.MilestonesTestCaseBase):
Expand All @@ -23,7 +25,7 @@ def setUp(self):
self.test_milestone = api.add_milestone({
'name': 'test_milestone',
'display_name': 'Test Milestone',
'namespace': unicode(self.test_course_key),
'namespace': six.text_type(self.test_course_key),
'description': 'Test Milestone Description',
})
self.relationship_types = api.get_milestone_relationship_types()
Expand All @@ -34,7 +36,7 @@ def test_add_milestone(self):
milestone = api.add_milestone({
'name': 'local_milestone',
'display_name': 'Local Milestone',
'namespace': unicode(self.test_course_key),
'namespace': six.text_type(self.test_course_key),
'description': 'Local Milestone Description'
})
self.assertGreater(milestone['id'], 0)
Expand All @@ -44,7 +46,7 @@ def test_add_milestone_active_exists(self):
milestone_data = {
'name': 'local_milestone',
'display_name': 'Local Milestone',
'namespace': unicode(self.test_course_key),
'namespace': six.text_type(self.test_course_key),
'description': 'Local Milestone Description'
}
milestone = api.add_milestone(milestone_data)
Expand All @@ -57,7 +59,7 @@ def test_add_milestone_inactive_to_active(self):
milestone_data = {
'name': 'local_milestone',
'display_name': 'Local Milestone',
'namespace': unicode(self.test_course_key),
'namespace': six.text_type(self.test_course_key),
'description': 'Local Milestone Description'
}
milestone = api.add_milestone(milestone_data)
Expand All @@ -72,7 +74,7 @@ def test_add_milestone_inactive_milestone_with_relationships(self):
milestone_data = {
'name': 'local_milestone',
'display_name': 'Local Milestone',
'namespace': unicode(self.test_course_key),
'namespace': six.text_type(self.test_course_key),
'description': 'Local Milestone Description'
}
milestone = api.add_milestone(milestone_data)
Expand All @@ -99,7 +101,7 @@ def test_add_milestone_inactive_milestone_with_relationships_propagate_false(sel
milestone_data = {
'name': 'local_milestone',
'display_name': 'Local Milestone',
'namespace': unicode(self.test_course_key),
'namespace': six.text_type(self.test_course_key),
'description': 'Local Milestone Description'
}
milestone = api.add_milestone(milestone_data)
Expand Down Expand Up @@ -420,7 +422,7 @@ def test_get_courses_milestones(self):
local_milestone = api.add_milestone({
'display_name': 'Local Milestone',
'name': 'local_milestone',
'namespace': unicode(self.test_course_key),
'namespace': six.text_type(self.test_course_key),
'description': 'Local Milestone Description'
})
api.add_course_milestone(
Expand Down Expand Up @@ -456,7 +458,7 @@ def test_get_courses_milestones_with_invalid_relationship_type(self):
local_milestone = api.add_milestone({
'display_name': 'Local Milestone',
'name': 'local_milestone',
'namespace': unicode(self.test_course_key),
'namespace': six.text_type(self.test_course_key),
'description': 'Local Milestone Description'
})
api.add_course_milestone(
Expand Down Expand Up @@ -940,7 +942,7 @@ def test_milestones_fulfillment_paths_contains_special_characters(self):
Unit Test: test_get_course_milestones_fulfillment_paths works correctly when milestone have some special
characters.
"""
namespace = unicode(self.test_course_key)
namespace = six.text_type(self.test_course_key)
name = '�ťÉśt_Àübùr�'
local_milestone_1 = api.add_milestone({
'display_name': 'Local Milestone 1',
Expand Down Expand Up @@ -977,7 +979,7 @@ def test_get_course_milestones_fulfillment_paths(self): # pylint: disable=too-m
Unit Test: test_get_course_milestones_fulfillment_paths
"""
# Create three milestones in order tto cover all logical branches
namespace = unicode(self.test_course_key)
namespace = six.text_type(self.test_course_key)
local_milestone_1 = api.add_milestone({
'display_name': 'Local Milestone 1',
'name': 'local_milestone_1',
Expand Down
18 changes: 10 additions & 8 deletions milestones/tests/test_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,12 @@
Note: 'Unit Test: ' labels are output to the console during test runs
"""
from __future__ import absolute_import
import milestones.api as api
import milestones.data as data
import milestones.exceptions as exceptions
import milestones.tests.utils as utils
import six


class MilestonesDataTestCase(utils.MilestonesTestCaseBase):
Expand All @@ -29,14 +31,14 @@ def test_fetch_courses_milestones_invalid_milestone_relationship_type(self):
milestone1 = api.add_milestone({
'display_name': 'Test Milestone',
'name': 'test_milestone',
'namespace': unicode(self.test_course_key),
'namespace': six.text_type(self.test_course_key),
'description': 'Test Milestone Description',
})
api.add_course_milestone(self.test_course_key, self.relationship_types['REQUIRES'], milestone1)
milestone2 = api.add_milestone({
'display_name': 'Test Milestone 2',
'name': 'test_milestone_2',
'namespace': unicode(self.test_course_key),
'namespace': six.text_type(self.test_course_key),
'description': 'Test Milestone Description 2',
})
api.add_course_milestone(self.test_course_key, self.relationship_types['FULFILLS'], milestone2)
Expand All @@ -52,7 +54,7 @@ def test_fetch_course_content_milestones_invalid_milestone_relationship_type(sel
milestone1 = api.add_milestone({
'display_name': 'Test Milestone',
'name': 'test_milestone',
'namespace': unicode(self.test_course_key),
'namespace': six.text_type(self.test_course_key),
'description': 'Test Milestone Description',
})
api.add_course_content_milestone(
Expand All @@ -64,7 +66,7 @@ def test_fetch_course_content_milestones_invalid_milestone_relationship_type(sel
milestone2 = api.add_milestone({
'display_name': 'Test Milestone 2',
'name': 'test_milestone2',
'namespace': unicode(self.test_course_key),
'namespace': six.text_type(self.test_course_key),
'description': 'Test Milestone Description 2',
})
api.add_course_content_milestone(
Expand Down Expand Up @@ -94,7 +96,7 @@ def test_fetch_milestones_invalid_milestone_namespace(self):

def test_fetch_course_content_milestones_null_keys(self):
""" Unit Test: test_fetch_course_content_milestones_null_keys"""
namespace = '{}.entrance_exams'.format(unicode(self.test_course_key))
namespace = '{}.entrance_exams'.format(six.text_type(self.test_course_key))
milestone1 = api.add_milestone({
'display_name': 'Test Milestone',
'name': 'test_milestone',
Expand Down Expand Up @@ -129,7 +131,7 @@ def test_fetch_milestone_courses_no_relationship_type(self):
milestone1 = api.add_milestone({
'display_name': 'Test Milestone',
'name': 'test_milestone',
'namespace': unicode(self.test_course_key),
'namespace': six.text_type(self.test_course_key),
'description': 'Test Milestone Description',
})
api.add_course_milestone(self.test_course_key, 'fulfills', milestone1)
Expand All @@ -140,7 +142,7 @@ def test_fetch_milestone_course_content_no_relationship_type(self):
milestone1 = api.add_milestone({
'display_name': 'Test Milestone',
'name': 'test_milestone',
'namespace': unicode(self.test_course_key),
'namespace': six.text_type(self.test_course_key),
'description': 'Test Milestone Description',
})
api.add_course_content_milestone(
Expand All @@ -156,7 +158,7 @@ def test_fetch_user_milestones_missing_match_criteria_throws_exception(self):
milestone1 = api.add_milestone({
'display_name': 'Test Milestone',
'name': 'test_milestone',
'namespace': unicode(self.test_course_key),
'namespace': six.text_type(self.test_course_key),
'description': 'Test Milestone Description',
})
api.add_user_milestone(self.serialized_test_user, milestone1)
Expand Down
8 changes: 5 additions & 3 deletions milestones/validators.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
"""
Validators confirm the integrity of inbound information prior to a data.py handoff
"""
from __future__ import absolute_import
import json

from opaque_keys import InvalidKeyError
from opaque_keys.edx.keys import CourseKey, UsageKey

from .data import fetch_milestone_relationship_types
import six


def course_key_is_valid(course_key):
Expand All @@ -16,7 +18,7 @@ def course_key_is_valid(course_key):
if course_key is None:
return False
try:
CourseKey.from_string(unicode(course_key))
CourseKey.from_string(six.text_type(course_key))
except InvalidKeyError:
return False
return True
Expand All @@ -29,7 +31,7 @@ def content_key_is_valid(content_key):
if content_key is None:
return False
try:
UsageKey.from_string(unicode(content_key))
UsageKey.from_string(six.text_type(content_key))
except InvalidKeyError:
return False
return True
Expand Down Expand Up @@ -71,7 +73,7 @@ def milestone_relationship_type_is_valid(name):
"""
Milestone relationship type object validation
"""
return name in fetch_milestone_relationship_types().values()
return name in list(fetch_milestone_relationship_types().values())


def user_is_valid(user):
Expand Down
2 changes: 1 addition & 1 deletion tox.ini
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[tox]
envlist = py27-django{18,111}
envlist = py27,py36-django{18,111}

[testenv]
setenv =
Expand Down

0 comments on commit f9f7391

Please sign in to comment.