Commit 79acb5c5 by Andy Armstrong

Reorder LMS imports using isort

parent 8d4db4ac
[settings]
indent=' '
line_length=120
multi_line_output=3
...@@ -5,9 +5,12 @@ and auto discover tasks in all installed django apps. ...@@ -5,9 +5,12 @@ and auto discover tasks in all installed django apps.
Taken from: http://celery.readthedocs.org/en/latest/django/first-steps-with-django.html Taken from: http://celery.readthedocs.org/en/latest/django/first-steps-with-django.html
""" """
from __future__ import absolute_import from __future__ import absolute_import
import os import os
from celery import Celery from celery import Celery
from django.conf import settings from django.conf import settings
from openedx.core.lib.celery.routers import AlternateEnvironmentRouter from openedx.core.lib.celery.routers import AlternateEnvironmentRouter
# set the default Django settings module for the 'celery' program. # set the default Django settings module for the 'celery' program.
......
""" """
Admin registration for Badge Models Admin registration for Badge Models
""" """
from django.contrib import admin
from badges.models import CourseCompleteImageConfiguration, CourseEventBadgesConfiguration, BadgeClass
from config_models.admin import ConfigurationModelAdmin from config_models.admin import ConfigurationModelAdmin
from django.contrib import admin
from badges.models import BadgeClass, CourseCompleteImageConfiguration, CourseEventBadgesConfiguration
admin.site.register(CourseCompleteImageConfiguration) admin.site.register(CourseCompleteImageConfiguration)
admin.site.register(BadgeClass) admin.site.register(BadgeClass)
......
...@@ -3,7 +3,7 @@ Serializers for Badges ...@@ -3,7 +3,7 @@ Serializers for Badges
""" """
from rest_framework import serializers from rest_framework import serializers
from badges.models import BadgeClass, BadgeAssertion from badges.models import BadgeAssertion, BadgeClass
class BadgeClassSerializer(serializers.ModelSerializer): class BadgeClassSerializer(serializers.ModelSerializer):
......
""" """
Tests for the badges API views. Tests for the badges API views.
""" """
from ddt import ddt, data, unpack from ddt import data, ddt, unpack
from django.conf import settings from django.conf import settings
from django.test.utils import override_settings from django.test.utils import override_settings
from nose.plugins.attrib import attr from nose.plugins.attrib import attr
......
...@@ -6,14 +6,14 @@ from opaque_keys.edx.keys import CourseKey ...@@ -6,14 +6,14 @@ from opaque_keys.edx.keys import CourseKey
from rest_framework import generics from rest_framework import generics
from rest_framework.exceptions import APIException from rest_framework.exceptions import APIException
from badges.models import BadgeAssertion
from openedx.core.djangoapps.user_api.permissions import is_field_shared_factory from openedx.core.djangoapps.user_api.permissions import is_field_shared_factory
from openedx.core.djangoapps.xmodule_django.models import CourseKeyField
from openedx.core.lib.api.authentication import ( from openedx.core.lib.api.authentication import (
OAuth2AuthenticationAllowInactiveUser, OAuth2AuthenticationAllowInactiveUser,
SessionAuthenticationAllowInactiveUser SessionAuthenticationAllowInactiveUser
) )
from openedx.core.djangoapps.xmodule_django.models import CourseKeyField
from badges.models import BadgeAssertion
from .serializers import BadgeAssertionSerializer from .serializers import BadgeAssertionSerializer
......
...@@ -12,9 +12,8 @@ from lazy import lazy ...@@ -12,9 +12,8 @@ from lazy import lazy
from requests.packages.urllib3.exceptions import HTTPError from requests.packages.urllib3.exceptions import HTTPError
from badges.backends.base import BadgeBackend from badges.backends.base import BadgeBackend
from eventtracking import tracker
from badges.models import BadgeAssertion from badges.models import BadgeAssertion
from eventtracking import tracker
MAX_SLUG_LENGTH = 255 MAX_SLUG_LENGTH = 255
LOGGER = logging.getLogger(__name__) LOGGER = logging.getLogger(__name__)
......
...@@ -7,13 +7,13 @@ import ddt ...@@ -7,13 +7,13 @@ import ddt
from django.db.models.fields.files import ImageFieldFile from django.db.models.fields.files import ImageFieldFile
from django.test.utils import override_settings from django.test.utils import override_settings
from lazy.lazy import lazy from lazy.lazy import lazy
from mock import patch, Mock, call from mock import Mock, call, patch
from badges.backends.badgr import BadgrBackend from badges.backends.badgr import BadgrBackend
from badges.models import BadgeAssertion from badges.models import BadgeAssertion
from badges.tests.factories import BadgeClassFactory from badges.tests.factories import BadgeClassFactory
from openedx.core.lib.tests.assertions.events import assert_event_matches from openedx.core.lib.tests.assertions.events import assert_event_matches
from student.tests.factories import UserFactory, CourseEnrollmentFactory from student.tests.factories import CourseEnrollmentFactory, UserFactory
from track.tests import EventTrackingTestCase from track.tests import EventTrackingTestCase
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory from xmodule.modulestore.tests.factories import CourseFactory
......
...@@ -8,8 +8,8 @@ from django.core.urlresolvers import reverse ...@@ -8,8 +8,8 @@ from django.core.urlresolvers import reverse
from django.template.defaultfilters import slugify from django.template.defaultfilters import slugify
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from badges.models import CourseCompleteImageConfiguration, BadgeClass, BadgeAssertion from badges.models import BadgeAssertion, BadgeClass, CourseCompleteImageConfiguration
from badges.utils import site_prefix, requires_badges_enabled from badges.utils import requires_badges_enabled, site_prefix
from xmodule.modulestore.django import modulestore from xmodule.modulestore.django import modulestore
LOGGER = logging.getLogger(__name__) LOGGER = logging.getLogger(__name__)
......
...@@ -3,7 +3,7 @@ Events which have to do with a user doing something with more than one course, s ...@@ -3,7 +3,7 @@ Events which have to do with a user doing something with more than one course, s
as enrolling in a certain number, completing a certain number, or completing a specific set of courses. as enrolling in a certain number, completing a certain number, or completing a specific set of courses.
""" """
from badges.models import CourseEventBadgesConfiguration, BadgeClass from badges.models import BadgeClass, CourseEventBadgesConfiguration
from badges.utils import requires_badges_enabled from badges.utils import requires_badges_enabled
......
...@@ -3,11 +3,10 @@ Tests for the course completion helper functions. ...@@ -3,11 +3,10 @@ Tests for the course completion helper functions.
""" """
from datetime import datetime from datetime import datetime
from badges.events import course_complete
from student.tests.factories import UserFactory from student.tests.factories import UserFactory
from xmodule.modulestore.tests.factories import CourseFactory
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory
from badges.events import course_complete
class CourseCompleteTestCase(ModuleStoreTestCase): class CourseCompleteTestCase(ModuleStoreTestCase):
......
""" """
Tests the course meta badging events Tests the course meta badging events
""" """
from ddt import ddt, unpack, data from ddt import data, ddt, unpack
from django.conf import settings
from django.test.utils import override_settings from django.test.utils import override_settings
from mock import patch from mock import patch
from django.conf import settings from badges.tests.factories import CourseEventBadgesConfigurationFactory, RandomBadgeClassFactory
from certificates.models import CertificateStatuses, GeneratedCertificate
from badges.tests.factories import RandomBadgeClassFactory, CourseEventBadgesConfigurationFactory
from certificates.models import GeneratedCertificate, CertificateStatuses
from student.models import CourseEnrollment from student.models import CourseEnrollment
from student.tests.factories import UserFactory from student.tests.factories import UserFactory
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
......
...@@ -3,6 +3,7 @@ Database models for the badges app ...@@ -3,6 +3,7 @@ Database models for the badges app
""" """
from importlib import import_module from importlib import import_module
from config_models.models import ConfigurationModel
from django.conf import settings from django.conf import settings
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
...@@ -15,9 +16,8 @@ from opaque_keys import InvalidKeyError ...@@ -15,9 +16,8 @@ from opaque_keys import InvalidKeyError
from opaque_keys.edx.keys import CourseKey from opaque_keys.edx.keys import CourseKey
from badges.utils import deserialize_count_specs from badges.utils import deserialize_count_specs
from config_models.models import ConfigurationModel
from xmodule.modulestore.django import modulestore
from openedx.core.djangoapps.xmodule_django.models import CourseKeyField from openedx.core.djangoapps.xmodule_django.models import CourseKeyField
from xmodule.modulestore.django import modulestore
def validate_badge_image(image): def validate_badge_image(image):
......
...@@ -8,7 +8,7 @@ from django.core.files.base import ContentFile ...@@ -8,7 +8,7 @@ from django.core.files.base import ContentFile
from factory import DjangoModelFactory from factory import DjangoModelFactory
from factory.django import ImageField from factory.django import ImageField
from badges.models import BadgeAssertion, CourseCompleteImageConfiguration, BadgeClass, CourseEventBadgesConfiguration from badges.models import BadgeAssertion, BadgeClass, CourseCompleteImageConfiguration, CourseEventBadgesConfiguration
from student.tests.factories import UserFactory from student.tests.factories import UserFactory
......
...@@ -7,19 +7,21 @@ from django.core.files.storage import default_storage ...@@ -7,19 +7,21 @@ from django.core.files.storage import default_storage
from django.db.utils import IntegrityError from django.db.utils import IntegrityError
from django.test import TestCase from django.test import TestCase
from django.test.utils import override_settings from django.test.utils import override_settings
from mock import patch, Mock from mock import Mock, patch
from nose.plugins.attrib import attr from nose.plugins.attrib import attr
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory
from badges.models import ( from badges.models import (
CourseCompleteImageConfiguration, validate_badge_image, BadgeClass, BadgeAssertion, BadgeAssertion,
CourseBadgesDisabledError BadgeClass,
CourseBadgesDisabledError,
CourseCompleteImageConfiguration,
validate_badge_image
) )
from badges.tests.factories import BadgeClassFactory, BadgeAssertionFactory, RandomBadgeClassFactory from badges.tests.factories import BadgeAssertionFactory, BadgeClassFactory, RandomBadgeClassFactory
from certificates.tests.test_models import TEST_DATA_ROOT from certificates.tests.test_models import TEST_DATA_ROOT
from student.tests.factories import UserFactory from student.tests.factories import UserFactory
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory
def get_image(name): def get_image(name):
......
"""Django admin pages for branding configuration. """ """Django admin pages for branding configuration. """
from django.contrib import admin
from config_models.admin import ConfigurationModelAdmin from config_models.admin import ConfigurationModelAdmin
from django.contrib import admin
from .models import BrandingInfoConfig, BrandingApiConfig from .models import BrandingApiConfig, BrandingInfoConfig
admin.site.register(BrandingInfoConfig, ConfigurationModelAdmin) admin.site.register(BrandingInfoConfig, ConfigurationModelAdmin)
admin.site.register(BrandingApiConfig, ConfigurationModelAdmin) admin.site.register(BrandingApiConfig, ConfigurationModelAdmin)
...@@ -16,14 +16,13 @@ import logging ...@@ -16,14 +16,13 @@ import logging
import urlparse import urlparse
from django.conf import settings from django.conf import settings
from django.utils.translation import ugettext as _
from django.contrib.staticfiles.storage import staticfiles_storage from django.contrib.staticfiles.storage import staticfiles_storage
from django.utils.translation import ugettext as _
from edxmako.shortcuts import marketing_link
from branding.models import BrandingApiConfig from branding.models import BrandingApiConfig
from edxmako.shortcuts import marketing_link
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
log = logging.getLogger("edx.footer") log = logging.getLogger("edx.footer")
EMPTY_URL = '#' EMPTY_URL = '#'
......
...@@ -6,9 +6,10 @@ Includes: ...@@ -6,9 +6,10 @@ Includes:
use Branding. use Branding.
""" """
import json import json
from django.db.models import TextField
from django.core.exceptions import ValidationError
from config_models.models import ConfigurationModel from config_models.models import ConfigurationModel
from django.core.exceptions import ValidationError
from django.db.models import TextField
class BrandingInfoConfig(ConfigurationModel): class BrandingInfoConfig(ConfigurationModel):
......
...@@ -2,12 +2,12 @@ ...@@ -2,12 +2,12 @@
"""Tests of Branding API """ """Tests of Branding API """
from __future__ import unicode_literals from __future__ import unicode_literals
from django.test import TestCase
import mock import mock
from branding.api import get_logo_url, get_footer from django.test import TestCase
from django.test.utils import override_settings from django.test.utils import override_settings
from branding.api import get_footer, get_logo_url
class TestHeader(TestCase): class TestHeader(TestCase):
"""Test API end-point for retrieving the header. """ """Test API end-point for retrieving the header. """
......
""" """
Tests for the Video Branding configuration. Tests for the Video Branding configuration.
""" """
from django.test import TestCase
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.test import TestCase
from nose.plugins.attrib import attr from nose.plugins.attrib import attr
from branding.models import BrandingInfoConfig from branding.models import BrandingInfoConfig
......
...@@ -8,22 +8,21 @@ from django.conf import settings ...@@ -8,22 +8,21 @@ from django.conf import settings
from django.contrib.auth.models import AnonymousUser from django.contrib.auth.models import AnonymousUser
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django.test.utils import override_settings
from django.test.client import RequestFactory from django.test.client import RequestFactory
from mock import patch, Mock from django.test.utils import override_settings
from milestones.tests.utils import MilestonesTestCaseMixin
from mock import Mock, patch
from nose.plugins.attrib import attr from nose.plugins.attrib import attr
from pytz import UTC from pytz import UTC
from edxmako.shortcuts import render_to_response
from branding.views import index from branding.views import index
from courseware.tests.helpers import LoginEnrollmentTestCase from courseware.tests.helpers import LoginEnrollmentTestCase
from milestones.tests.utils import MilestonesTestCaseMixin from edxmako.shortcuts import render_to_response
from openedx.core.djangoapps.site_configuration.tests.mixins import SiteMixin from openedx.core.djangoapps.site_configuration.tests.mixins import SiteMixin
from util.milestones_helpers import set_prerequisite_courses from util.milestones_helpers import set_prerequisite_courses
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory from xmodule.modulestore.tests.factories import CourseFactory
FEATURES_WITH_STARTDATE = settings.FEATURES.copy() FEATURES_WITH_STARTDATE = settings.FEATURES.copy()
FEATURES_WITH_STARTDATE['DISABLE_START_DATES'] = False FEATURES_WITH_STARTDATE['DISABLE_START_DATES'] = False
FEATURES_WO_STARTDATE = settings.FEATURES.copy() FEATURES_WO_STARTDATE = settings.FEATURES.copy()
......
...@@ -2,14 +2,15 @@ ...@@ -2,14 +2,15 @@
"""Tests of Branding API views. """ """Tests of Branding API views. """
import json import json
import urllib import urllib
from django.test import TestCase
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
from django.conf import settings
import mock
import ddt import ddt
import mock
from config_models.models import cache from config_models.models import cache
from django.conf import settings
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
from django.test import TestCase
from branding.models import BrandingApiConfig from branding.models import BrandingApiConfig
from openedx.core.djangoapps.dark_lang.models import DarkLangConfig from openedx.core.djangoapps.dark_lang.models import DarkLangConfig
from openedx.core.djangoapps.lang_pref.api import released_languages from openedx.core.djangoapps.lang_pref.api import released_languages
......
...@@ -6,22 +6,21 @@ from django.conf import settings ...@@ -6,22 +6,21 @@ from django.conf import settings
from django.contrib.staticfiles.storage import staticfiles_storage from django.contrib.staticfiles.storage import staticfiles_storage
from django.core.cache import cache from django.core.cache import cache
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.http import HttpResponse, Http404 from django.http import Http404, HttpResponse
from django.shortcuts import redirect from django.shortcuts import redirect
from django.utils import translation from django.utils import translation
from django.utils.translation.trans_real import get_supported_language_variant from django.utils.translation.trans_real import get_supported_language_variant
from django.views.decorators.cache import cache_control from django.views.decorators.cache import cache_control
from django.views.decorators.csrf import ensure_csrf_cookie from django.views.decorators.csrf import ensure_csrf_cookie
from edxmako.shortcuts import render_to_response
import student.views
import courseware.views.views
from edxmako.shortcuts import marketing_link
from util.cache import cache_if_anonymous
from util.json_request import JsonResponse
import branding.api as branding_api import branding.api as branding_api
import courseware.views.views
import student.views
from edxmako.shortcuts import marketing_link, render_to_response
from openedx.core.djangoapps.lang_pref.api import released_languages from openedx.core.djangoapps.lang_pref.api import released_languages
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
from util.cache import cache_if_anonymous
from util.json_request import JsonResponse
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
......
""" """
Django admin page for bulk email models Django admin page for bulk email models
""" """
from django.contrib import admin
from config_models.admin import ConfigurationModelAdmin from config_models.admin import ConfigurationModelAdmin
from django.contrib import admin
from bulk_email.models import CourseEmail, Optout, CourseEmailTemplate, CourseAuthorization, BulkEmailFlag from bulk_email.forms import CourseAuthorizationAdminForm, CourseEmailTemplateForm
from bulk_email.forms import CourseEmailTemplateForm, CourseAuthorizationAdminForm from bulk_email.models import BulkEmailFlag, CourseAuthorization, CourseEmail, CourseEmailTemplate, Optout
class CourseEmailAdmin(admin.ModelAdmin): class CourseEmailAdmin(admin.ModelAdmin):
......
...@@ -5,14 +5,13 @@ import logging ...@@ -5,14 +5,13 @@ import logging
from django import forms from django import forms
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from bulk_email.models import CourseEmailTemplate, COURSE_EMAIL_MESSAGE_BODY_TAG, CourseAuthorization
from opaque_keys import InvalidKeyError from opaque_keys import InvalidKeyError
from xmodule.modulestore.django import modulestore
from opaque_keys.edx.keys import CourseKey from opaque_keys.edx.keys import CourseKey
from opaque_keys.edx.locations import SlashSeparatedCourseKey from opaque_keys.edx.locations import SlashSeparatedCourseKey
from bulk_email.models import COURSE_EMAIL_MESSAGE_BODY_TAG, CourseAuthorization, CourseEmailTemplate
from xmodule.modulestore.django import modulestore
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
......
...@@ -2,24 +2,21 @@ ...@@ -2,24 +2,21 @@
Models for bulk email Models for bulk email
""" """
import logging import logging
import markupsafe
import markupsafe
from config_models.models import ConfigurationModel
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.db import models from django.db import models
from openedx.core.djangoapps.course_groups.models import CourseUserGroup
from openedx.core.djangoapps.course_groups.cohorts import get_cohort_by_name
from openedx.core.lib.html_to_text import html_to_text
from openedx.core.lib.mail_utils import wrap_message
from config_models.models import ConfigurationModel
from course_modes.models import CourseMode from course_modes.models import CourseMode
from enrollment.api import validate_course_mode from enrollment.api import validate_course_mode
from enrollment.errors import CourseModeNotFoundError from enrollment.errors import CourseModeNotFoundError
from student.roles import CourseStaffRole, CourseInstructorRole from openedx.core.djangoapps.course_groups.cohorts import get_cohort_by_name
from openedx.core.djangoapps.course_groups.models import CourseUserGroup
from openedx.core.djangoapps.xmodule_django.models import CourseKeyField from openedx.core.djangoapps.xmodule_django.models import CourseKeyField
from openedx.core.lib.html_to_text import html_to_text
from openedx.core.lib.mail_utils import wrap_message
from student.roles import CourseInstructorRole, CourseStaffRole
from util.keyword_substitution import substitute_keywords_with_data from util.keyword_substitution import substitute_keywords_with_data
from util.query import use_read_replica_if_available from util.query import use_read_replica_if_available
......
...@@ -3,52 +3,51 @@ ...@@ -3,52 +3,51 @@
This module contains celery task functions for handling the sending of bulk email This module contains celery task functions for handling the sending of bulk email
to a course. to a course.
""" """
from collections import Counter
import json import json
import logging import logging
import random import random
import re import re
from collections import Counter
from smtplib import SMTPConnectError, SMTPDataError, SMTPException, SMTPServerDisconnected
from time import sleep from time import sleep
import dogstats_wrapper as dog_stats_api from boto.exception import AWSConnectionError
from smtplib import SMTPServerDisconnected, SMTPDataError, SMTPConnectError, SMTPException
from boto.ses.exceptions import ( from boto.ses.exceptions import (
SESAddressNotVerifiedError,
SESIdentityNotVerifiedError,
SESDomainNotConfirmedError,
SESAddressBlacklistedError, SESAddressBlacklistedError,
SESAddressNotVerifiedError,
SESDailyQuotaExceededError, SESDailyQuotaExceededError,
SESMaxSendingRateExceededError,
SESDomainEndsWithDotError, SESDomainEndsWithDotError,
SESLocalAddressCharacterError, SESDomainNotConfirmedError,
SESIdentityNotVerifiedError,
SESIllegalAddressError, SESIllegalAddressError,
SESLocalAddressCharacterError,
SESMaxSendingRateExceededError
) )
from boto.exception import AWSConnectionError from celery import current_task, task # pylint: disable=no-name-in-module
from markupsafe import escape
from celery import task, current_task # pylint: disable=no-name-in-module
from celery.states import SUCCESS, FAILURE, RETRY # pylint: disable=no-name-in-module, import-error
from celery.exceptions import RetryTaskError # pylint: disable=no-name-in-module, import-error from celery.exceptions import RetryTaskError # pylint: disable=no-name-in-module, import-error
from celery.states import FAILURE, RETRY, SUCCESS # pylint: disable=no-name-in-module, import-error
from django.conf import settings from django.conf import settings
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core.mail import EmailMultiAlternatives, get_connection from django.core.mail import EmailMultiAlternatives, get_connection
from django.core.mail.message import forbid_multi_line_headers from django.core.mail.message import forbid_multi_line_headers
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.utils.translation import override as override_language, ugettext as _ from django.utils.translation import override as override_language
from django.utils.translation import ugettext as _
from markupsafe import escape
import dogstats_wrapper as dog_stats_api
from bulk_email.models import CourseEmail, Optout from bulk_email.models import CourseEmail, Optout
from courseware.courses import get_course from courseware.courses import get_course
from openedx.core.lib.courses import course_image_url
from lms.djangoapps.instructor_task.models import InstructorTask from lms.djangoapps.instructor_task.models import InstructorTask
from lms.djangoapps.instructor_task.subtasks import ( from lms.djangoapps.instructor_task.subtasks import (
SubtaskStatus, SubtaskStatus,
queue_subtasks_for_query,
check_subtask_is_valid, check_subtask_is_valid,
update_subtask_status, queue_subtasks_for_query,
update_subtask_status
) )
from util.date_utils import get_default_time_display
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
from openedx.core.lib.courses import course_image_url
from util.date_utils import get_default_time_display
log = logging.getLogger('edx.celery.task') log = logging.getLogger('edx.celery.task')
......
...@@ -3,18 +3,18 @@ ...@@ -3,18 +3,18 @@
Unit tests for student optouts from course email Unit tests for student optouts from course email
""" """
import json import json
from mock import patch, Mock
from nose.plugins.attrib import attr
from django.core import mail from django.core import mail
from django.core.management import call_command from django.core.management import call_command
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from mock import Mock, patch
from nose.plugins.attrib import attr
from student.tests.factories import UserFactory, AdminFactory, CourseEnrollmentFactory from bulk_email.models import BulkEmailFlag
from student.models import CourseEnrollment from student.models import CourseEnrollment
from student.tests.factories import AdminFactory, CourseEnrollmentFactory, UserFactory
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory from xmodule.modulestore.tests.factories import CourseFactory
from bulk_email.models import BulkEmailFlag
@attr(shard=1) @attr(shard=1)
......
...@@ -3,31 +3,31 @@ ...@@ -3,31 +3,31 @@
Unit tests for sending course email Unit tests for sending course email
""" """
import json import json
from markupsafe import escape
from mock import patch, Mock
from nose.plugins.attrib import attr
import os import os
from unittest import skipIf from unittest import skipIf
import ddt
import ddt
from django.conf import settings from django.conf import settings
from django.core import mail from django.core import mail
from django.core.mail.message import forbid_multi_line_headers from django.core.mail.message import forbid_multi_line_headers
from django.core.urlresolvers import reverse
from django.core.management import call_command from django.core.management import call_command
from django.core.urlresolvers import reverse
from django.test.utils import override_settings from django.test.utils import override_settings
from django.utils.translation import get_language from django.utils.translation import get_language
from markupsafe import escape
from mock import Mock, patch
from nose.plugins.attrib import attr
from bulk_email.models import Optout, BulkEmailFlag from bulk_email.models import BulkEmailFlag, Optout
from bulk_email.tasks import _get_source_address, _get_course_email_context from bulk_email.tasks import _get_course_email_context, _get_source_address
from openedx.core.djangoapps.course_groups.models import CourseCohort
from openedx.core.djangoapps.course_groups.cohorts import add_user_to_cohort
from course_modes.models import CourseMode from course_modes.models import CourseMode
from courseware.tests.factories import StaffFactory, InstructorFactory from courseware.tests.factories import InstructorFactory, StaffFactory
from enrollment.api import update_enrollment from enrollment.api import update_enrollment
from lms.djangoapps.instructor_task.subtasks import update_subtask_status from lms.djangoapps.instructor_task.subtasks import update_subtask_status
from student.roles import CourseStaffRole from openedx.core.djangoapps.course_groups.cohorts import add_user_to_cohort
from openedx.core.djangoapps.course_groups.models import CourseCohort
from student.models import CourseEnrollment from student.models import CourseEnrollment
from student.roles import CourseStaffRole
from student.tests.factories import CourseEnrollmentFactory, UserFactory from student.tests.factories import CourseEnrollmentFactory, UserFactory
from xmodule.modulestore import ModuleStoreEnum from xmodule.modulestore import ModuleStoreEnum
from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase
......
...@@ -2,32 +2,32 @@ ...@@ -2,32 +2,32 @@
""" """
Unit tests for handling email sending errors Unit tests for handling email sending errors
""" """
import json
from itertools import cycle from itertools import cycle
from smtplib import SMTPConnectError, SMTPDataError, SMTPServerDisconnected
from celery.states import SUCCESS, RETRY # pylint: disable=no-name-in-module, import-error
import ddt import ddt
from celery.states import RETRY, SUCCESS # pylint: disable=no-name-in-module, import-error
from django.conf import settings from django.conf import settings
from django.core.management import call_command from django.core.management import call_command
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.db import DatabaseError from django.db import DatabaseError
import json from mock import Mock, patch
from mock import patch, Mock
from nose.plugins.attrib import attr from nose.plugins.attrib import attr
from smtplib import SMTPDataError, SMTPServerDisconnected, SMTPConnectError from opaque_keys.edx.locations import SlashSeparatedCourseKey
from bulk_email.models import CourseEmail, SEND_TO_MYSELF, BulkEmailFlag from bulk_email.models import SEND_TO_MYSELF, BulkEmailFlag, CourseEmail
from bulk_email.tasks import perform_delegate_email_batches, send_course_email from bulk_email.tasks import perform_delegate_email_batches, send_course_email
from lms.djangoapps.instructor_task.exceptions import DuplicateTaskException from lms.djangoapps.instructor_task.exceptions import DuplicateTaskException
from lms.djangoapps.instructor_task.models import InstructorTask from lms.djangoapps.instructor_task.models import InstructorTask
from lms.djangoapps.instructor_task.subtasks import ( from lms.djangoapps.instructor_task.subtasks import (
initialize_subtask_info, MAX_DATABASE_LOCK_RETRIES,
SubtaskStatus, SubtaskStatus,
check_subtask_is_valid, check_subtask_is_valid,
update_subtask_status, initialize_subtask_info,
MAX_DATABASE_LOCK_RETRIES, update_subtask_status
) )
from opaque_keys.edx.locations import SlashSeparatedCourseKey from student.tests.factories import AdminFactory, CourseEnrollmentFactory, UserFactory
from student.tests.factories import UserFactory, AdminFactory, CourseEnrollmentFactory
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory from xmodule.modulestore.tests.factories import CourseFactory
......
...@@ -4,10 +4,10 @@ Unit tests for bulk-email-related forms. ...@@ -4,10 +4,10 @@ Unit tests for bulk-email-related forms.
""" """
from nose.plugins.attrib import attr from nose.plugins.attrib import attr
from opaque_keys.edx.locations import SlashSeparatedCourseKey
from bulk_email.models import CourseEmailTemplate, BulkEmailFlag
from bulk_email.forms import CourseAuthorizationAdminForm, CourseEmailTemplateForm from bulk_email.forms import CourseAuthorizationAdminForm, CourseEmailTemplateForm
from opaque_keys.edx.locations import SlashSeparatedCourseKey from bulk_email.models import BulkEmailFlag, CourseEmailTemplate
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory from xmodule.modulestore.tests.factories import CourseFactory
......
...@@ -4,27 +4,27 @@ Unit tests for bulk-email-related models. ...@@ -4,27 +4,27 @@ Unit tests for bulk-email-related models.
import datetime import datetime
import ddt import ddt
from django.core.management import call_command
from django.test import TestCase
from mock import Mock, patch
from nose.plugins.attrib import attr
from opaque_keys.edx.keys import CourseKey
from bulk_email.models import ( from bulk_email.models import (
CourseEmail,
SEND_TO_COHORT, SEND_TO_COHORT,
SEND_TO_TRACK,
SEND_TO_STAFF, SEND_TO_STAFF,
CourseEmailTemplate, SEND_TO_TRACK,
BulkEmailFlag,
CourseAuthorization, CourseAuthorization,
BulkEmailFlag CourseEmail,
CourseEmailTemplate
) )
from course_modes.models import CourseMode from course_modes.models import CourseMode
from django.core.management import call_command from openedx.core.djangoapps.course_groups.models import CourseCohort
from django.test import TestCase
from mock import patch, Mock
from nose.plugins.attrib import attr
from opaque_keys.edx.keys import CourseKey
from student.tests.factories import UserFactory from student.tests.factories import UserFactory
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory from xmodule.modulestore.tests.factories import CourseFactory
from openedx.core.djangoapps.course_groups.models import CourseCohort
@ddt.ddt @ddt.ddt
@attr(shard=1) @attr(shard=1)
......
...@@ -7,40 +7,37 @@ paths actually work. ...@@ -7,40 +7,37 @@ paths actually work.
""" """
import json import json
from itertools import chain, cycle, repeat
from smtplib import SMTPAuthenticationError, SMTPConnectError, SMTPDataError, SMTPServerDisconnected
from uuid import uuid4 from uuid import uuid4
from itertools import cycle, chain, repeat
from mock import patch, Mock from boto.exception import AWSConnectionError
from nose.plugins.attrib import attr
from smtplib import SMTPServerDisconnected, SMTPDataError, SMTPConnectError, SMTPAuthenticationError
from boto.ses.exceptions import ( from boto.ses.exceptions import (
SESAddressNotVerifiedError,
SESIdentityNotVerifiedError,
SESDomainNotConfirmedError,
SESAddressBlacklistedError, SESAddressBlacklistedError,
SESAddressNotVerifiedError,
SESDailyQuotaExceededError, SESDailyQuotaExceededError,
SESMaxSendingRateExceededError,
SESDomainEndsWithDotError, SESDomainEndsWithDotError,
SESLocalAddressCharacterError, SESDomainNotConfirmedError,
SESIdentityNotVerifiedError,
SESIllegalAddressError, SESIllegalAddressError,
SESLocalAddressCharacterError,
SESMaxSendingRateExceededError
) )
from boto.exception import AWSConnectionError from celery.states import FAILURE, SUCCESS # pylint: disable=no-name-in-module, import-error
from celery.states import SUCCESS, FAILURE # pylint: disable=no-name-in-module, import-error
from django.conf import settings from django.conf import settings
from django.core.management import call_command from django.core.management import call_command
from mock import Mock, patch
from nose.plugins.attrib import attr
from opaque_keys.edx.locations import SlashSeparatedCourseKey
from xmodule.modulestore.tests.factories import CourseFactory from bulk_email.models import SEND_TO_LEARNERS, SEND_TO_MYSELF, SEND_TO_STAFF, CourseEmail, Optout
from bulk_email.models import CourseEmail, Optout, SEND_TO_MYSELF, SEND_TO_STAFF, SEND_TO_LEARNERS
from bulk_email.tasks import _get_course_email_context from bulk_email.tasks import _get_course_email_context
from lms.djangoapps.instructor_task.tasks import send_bulk_course_email
from lms.djangoapps.instructor_task.subtasks import update_subtask_status, SubtaskStatus
from lms.djangoapps.instructor_task.models import InstructorTask from lms.djangoapps.instructor_task.models import InstructorTask
from lms.djangoapps.instructor_task.tests.test_base import InstructorTaskCourseTestCase from lms.djangoapps.instructor_task.subtasks import SubtaskStatus, update_subtask_status
from lms.djangoapps.instructor_task.tasks import send_bulk_course_email
from lms.djangoapps.instructor_task.tests.factories import InstructorTaskFactory from lms.djangoapps.instructor_task.tests.factories import InstructorTaskFactory
from opaque_keys.edx.locations import SlashSeparatedCourseKey from lms.djangoapps.instructor_task.tests.test_base import InstructorTaskCourseTestCase
from xmodule.modulestore.tests.factories import CourseFactory
class TestTaskFailure(Exception): class TestTaskFailure(Exception):
......
""" CCX API URLs. """ """ CCX API URLs. """
from django.conf.urls import patterns, url, include from django.conf.urls import include, patterns, url
urlpatterns = patterns( urlpatterns = patterns(
'', '',
......
""" CCX API v0 Serializers. """ """ CCX API v0 Serializers. """
from ccx_keys.locator import CCXLocator
from rest_framework import serializers from rest_framework import serializers
from lms.djangoapps.ccx.models import CustomCourseForEdX from lms.djangoapps.ccx.models import CustomCourseForEdX
from ccx_keys.locator import CCXLocator
class CCXCourseSerializer(serializers.ModelSerializer): class CCXCourseSerializer(serializers.ModelSerializer):
......
...@@ -3,7 +3,6 @@ Tests for the CCX REST APIs. ...@@ -3,7 +3,6 @@ Tests for the CCX REST APIs.
""" """
import json import json
import math import math
import pytz
import string import string
import urllib import urllib
import urlparse import urlparse
...@@ -12,45 +11,31 @@ from itertools import izip ...@@ -12,45 +11,31 @@ from itertools import izip
import ddt import ddt
import mock import mock
import pytz
from ccx_keys.locator import CCXLocator
from django.conf import settings from django.conf import settings
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core.urlresolvers import ( from django.core.urlresolvers import Resolver404, resolve, reverse
reverse,
resolve,
Resolver404
)
from nose.plugins.attrib import attr from nose.plugins.attrib import attr
from oauth2_provider import models as dot_models from oauth2_provider import models as dot_models
from opaque_keys.edx.keys import CourseKey
from provider.constants import CONFIDENTIAL from provider.constants import CONFIDENTIAL
from provider.oauth2.models import ( from provider.oauth2.models import Client, Grant
Client,
Grant,
)
from rest_framework import status from rest_framework import status
from rest_framework.test import APITestCase from rest_framework.test import APITestCase
from courseware import courses from courseware import courses
from ccx_keys.locator import CCXLocator
from student.models import CourseEnrollment
from student.tests.factories import UserFactory
from lms.djangoapps.instructor.access import allow_access, list_with_level
from lms.djangoapps.instructor.enrollment import (
enroll_email,
get_email_params,
)
from lms.djangoapps.ccx.api.v0 import views from lms.djangoapps.ccx.api.v0 import views
from lms.djangoapps.ccx.models import CcxFieldOverride, CustomCourseForEdX from lms.djangoapps.ccx.models import CcxFieldOverride, CustomCourseForEdX
from lms.djangoapps.ccx.overrides import override_field_for_ccx from lms.djangoapps.ccx.overrides import override_field_for_ccx
from lms.djangoapps.ccx.tests.utils import CcxTestCase from lms.djangoapps.ccx.tests.utils import CcxTestCase
from lms.djangoapps.ccx.utils import get_course_chapters
from lms.djangoapps.ccx.utils import ccx_course as ccx_course_cm from lms.djangoapps.ccx.utils import ccx_course as ccx_course_cm
from opaque_keys.edx.keys import CourseKey from lms.djangoapps.ccx.utils import get_course_chapters
from student.roles import ( from lms.djangoapps.instructor.access import allow_access, list_with_level
CourseInstructorRole, from lms.djangoapps.instructor.enrollment import enroll_email, get_email_params
CourseCcxCoachRole, from student.models import CourseEnrollment
CourseStaffRole, from student.roles import CourseCcxCoachRole, CourseInstructorRole, CourseStaffRole
) from student.tests.factories import AdminFactory, UserFactory
from student.tests.factories import AdminFactory
USER_PASSWORD = 'test' USER_PASSWORD = 'test'
AUTH_ATTRS = ('auth', 'auth_header_oauth2_provider') AUTH_ATTRS = ('auth', 'auth_header_oauth2_provider')
......
""" CCX API v0 URLs. """ """ CCX API v0 URLs. """
from django.conf import settings from django.conf import settings
from django.conf.urls import patterns, url, include from django.conf.urls import include, patterns, url
from lms.djangoapps.ccx.api.v0 import views from lms.djangoapps.ccx.api.v0 import views
......
...@@ -3,45 +3,36 @@ ...@@ -3,45 +3,36 @@
import datetime import datetime
import json import json
import logging import logging
import pytz
import pytz
from ccx_keys.locator import CCXLocator
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.db import transaction from django.db import transaction
from django.http import Http404 from django.http import Http404
from edx_rest_framework_extensions.authentication import JwtAuthentication
from opaque_keys import InvalidKeyError
from opaque_keys.edx.keys import CourseKey, UsageKey
from rest_framework import status from rest_framework import status
from rest_framework.generics import GenericAPIView from rest_framework.generics import GenericAPIView
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response from rest_framework.response import Response
from ccx_keys.locator import CCXLocator
from courseware import courses from courseware import courses
from xmodule.modulestore.django import SignalHandler
from edx_rest_framework_extensions.authentication import JwtAuthentication
from lms.djangoapps.instructor.enrollment import (
enroll_email,
get_email_params,
)
from opaque_keys import InvalidKeyError
from opaque_keys.edx.keys import CourseKey, UsageKey
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
from openedx.core.lib.api import (
authentication,
permissions,
)
from student.models import CourseEnrollment
from student.roles import CourseCcxCoachRole
from lms.djangoapps.ccx.models import CcxFieldOverride, CustomCourseForEdX from lms.djangoapps.ccx.models import CcxFieldOverride, CustomCourseForEdX
from lms.djangoapps.ccx.overrides import ( from lms.djangoapps.ccx.overrides import override_field_for_ccx
override_field_for_ccx,
)
from lms.djangoapps.ccx.utils import ( from lms.djangoapps.ccx.utils import (
add_master_course_staff_to_ccx, add_master_course_staff_to_ccx,
assign_staff_role_to_ccx, assign_staff_role_to_ccx,
is_email,
get_course_chapters, get_course_chapters,
is_email
) )
from lms.djangoapps.instructor.enrollment import enroll_email, get_email_params
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
from openedx.core.lib.api import authentication, permissions
from student.models import CourseEnrollment
from student.roles import CourseCcxCoachRole
from xmodule.modulestore.django import SignalHandler
from .paginators import CCXAPIPagination from .paginators import CCXAPIPagination
from .serializers import CCXCourseSerializer from .serializers import CCXCourseSerializer
......
...@@ -2,21 +2,21 @@ ...@@ -2,21 +2,21 @@
Models for the custom course feature Models for the custom course feature
""" """
from __future__ import unicode_literals from __future__ import unicode_literals
import json import json
import logging import logging
from datetime import datetime from datetime import datetime
from ccx_keys.locator import CCXLocator
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.db import models from django.db import models
from pytz import utc
from lazy import lazy from lazy import lazy
from pytz import utc
from ccx_keys.locator import CCXLocator
from openedx.core.djangoapps.xmodule_django.models import CourseKeyField, LocationKeyField from openedx.core.djangoapps.xmodule_django.models import CourseKeyField, LocationKeyField
from xmodule.error_module import ErrorDescriptor from xmodule.error_module import ErrorDescriptor
from xmodule.modulestore.django import modulestore from xmodule.modulestore.django import modulestore
log = logging.getLogger("edx.ccx") log = logging.getLogger("edx.ccx")
......
...@@ -11,8 +11,10 @@ version that was passed in. ...@@ -11,8 +11,10 @@ version that was passed in.
""" """
from contextlib import contextmanager from contextlib import contextmanager
from functools import partial from functools import partial
from ccx_keys.locator import CCXLocator, CCXBlockUsageLocator
from opaque_keys.edx.locator import CourseLocator, BlockUsageLocator from ccx_keys.locator import CCXBlockUsageLocator, CCXLocator
from opaque_keys.edx.locator import BlockUsageLocator, CourseLocator
from xmodule.modulestore import XMODULE_FIELDS_WITH_USAGE_KEYS from xmodule.modulestore import XMODULE_FIELDS_WITH_USAGE_KEYS
......
...@@ -5,17 +5,14 @@ by the individual custom courses feature. ...@@ -5,17 +5,14 @@ by the individual custom courses feature.
import json import json
import logging import logging
from ccx_keys.locator import CCXBlockUsageLocator, CCXLocator
from django.db import transaction from django.db import transaction
from opaque_keys.edx.keys import CourseKey, UsageKey
import request_cache import request_cache
from courseware.field_overrides import FieldOverrideProvider from courseware.field_overrides import FieldOverrideProvider
from opaque_keys.edx.keys import CourseKey, UsageKey
from ccx_keys.locator import CCXLocator, CCXBlockUsageLocator
from lms.djangoapps.ccx.models import CcxFieldOverride, CustomCourseForEdX from lms.djangoapps.ccx.models import CcxFieldOverride, CustomCourseForEdX
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
......
...@@ -5,9 +5,9 @@ Registers the CCX feature for the edX platform. ...@@ -5,9 +5,9 @@ Registers the CCX feature for the edX platform.
from django.conf import settings from django.conf import settings
from django.utils.translation import ugettext_noop from django.utils.translation import ugettext_noop
from xmodule.tabs import CourseTab
from student.roles import CourseCcxCoachRole
from courseware.access import has_access from courseware.access import has_access
from student.roles import CourseCcxCoachRole
from xmodule.tabs import CourseTab
class CcxCourseTab(CourseTab): class CcxCourseTab(CourseTab):
......
...@@ -2,16 +2,16 @@ ...@@ -2,16 +2,16 @@
Asynchronous tasks for the CCX app. Asynchronous tasks for the CCX app.
""" """
from django.dispatch import receiver
import logging import logging
from ccx_keys.locator import CCXLocator
from django.dispatch import receiver
from opaque_keys import InvalidKeyError from opaque_keys import InvalidKeyError
from opaque_keys.edx.locator import CourseLocator from opaque_keys.edx.locator import CourseLocator
from ccx_keys.locator import CCXLocator
from xmodule.modulestore.django import SignalHandler
from lms import CELERY_APP
from lms import CELERY_APP
from lms.djangoapps.ccx.models import CustomCourseForEdX from lms.djangoapps.ccx.models import CustomCourseForEdX
from xmodule.modulestore.django import SignalHandler
log = logging.getLogger("edx.ccx") log = logging.getLogger("edx.ccx")
......
""" """
Dummy factories for tests Dummy factories for tests
""" """
from factory import SubFactory, Sequence from factory import Sequence, SubFactory
from factory.django import DjangoModelFactory from factory.django import DjangoModelFactory
from student.tests.factories import UserFactory
from lms.djangoapps.ccx.models import CustomCourseForEdX from lms.djangoapps.ccx.models import CustomCourseForEdX
from student.tests.factories import UserFactory
class CcxFactory(DjangoModelFactory): # pylint: disable=missing-docstring class CcxFactory(DjangoModelFactory): # pylint: disable=missing-docstring
......
""" """
Test the CCXModulestoreWrapper Test the CCXModulestoreWrapper
""" """
from collections import deque
from ccx_keys.locator import CCXLocator
import datetime import datetime
from itertools import izip_longest, chain from collections import deque
from itertools import chain, izip_longest
import pytz import pytz
from student.tests.factories import AdminFactory from ccx_keys.locator import CCXLocator
from xmodule.modulestore.tests.django_utils import (
SharedModuleStoreTestCase,
TEST_DATA_SPLIT_MODULESTORE
)
from student.tests.factories import UserFactory
from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory
from lms.djangoapps.ccx.models import CustomCourseForEdX from lms.djangoapps.ccx.models import CustomCourseForEdX
from student.tests.factories import AdminFactory, UserFactory
from xmodule.modulestore.tests.django_utils import TEST_DATA_SPLIT_MODULESTORE, SharedModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory
class TestCCXModulestoreWrapper(SharedModuleStoreTestCase): class TestCCXModulestoreWrapper(SharedModuleStoreTestCase):
......
...@@ -2,33 +2,37 @@ ...@@ -2,33 +2,37 @@
""" """
Performance tests for field overrides. Performance tests for field overrides.
""" """
import ddt
import itertools import itertools
import mock
from nose.plugins.skip import SkipTest
from courseware.views.views import progress
from courseware.field_overrides import OverrideFieldData
from courseware.testutils import FieldOverrideTestMixin
from datetime import datetime from datetime import datetime
import ddt
import mock
from ccx_keys.locator import CCXLocator
from django.conf import settings from django.conf import settings
from django.core.cache import caches from django.core.cache import caches
from django.test.client import RequestFactory from django.test.client import RequestFactory
from django.test.utils import override_settings from django.test.utils import override_settings
from nose.plugins.attrib import attr from nose.plugins.attrib import attr
from nose.plugins.skip import SkipTest
from opaque_keys.edx.keys import CourseKey from opaque_keys.edx.keys import CourseKey
from pytz import UTC from pytz import UTC
from xblock.core import XBlock
from courseware.field_overrides import OverrideFieldData
from courseware.testutils import FieldOverrideTestMixin
from courseware.views.views import progress
from lms.djangoapps.ccx.tests.factories import CcxFactory
from openedx.core.djangoapps.content.block_structure.api import get_course_in_cache
from request_cache.middleware import RequestCache from request_cache.middleware import RequestCache
from student.models import CourseEnrollment from student.models import CourseEnrollment
from student.tests.factories import UserFactory from student.tests.factories import UserFactory
from xblock.core import XBlock from xmodule.modulestore.tests.django_utils import (
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase, \ TEST_DATA_MONGO_MODULESTORE,
TEST_DATA_SPLIT_MODULESTORE, TEST_DATA_MONGO_MODULESTORE TEST_DATA_SPLIT_MODULESTORE,
from xmodule.modulestore.tests.factories import check_mongo_calls, CourseFactory, check_sum_of_calls ModuleStoreTestCase
)
from xmodule.modulestore.tests.factories import CourseFactory, check_mongo_calls, check_sum_of_calls
from xmodule.modulestore.tests.utils import ProceduralCourseTestMixin from xmodule.modulestore.tests.utils import ProceduralCourseTestMixin
from ccx_keys.locator import CCXLocator
from lms.djangoapps.ccx.tests.factories import CcxFactory
from openedx.core.djangoapps.content.block_structure.api import get_course_in_cache
@attr(shard=3) @attr(shard=3)
......
""" """
tests for the models tests for the models
""" """
import ddt
import json import json
from datetime import datetime, timedelta from datetime import datetime, timedelta
import ddt
from nose.plugins.attrib import attr from nose.plugins.attrib import attr
from pytz import utc from pytz import utc
from student.roles import CourseCcxCoachRole from student.roles import CourseCcxCoachRole
from student.tests.factories import ( from student.tests.factories import AdminFactory
AdminFactory, from xmodule.modulestore.tests.django_utils import TEST_DATA_SPLIT_MODULESTORE, ModuleStoreTestCase
) from xmodule.modulestore.tests.factories import CourseFactory, check_mongo_calls
from xmodule.modulestore.tests.django_utils import (
ModuleStoreTestCase,
TEST_DATA_SPLIT_MODULESTORE
)
from xmodule.modulestore.tests.factories import (
CourseFactory,
check_mongo_calls
)
from .factories import (
CcxFactory,
)
from ..overrides import override_field_for_ccx from ..overrides import override_field_for_ccx
from .factories import CcxFactory
@ddt.ddt @ddt.ddt
......
...@@ -3,28 +3,25 @@ ...@@ -3,28 +3,25 @@
tests for overrides tests for overrides
""" """
import datetime import datetime
import mock import mock
import pytz import pytz
from ccx_keys.locator import CCXLocator
from django.test.utils import override_settings
from nose.plugins.attrib import attr from nose.plugins.attrib import attr
from ccx_keys.locator import CCXLocator
from courseware.courses import get_course_by_id from courseware.courses import get_course_by_id
from courseware.field_overrides import OverrideFieldData from courseware.field_overrides import OverrideFieldData
from courseware.testutils import FieldOverrideTestMixin from courseware.testutils import FieldOverrideTestMixin
from django.test.utils import override_settings from lms.djangoapps.ccx.models import CustomCourseForEdX
from lms.djangoapps.ccx.overrides import override_field_for_ccx
from lms.djangoapps.ccx.tests.utils import flatten, iter_blocks
from lms.djangoapps.courseware.tests.test_field_overrides import inject_field_overrides from lms.djangoapps.courseware.tests.test_field_overrides import inject_field_overrides
from request_cache.middleware import RequestCache from request_cache.middleware import RequestCache
from student.tests.factories import AdminFactory from student.tests.factories import AdminFactory
from xmodule.modulestore.tests.django_utils import ( from xmodule.modulestore.tests.django_utils import TEST_DATA_SPLIT_MODULESTORE, SharedModuleStoreTestCase
SharedModuleStoreTestCase,
TEST_DATA_SPLIT_MODULESTORE)
from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory
from lms.djangoapps.ccx.models import CustomCourseForEdX
from lms.djangoapps.ccx.overrides import override_field_for_ccx
from lms.djangoapps.ccx.tests.utils import flatten, iter_blocks
@attr(shard=1) @attr(shard=1)
@override_settings( @override_settings(
......
...@@ -2,24 +2,18 @@ ...@@ -2,24 +2,18 @@
Tests for celery tasks defined in tasks module Tests for celery tasks defined in tasks module
""" """
from ccx_keys.locator import CCXLocator
from mock_django import mock_signal_receiver from mock_django import mock_signal_receiver
from lms.djangoapps.ccx.tasks import send_ccx_course_published
from lms.djangoapps.ccx.tests.factories import CcxFactory from lms.djangoapps.ccx.tests.factories import CcxFactory
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
from openedx.core.djangoapps.content.course_structures.models import CourseStructure
from student.roles import CourseCcxCoachRole from student.roles import CourseCcxCoachRole
from student.tests.factories import ( from student.tests.factories import AdminFactory
AdminFactory,
)
from xmodule.modulestore.django import SignalHandler from xmodule.modulestore.django import SignalHandler
from xmodule.modulestore.tests.django_utils import TEST_DATA_SPLIT_MODULESTORE, ModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory from xmodule.modulestore.tests.factories import CourseFactory
from xmodule.modulestore.tests.django_utils import (
ModuleStoreTestCase,
TEST_DATA_SPLIT_MODULESTORE)
from openedx.core.djangoapps.content.course_structures.models import CourseStructure
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
from ccx_keys.locator import CCXLocator
from lms.djangoapps.ccx.tasks import send_ccx_course_published
class TestSendCCXCoursePublished(ModuleStoreTestCase): class TestSendCCXCoursePublished(ModuleStoreTestCase):
......
""" """
test utils test utils
""" """
import mock
import uuid import uuid
from nose.plugins.attrib import attr
from smtplib import SMTPException from smtplib import SMTPException
import mock
from ccx_keys.locator import CCXLocator from ccx_keys.locator import CCXLocator
from student.roles import ( from nose.plugins.attrib import attr
CourseCcxCoachRole,
CourseInstructorRole,
CourseStaffRole,
)
from student.tests.factories import AdminFactory
from student.models import CourseEnrollment, CourseEnrollmentException
from xmodule.modulestore.tests.django_utils import (
ModuleStoreTestCase,
TEST_DATA_SPLIT_MODULESTORE
)
from xmodule.modulestore.tests.factories import CourseFactory
from opaque_keys.edx.keys import CourseKey from opaque_keys.edx.keys import CourseKey
from xmodule.modulestore.django import modulestore
from lms.djangoapps.ccx import utils from lms.djangoapps.ccx import utils
from lms.djangoapps.instructor.access import (
list_with_level,
)
from lms.djangoapps.ccx.utils import (
add_master_course_staff_to_ccx,
ccx_course,
remove_master_course_staff_from_ccx
)
from lms.djangoapps.ccx.tests.factories import CcxFactory from lms.djangoapps.ccx.tests.factories import CcxFactory
from lms.djangoapps.ccx.tests.utils import CcxTestCase from lms.djangoapps.ccx.tests.utils import CcxTestCase
from lms.djangoapps.ccx.utils import add_master_course_staff_to_ccx, ccx_course, remove_master_course_staff_from_ccx
from lms.djangoapps.instructor.access import list_with_level
from student.models import CourseEnrollment, CourseEnrollmentException
from student.roles import CourseCcxCoachRole, CourseInstructorRole, CourseStaffRole
from student.tests.factories import AdminFactory
from xmodule.modulestore.django import modulestore
from xmodule.modulestore.tests.django_utils import TEST_DATA_SPLIT_MODULESTORE, ModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory
@attr(shard=1) @attr(shard=1)
......
...@@ -4,78 +4,52 @@ test views ...@@ -4,78 +4,52 @@ test views
import datetime import datetime
import json import json
import re import re
import pytz
import ddt
import urlparse import urlparse
import ddt
import pytz
from ccx_keys.locator import CCXLocator
from dateutil.tz import tzutc from dateutil.tz import tzutc
from mock import patch, MagicMock from django.conf import settings
from django.core.urlresolvers import resolve, reverse
from django.test import RequestFactory
from django.test.utils import override_settings
from django.utils.timezone import UTC
from django.utils.translation import ugettext as _
from mock import MagicMock, patch
from nose.plugins.attrib import attr from nose.plugins.attrib import attr
from opaque_keys.edx.keys import CourseKey
from capa.tests.response_xml_factory import StringResponseXMLFactory from capa.tests.response_xml_factory import StringResponseXMLFactory
from courseware.courses import get_course_by_id from courseware.courses import get_course_by_id
from courseware.tabs import get_course_tab_list
from courseware.tests.factories import StudentModuleFactory from courseware.tests.factories import StudentModuleFactory
from courseware.tests.helpers import LoginEnrollmentTestCase from courseware.tests.helpers import LoginEnrollmentTestCase
from courseware.tabs import get_course_tab_list
from courseware.testutils import FieldOverrideTestMixin from courseware.testutils import FieldOverrideTestMixin
from django_comment_client.utils import has_forum_access from django_comment_client.utils import has_forum_access
from django_comment_common.models import FORUM_ROLE_ADMINISTRATOR from django_comment_common.models import FORUM_ROLE_ADMINISTRATOR
from django_comment_common.utils import are_permissions_roles_seeded from django_comment_common.utils import are_permissions_roles_seeded
from lms.djangoapps.instructor.access import (
allow_access,
list_with_level,
)
from django.conf import settings
from django.core.urlresolvers import reverse, resolve
from django.utils.translation import ugettext as _
from django.utils.timezone import UTC
from django.test.utils import override_settings
from django.test import RequestFactory
from edxmako.shortcuts import render_to_response from edxmako.shortcuts import render_to_response
from request_cache.middleware import RequestCache
from opaque_keys.edx.keys import CourseKey
from student.roles import (
CourseCcxCoachRole,
CourseInstructorRole,
CourseStaffRole,
)
from student.models import (
CourseEnrollment,
CourseEnrollmentAllowed,
)
from student.tests.factories import (
AdminFactory,
CourseEnrollmentFactory,
UserFactory,
)
from xmodule.x_module import XModuleMixin
from xmodule.modulestore import ModuleStoreEnum
from xmodule.modulestore.tests.django_utils import (
ModuleStoreTestCase,
SharedModuleStoreTestCase,
TEST_DATA_SPLIT_MODULESTORE)
from xmodule.modulestore.tests.factories import (
CourseFactory,
ItemFactory,
SampleCourseFactory,
)
from ccx_keys.locator import CCXLocator
from lms.djangoapps.ccx.models import CustomCourseForEdX from lms.djangoapps.ccx.models import CustomCourseForEdX
from lms.djangoapps.ccx.overrides import get_override_for_ccx, override_field_for_ccx from lms.djangoapps.ccx.overrides import get_override_for_ccx, override_field_for_ccx
from lms.djangoapps.ccx.tests.factories import CcxFactory from lms.djangoapps.ccx.tests.factories import CcxFactory
from lms.djangoapps.ccx.tests.utils import ( from lms.djangoapps.ccx.tests.utils import CcxTestCase, flatten
CcxTestCase, from lms.djangoapps.ccx.utils import ccx_course, is_email
flatten,
)
from lms.djangoapps.ccx.utils import (
ccx_course,
is_email,
)
from lms.djangoapps.ccx.views import get_date from lms.djangoapps.ccx.views import get_date
from lms.djangoapps.instructor.access import allow_access, list_with_level
from request_cache.middleware import RequestCache
from student.models import CourseEnrollment, CourseEnrollmentAllowed
from student.roles import CourseCcxCoachRole, CourseInstructorRole, CourseStaffRole
from student.tests.factories import AdminFactory, CourseEnrollmentFactory, UserFactory
from xmodule.modulestore import ModuleStoreEnum
from xmodule.modulestore.django import modulestore from xmodule.modulestore.django import modulestore
from xmodule.modulestore.tests.django_utils import (
TEST_DATA_SPLIT_MODULESTORE,
ModuleStoreTestCase,
SharedModuleStoreTestCase
)
from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory, SampleCourseFactory
from xmodule.x_module import XModuleMixin
def intercept_renderer(path, context): def intercept_renderer(path, context):
......
...@@ -2,30 +2,17 @@ ...@@ -2,30 +2,17 @@
Test utils for CCX Test utils for CCX
""" """
import datetime import datetime
import pytz
import pytz
from django.conf import settings from django.conf import settings
from student.roles import (
CourseCcxCoachRole,
CourseInstructorRole,
CourseStaffRole
)
from student.tests.factories import (
UserFactory
)
from xmodule.modulestore.django import modulestore
from xmodule.modulestore.tests.django_utils import (
SharedModuleStoreTestCase,
TEST_DATA_SPLIT_MODULESTORE
)
from xmodule.modulestore.tests.factories import (
CourseFactory,
ItemFactory,
)
from lms.djangoapps.ccx.overrides import override_field_for_ccx from lms.djangoapps.ccx.overrides import override_field_for_ccx
from lms.djangoapps.ccx.tests.factories import CcxFactory from lms.djangoapps.ccx.tests.factories import CcxFactory
from student.roles import CourseCcxCoachRole, CourseInstructorRole, CourseStaffRole
from student.tests.factories import UserFactory
from xmodule.modulestore.django import modulestore
from xmodule.modulestore.tests.django_utils import TEST_DATA_SPLIT_MODULESTORE, SharedModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory
class CcxTestCase(SharedModuleStoreTestCase): class CcxTestCase(SharedModuleStoreTestCase):
......
...@@ -3,7 +3,6 @@ URLs for the CCX Feature. ...@@ -3,7 +3,6 @@ URLs for the CCX Feature.
""" """
from django.conf.urls import patterns, url from django.conf.urls import patterns, url
urlpatterns = patterns( urlpatterns = patterns(
'', '',
url(r'^ccx_coach$', url(r'^ccx_coach$',
......
...@@ -5,40 +5,27 @@ Does not include any access control, be sure to check access before calling. ...@@ -5,40 +5,27 @@ Does not include any access control, be sure to check access before calling.
""" """
import datetime import datetime
import logging import logging
import pytz
from contextlib import contextmanager from contextlib import contextmanager
from smtplib import SMTPException
import pytz
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.utils.translation import ugettext as _
from django.core.validators import validate_email
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from smtplib import SMTPException from django.core.validators import validate_email
from django.utils.translation import ugettext as _
from courseware.courses import get_course_by_id from courseware.courses import get_course_by_id
from lms.djangoapps.instructor.enrollment import ( from lms.djangoapps.ccx.custom_exception import CCXUserValidationException
enroll_email, from lms.djangoapps.ccx.models import CustomCourseForEdX
get_email_params, from lms.djangoapps.ccx.overrides import get_override_for_ccx
unenroll_email, from lms.djangoapps.instructor.access import allow_access, list_with_level, revoke_access
) from lms.djangoapps.instructor.enrollment import enroll_email, get_email_params, unenroll_email
from lms.djangoapps.instructor.access import (
allow_access,
list_with_level,
revoke_access,
)
from lms.djangoapps.instructor.views.tools import get_student_from_identifier from lms.djangoapps.instructor.views.tools import get_student_from_identifier
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
from openedx.core.djangoapps.content.course_structures.models import CourseStructure from openedx.core.djangoapps.content.course_structures.models import CourseStructure
from student.models import CourseEnrollment, CourseEnrollmentException from student.models import CourseEnrollment, CourseEnrollmentException
from student.roles import ( from student.roles import CourseCcxCoachRole, CourseInstructorRole, CourseStaffRole
CourseCcxCoachRole,
CourseInstructorRole,
CourseStaffRole
)
from lms.djangoapps.ccx.overrides import get_override_for_ccx
from lms.djangoapps.ccx.custom_exception import CCXUserValidationException
from lms.djangoapps.ccx.models import CustomCourseForEdX
log = logging.getLogger("edx.ccx") log = logging.getLogger("edx.ccx")
......
...@@ -6,66 +6,55 @@ import datetime ...@@ -6,66 +6,55 @@ import datetime
import functools import functools
import json import json
import logging import logging
import pytz
from copy import deepcopy from copy import deepcopy
from cStringIO import StringIO from cStringIO import StringIO
import pytz
from ccx_keys.locator import CCXLocator
from django.conf import settings from django.conf import settings
from django.core.urlresolvers import reverse
from django.http import (
HttpResponse,
HttpResponseForbidden,
)
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
from django.db import transaction from django.db import transaction
from django.http import Http404 from django.http import Http404, HttpResponse, HttpResponseForbidden
from django.shortcuts import redirect from django.shortcuts import redirect
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.views.decorators.cache import cache_control from django.views.decorators.cache import cache_control
from django.views.decorators.csrf import ensure_csrf_cookie from django.views.decorators.csrf import ensure_csrf_cookie
from django.contrib.auth.models import User from opaque_keys.edx.keys import CourseKey
from courseware.access import has_access from courseware.access import has_access
from courseware.courses import get_course_by_id from courseware.courses import get_course_by_id
from courseware.field_overrides import disable_overrides from courseware.field_overrides import disable_overrides
from django_comment_common.models import FORUM_ROLE_ADMINISTRATOR, assign_role from django_comment_common.models import FORUM_ROLE_ADMINISTRATOR, assign_role
from django_comment_common.utils import seed_permissions_roles from django_comment_common.utils import seed_permissions_roles
from edxmako.shortcuts import render_to_response from edxmako.shortcuts import render_to_response
from lms.djangoapps.grades.new.course_grade_factory import CourseGradeFactory
from opaque_keys.edx.keys import CourseKey
from ccx_keys.locator import CCXLocator
from student.roles import CourseCcxCoachRole
from student.models import CourseEnrollment
from xmodule.modulestore.django import SignalHandler
from lms.djangoapps.instructor.views.api import _split_input_list
from lms.djangoapps.instructor.views.gradebook_api import get_grade_book_page
from lms.djangoapps.instructor.enrollment import (
enroll_email,
get_email_params,
)
from lms.djangoapps.ccx.models import CustomCourseForEdX from lms.djangoapps.ccx.models import CustomCourseForEdX
from lms.djangoapps.ccx.overrides import ( from lms.djangoapps.ccx.overrides import (
get_override_for_ccx,
override_field_for_ccx,
clear_ccx_field_info_from_ccx_map,
bulk_delete_ccx_override_fields, bulk_delete_ccx_override_fields,
clear_ccx_field_info_from_ccx_map,
get_override_for_ccx,
override_field_for_ccx
) )
from lms.djangoapps.ccx.utils import ( from lms.djangoapps.ccx.utils import (
add_master_course_staff_to_ccx, add_master_course_staff_to_ccx,
assign_staff_role_to_ccx, assign_staff_role_to_ccx,
ccx_course, ccx_course,
ccx_students_enrolling_center, ccx_students_enrolling_center,
get_ccx_for_coach,
get_ccx_by_ccx_id, get_ccx_by_ccx_id,
get_ccx_creation_dict, get_ccx_creation_dict,
get_ccx_for_coach,
get_date, get_date,
parse_date, parse_date,
prep_course_for_grading, prep_course_for_grading
) )
from lms.djangoapps.grades.new.course_grade_factory import CourseGradeFactory
from lms.djangoapps.instructor.enrollment import enroll_email, get_email_params
from lms.djangoapps.instructor.views.api import _split_input_list
from lms.djangoapps.instructor.views.gradebook_api import get_grade_book_page
from student.models import CourseEnrollment
from student.roles import CourseCcxCoachRole
from xmodule.modulestore.django import SignalHandler
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
TODAY = datetime.datetime.today # for patching in tests TODAY = datetime.datetime.today # for patching in tests
......
""" """
django admin pages for certificates models django admin pages for certificates models
""" """
from django.contrib import admin
from django import forms
from config_models.admin import ConfigurationModelAdmin from config_models.admin import ConfigurationModelAdmin
from util.organizations_helpers import get_organizations from django import forms
from django.contrib import admin
from certificates.models import ( from certificates.models import (
CertificateGenerationConfiguration, CertificateGenerationConfiguration,
CertificateGenerationCourseSetting, CertificateGenerationCourseSetting,
CertificateHtmlViewConfiguration, CertificateHtmlViewConfiguration,
CertificateTemplate, CertificateTemplate,
CertificateTemplateAsset, CertificateTemplateAsset,
GeneratedCertificate, GeneratedCertificate
) )
from util.organizations_helpers import get_organizations
class CertificateTemplateForm(forms.ModelForm): class CertificateTemplateForm(forms.ModelForm):
......
...@@ -8,16 +8,10 @@ import logging ...@@ -8,16 +8,10 @@ import logging
from django.conf import settings from django.conf import settings
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from eventtracking import tracker
from opaque_keys import InvalidKeyError from opaque_keys import InvalidKeyError
from opaque_keys.edx.keys import CourseKey from opaque_keys.edx.keys import CourseKey
from branding import api as branding_api from branding import api as branding_api
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
from xmodule.modulestore.django import modulestore
from openedx.core.djangoapps.xmodule_django.models import CourseKeyField
from util.organizations_helpers import get_course_organizations
from certificates.models import ( from certificates.models import (
CertificateGenerationConfiguration, CertificateGenerationConfiguration,
CertificateGenerationCourseSetting, CertificateGenerationCourseSetting,
...@@ -27,10 +21,14 @@ from certificates.models import ( ...@@ -27,10 +21,14 @@ from certificates.models import (
CertificateTemplateAsset, CertificateTemplateAsset,
ExampleCertificateSet, ExampleCertificateSet,
GeneratedCertificate, GeneratedCertificate,
certificate_status_for_student, certificate_status_for_student
) )
from certificates.queue import XQueueCertInterface from certificates.queue import XQueueCertInterface
from eventtracking import tracker
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
from openedx.core.djangoapps.xmodule_django.models import CourseKeyField
from util.organizations_helpers import get_course_organizations
from xmodule.modulestore.django import modulestore
log = logging.getLogger("edx.certificate") log = logging.getLogger("edx.certificate")
MODES = GeneratedCertificate.MODES MODES = GeneratedCertificate.MODES
......
""" Certificates API URLs. """ """ Certificates API URLs. """
from django.conf.urls import ( from django.conf.urls import include, patterns, url
include,
patterns,
url,
)
urlpatterns = patterns( urlpatterns = patterns(
'', '',
......
""" Certificates API v0 URLs. """ """ Certificates API v0 URLs. """
from django.conf import settings from django.conf import settings
from django.conf.urls import ( from django.conf.urls import include, patterns, url
include,
patterns,
url,
)
from lms.djangoapps.certificates.apis.v0 import views from lms.djangoapps.certificates.apis.v0 import views
CERTIFICATES_URLS = patterns( CERTIFICATES_URLS = patterns(
'', '',
url( url(
......
""" API v0 views. """ """ API v0 views. """
import logging import logging
from edx_rest_framework_extensions.authentication import JwtAuthentication
from opaque_keys import InvalidKeyError from opaque_keys import InvalidKeyError
from opaque_keys.edx.keys import CourseKey from opaque_keys.edx.keys import CourseKey
from rest_framework.generics import GenericAPIView from rest_framework.generics import GenericAPIView
...@@ -8,11 +9,7 @@ from rest_framework.permissions import IsAuthenticated ...@@ -8,11 +9,7 @@ from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response from rest_framework.response import Response
from lms.djangoapps.certificates.api import get_certificate_for_user from lms.djangoapps.certificates.api import get_certificate_for_user
from edx_rest_framework_extensions.authentication import JwtAuthentication from openedx.core.lib.api import authentication, permissions
from openedx.core.lib.api import (
authentication,
permissions,
)
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
......
...@@ -3,13 +3,16 @@ Management command which sets or gets the certificate whitelist for a given ...@@ -3,13 +3,16 @@ Management command which sets or gets the certificate whitelist for a given
user/course user/course
""" """
from __future__ import print_function from __future__ import print_function
from django.core.management.base import BaseCommand, CommandError
from optparse import make_option from optparse import make_option
from django.contrib.auth.models import User
from django.core.management.base import BaseCommand, CommandError
from opaque_keys import InvalidKeyError from opaque_keys import InvalidKeyError
from opaque_keys.edx.keys import CourseKey from opaque_keys.edx.keys import CourseKey
from opaque_keys.edx.locations import SlashSeparatedCourseKey from opaque_keys.edx.locations import SlashSeparatedCourseKey
from certificates.models import CertificateWhitelist from certificates.models import CertificateWhitelist
from django.contrib.auth.models import User
def get_user_from_identifier(identifier): def get_user_from_identifier(identifier):
......
...@@ -10,12 +10,13 @@ Example usage: ...@@ -10,12 +10,13 @@ Example usage:
""" """
import logging import logging
from django.core.management.base import BaseCommand, CommandError
from django.contrib.auth.models import User
from optparse import make_option from optparse import make_option
from django.contrib.auth.models import User
from django.core.management.base import BaseCommand, CommandError
from opaque_keys.edx.keys import CourseKey from opaque_keys.edx.keys import CourseKey
from certificates.models import GeneratedCertificate, CertificateStatuses
from certificates.models import CertificateStatuses, GeneratedCertificate
LOGGER = logging.getLogger(__name__) LOGGER = logging.getLogger(__name__)
......
""" """
Management command which fixes ungraded certificates for students Management command which fixes ungraded certificates for students
""" """
from django.core.management.base import BaseCommand
import logging import logging
from optparse import make_option from optparse import make_option
from django.core.management.base import BaseCommand
from certificates.models import GeneratedCertificate from certificates.models import GeneratedCertificate
from courseware import courses from courseware import courses
from lms.djangoapps.grades.new.course_grade_factory import CourseGradeFactory from lms.djangoapps.grades.new.course_grade_factory import CourseGradeFactory
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
......
...@@ -2,14 +2,16 @@ ...@@ -2,14 +2,16 @@
Generate a report of certificate statuses Generate a report of certificate statuses
""" """
from django.core.management.base import BaseCommand, CommandError
from certificates.models import GeneratedCertificate
from django.contrib.auth.models import User
from optparse import make_option from optparse import make_option
from django.contrib.auth.models import User
from django.core.management.base import BaseCommand, CommandError
from django.db.models import Count
from opaque_keys import InvalidKeyError from opaque_keys import InvalidKeyError
from opaque_keys.edx.keys import CourseKey from opaque_keys.edx.keys import CourseKey
from opaque_keys.edx.locations import SlashSeparatedCourseKey from opaque_keys.edx.locations import SlashSeparatedCourseKey
from django.db.models import Count
from certificates.models import GeneratedCertificate
class Command(BaseCommand): class Command(BaseCommand):
......
"""Django management command to force certificate regeneration for one user""" """Django management command to force certificate regeneration for one user"""
import logging
import copy import copy
import logging
from optparse import make_option from optparse import make_option
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core.management.base import BaseCommand, CommandError from django.core.management.base import BaseCommand, CommandError
from opaque_keys import InvalidKeyError from opaque_keys import InvalidKeyError
...@@ -10,8 +11,8 @@ from opaque_keys.edx.keys import CourseKey ...@@ -10,8 +11,8 @@ from opaque_keys.edx.keys import CourseKey
from opaque_keys.edx.locations import SlashSeparatedCourseKey from opaque_keys.edx.locations import SlashSeparatedCourseKey
from badges.events.course_complete import get_completion_badge from badges.events.course_complete import get_completion_badge
from xmodule.modulestore.django import modulestore
from certificates.api import regenerate_user_certificates from certificates.api import regenerate_user_certificates
from xmodule.modulestore.django import modulestore
LOGGER = logging.getLogger(__name__) LOGGER = logging.getLogger(__name__)
......
...@@ -18,14 +18,14 @@ Example usage: ...@@ -18,14 +18,14 @@ Example usage:
""" """
import logging import logging
from optparse import make_option from optparse import make_option
from django.core.management.base import BaseCommand, CommandError
from xmodule.modulestore.django import modulestore from django.core.management.base import BaseCommand, CommandError
from opaque_keys import InvalidKeyError from opaque_keys import InvalidKeyError
from opaque_keys.edx.keys import CourseKey from opaque_keys.edx.keys import CourseKey
from certificates import api as certs_api
from certificates.models import GeneratedCertificate, CertificateStatuses
from certificates import api as certs_api
from certificates.models import CertificateStatuses, GeneratedCertificate
from xmodule.modulestore.django import modulestore
LOGGER = logging.getLogger(__name__) LOGGER = logging.getLogger(__name__)
......
...@@ -2,20 +2,20 @@ ...@@ -2,20 +2,20 @@
Management command to find all students that need certificates for Management command to find all students that need certificates for
courses that have finished, and put their cert requests on the queue. courses that have finished, and put their cert requests on the queue.
""" """
import logging
import datetime import datetime
from pytz import UTC import logging
from django.core.management.base import BaseCommand, CommandError
from certificates.models import certificate_status_for_student
from certificates.api import generate_user_certificates
from django.contrib.auth.models import User
from optparse import make_option from optparse import make_option
from django.contrib.auth.models import User
from django.core.management.base import BaseCommand, CommandError
from opaque_keys import InvalidKeyError from opaque_keys import InvalidKeyError
from opaque_keys.edx.keys import CourseKey from opaque_keys.edx.keys import CourseKey
from opaque_keys.edx.locations import SlashSeparatedCourseKey from opaque_keys.edx.locations import SlashSeparatedCourseKey
from xmodule.modulestore.django import modulestore from pytz import UTC
from certificates.models import CertificateStatuses
from certificates.api import generate_user_certificates
from certificates.models import CertificateStatuses, certificate_status_for_student
from xmodule.modulestore.django import modulestore
LOGGER = logging.getLogger(__name__) LOGGER = logging.getLogger(__name__)
......
...@@ -47,9 +47,10 @@ Eligibility: ...@@ -47,9 +47,10 @@ Eligibility:
""" """
import json import json
import logging import logging
import os
import uuid import uuid
import os from config_models.models import ConfigurationModel
from django.conf import settings from django.conf import settings
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
...@@ -60,15 +61,13 @@ from django.utils.translation import ugettext_lazy as _ ...@@ -60,15 +61,13 @@ from django.utils.translation import ugettext_lazy as _
from django_extensions.db.fields import CreationDateTimeField from django_extensions.db.fields import CreationDateTimeField
from model_utils import Choices from model_utils import Choices
from model_utils.models import TimeStampedModel from model_utils.models import TimeStampedModel
from openedx.core.djangoapps.signals.signals import COURSE_CERT_AWARDED
from badges.events.course_complete import course_badge_check from badges.events.course_complete import course_badge_check
from badges.events.course_meta import completion_check, course_group_check from badges.events.course_meta import completion_check, course_group_check
from config_models.models import ConfigurationModel
from lms.djangoapps.instructor_task.models import InstructorTask from lms.djangoapps.instructor_task.models import InstructorTask
from util.milestones_helpers import fulfill_course_milestone, is_prerequisite_courses_enabled from openedx.core.djangoapps.signals.signals import COURSE_CERT_AWARDED
from openedx.core.djangoapps.xmodule_django.models import CourseKeyField, NoneToEmptyManager from openedx.core.djangoapps.xmodule_django.models import CourseKeyField, NoneToEmptyManager
from util.milestones_helpers import fulfill_course_milestone, is_prerequisite_courses_enabled
LOGGER = logging.getLogger(__name__) LOGGER = logging.getLogger(__name__)
......
"""Interface for adding certificate generation tasks to the XQueue. """ """Interface for adding certificate generation tasks to the XQueue. """
import json import json
import random
import logging import logging
import lxml.html import random
from lxml.etree import XMLSyntaxError, ParserError
from uuid import uuid4 from uuid import uuid4
from django.test.client import RequestFactory import lxml.html
from django.conf import settings from django.conf import settings
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.test.client import RequestFactory
from lxml.etree import ParserError, XMLSyntaxError
from requests.auth import HTTPBasicAuth from requests.auth import HTTPBasicAuth
from lms.djangoapps.grades.new.course_grade_factory import CourseGradeFactory from capa.xqueue_interface import XQueueInterface, make_hashkey, make_xheader
from xmodule.modulestore.django import modulestore from certificates.models import CertificateStatuses as status
from capa.xqueue_interface import XQueueInterface
from capa.xqueue_interface import make_xheader, make_hashkey
from course_modes.models import CourseMode
from student.models import UserProfile, CourseEnrollment
from lms.djangoapps.verify_student.models import SoftwareSecurePhotoVerification
from certificates.models import ( from certificates.models import (
CertificateStatuses, CertificateStatuses,
GeneratedCertificate,
certificate_status_for_student,
CertificateStatuses as status,
CertificateWhitelist, CertificateWhitelist,
ExampleCertificate ExampleCertificate,
GeneratedCertificate,
certificate_status_for_student
) )
from course_modes.models import CourseMode
from lms.djangoapps.grades.new.course_grade_factory import CourseGradeFactory
from lms.djangoapps.verify_student.models import SoftwareSecurePhotoVerification
from student.models import CourseEnrollment, UserProfile
from xmodule.modulestore.django import modulestore
LOGGER = logging.getLogger(__name__) LOGGER = logging.getLogger(__name__)
......
...@@ -3,9 +3,9 @@ for self-paced courses. ...@@ -3,9 +3,9 @@ for self-paced courses.
""" """
from celery.task import task from celery.task import task
from django.dispatch.dispatcher import receiver from django.dispatch.dispatcher import receiver
from opaque_keys.edx.keys import CourseKey
from certificates.models import CertificateGenerationCourseSetting from certificates.models import CertificateGenerationCourseSetting
from opaque_keys.edx.keys import CourseKey
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
from xmodule.modulestore.django import SignalHandler from xmodule.modulestore.django import SignalHandler
......
...@@ -5,8 +5,11 @@ from uuid import uuid4 ...@@ -5,8 +5,11 @@ from uuid import uuid4
from factory.django import DjangoModelFactory from factory.django import DjangoModelFactory
from certificates.models import ( from certificates.models import (
GeneratedCertificate, CertificateStatuses, CertificateHtmlViewConfiguration, CertificateWhitelist, CertificateHtmlViewConfiguration,
CertificateInvalidation, CertificateInvalidation,
CertificateStatuses,
CertificateWhitelist,
GeneratedCertificate
) )
from student.models import LinkedInAddToProfileConfiguration from student.models import LinkedInAddToProfileConfiguration
......
"""Tests for the certificates Python API. """ """Tests for the certificates Python API. """
import uuid
from contextlib import contextmanager from contextlib import contextmanager
import ddt
from functools import wraps from functools import wraps
import uuid
from django.test import TestCase, RequestFactory import ddt
from django.test.utils import override_settings from config_models.models import cache
from django.conf import settings from django.conf import settings
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.test import RequestFactory, TestCase
from django.test.utils import override_settings
from django.utils import timezone from django.utils import timezone
from freezegun import freeze_time from freezegun import freeze_time
from mock import patch from mock import patch
from nose.plugins.attrib import attr from nose.plugins.attrib import attr
from opaque_keys.edx.locator import CourseLocator from opaque_keys.edx.locator import CourseLocator
from config_models.models import cache from certificates import api as certs_api
from certificates.models import (
CertificateGenerationConfiguration,
CertificateStatuses,
ExampleCertificate,
GeneratedCertificate,
certificate_status_for_student
)
from certificates.queue import XQueueAddToQueueError, XQueueCertInterface
from certificates.tests.factories import CertificateInvalidationFactory, GeneratedCertificateFactory
from course_modes.models import CourseMode from course_modes.models import CourseMode
from course_modes.tests.factories import CourseModeFactory from course_modes.tests.factories import CourseModeFactory
from courseware.tests.factories import GlobalStaffFactory from courseware.tests.factories import GlobalStaffFactory
...@@ -23,26 +33,8 @@ from microsite_configuration import microsite ...@@ -23,26 +33,8 @@ from microsite_configuration import microsite
from student.models import CourseEnrollment from student.models import CourseEnrollment
from student.tests.factories import UserFactory from student.tests.factories import UserFactory
from util.testing import EventTestMixin from util.testing import EventTestMixin
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase, SharedModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory from xmodule.modulestore.tests.factories import CourseFactory
from xmodule.modulestore.tests.django_utils import (
ModuleStoreTestCase,
SharedModuleStoreTestCase,
)
from certificates import api as certs_api
from certificates.models import (
CertificateStatuses,
CertificateGenerationConfiguration,
ExampleCertificate,
GeneratedCertificate,
certificate_status_for_student,
)
from certificates.queue import XQueueCertInterface, XQueueAddToQueueError
from certificates.tests.factories import (
CertificateInvalidationFactory,
GeneratedCertificateFactory
)
FEATURES_WITH_CERTS_ENABLED = settings.FEATURES.copy() FEATURES_WITH_CERTS_ENABLED = settings.FEATURES.copy()
FEATURES_WITH_CERTS_ENABLED['CERTIFICATES_HTML_VIEW'] = True FEATURES_WITH_CERTS_ENABLED['CERTIFICATES_HTML_VIEW'] = True
......
"""Tests for the resubmit_error_certificates management command. """ """Tests for the resubmit_error_certificates management command. """
import ddt import ddt
from django.core.management.base import CommandError from django.core.management.base import CommandError
from nose.plugins.attrib import attr
from django.test.utils import override_settings from django.test.utils import override_settings
from mock import patch from mock import patch
from nose.plugins.attrib import attr
from course_modes.models import CourseMode
from opaque_keys.edx.locator import CourseLocator from opaque_keys.edx.locator import CourseLocator
from badges.events.course_complete import get_completion_badge from badges.events.course_complete import get_completion_badge
from badges.models import BadgeAssertion from badges.models import BadgeAssertion
from badges.tests.factories import BadgeAssertionFactory, CourseCompleteImageConfigurationFactory from badges.tests.factories import BadgeAssertionFactory, CourseCompleteImageConfigurationFactory
from certificates.management.commands import regenerate_user, resubmit_error_certificates, ungenerated_certs
from certificates.models import CertificateStatuses, GeneratedCertificate
from course_modes.models import CourseMode
from lms.djangoapps.grades.tests.utils import mock_passing_grade from lms.djangoapps.grades.tests.utils import mock_passing_grade
from student.tests.factories import CourseEnrollmentFactory, UserFactory
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory, check_mongo_calls, ItemFactory from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory, check_mongo_calls
from student.tests.factories import UserFactory, CourseEnrollmentFactory
from certificates.management.commands import resubmit_error_certificates, regenerate_user, ungenerated_certs
from certificates.models import GeneratedCertificate, CertificateStatuses
class CertificateManagementTest(ModuleStoreTestCase): class CertificateManagementTest(ModuleStoreTestCase):
......
"""Tests for the create_fake_certs management command. """ """Tests for the create_fake_certs management command. """
from django.test import TestCase
from django.core.management.base import CommandError from django.core.management.base import CommandError
from django.test import TestCase
from nose.plugins.attrib import attr from nose.plugins.attrib import attr
from opaque_keys.edx.locator import CourseLocator from opaque_keys.edx.locator import CourseLocator
from student.tests.factories import UserFactory
from certificates.management.commands import create_fake_cert from certificates.management.commands import create_fake_cert
from certificates.models import GeneratedCertificate from certificates.models import GeneratedCertificate
from student.tests.factories import UserFactory
@attr(shard=1) @attr(shard=1)
......
"""Tests for certificate Django models. """ """Tests for certificate Django models. """
import json
import ddt import ddt
from django.conf import settings from django.conf import settings
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.core.files.uploadedfile import SimpleUploadedFile from django.core.files.uploadedfile import SimpleUploadedFile
from django.test import TestCase from django.test import TestCase
from django.test.utils import override_settings from django.test.utils import override_settings
from nose.plugins.attrib import attr
import json
from mock import Mock from mock import Mock
from nose.plugins.attrib import attr
from opaque_keys.edx.locator import CourseLocator
from path import Path as path from path import Path as path
from certificates.models import ( from certificates.models import (
ExampleCertificate, CertificateGenerationHistory,
ExampleCertificateSet,
CertificateHtmlViewConfiguration, CertificateHtmlViewConfiguration,
CertificateTemplateAsset,
CertificateInvalidation, CertificateInvalidation,
GeneratedCertificate,
CertificateStatuses, CertificateStatuses,
CertificateGenerationHistory, CertificateTemplateAsset,
) ExampleCertificate,
from certificates.tests.factories import ( ExampleCertificateSet,
CertificateInvalidationFactory, GeneratedCertificate
GeneratedCertificateFactory
) )
from certificates.tests.factories import CertificateInvalidationFactory, GeneratedCertificateFactory
from lms.djangoapps.instructor_task.tests.factories import InstructorTaskFactory from lms.djangoapps.instructor_task.tests.factories import InstructorTaskFactory
from opaque_keys.edx.locator import CourseLocator
from student.tests.factories import AdminFactory, UserFactory from student.tests.factories import AdminFactory, UserFactory
from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory from xmodule.modulestore.tests.factories import CourseFactory
......
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
"""Tests for the XQueue certificates interface. """ """Tests for the XQueue certificates interface. """
import json
from contextlib import contextmanager from contextlib import contextmanager
from datetime import datetime, timedelta from datetime import datetime, timedelta
import ddt
import json
from mock import patch, Mock
from nose.plugins.attrib import attr
from django.test import TestCase import ddt
from django.test.utils import override_settings
import freezegun import freezegun
import pytz import pytz
from django.test import TestCase
from course_modes.models import CourseMode from django.test.utils import override_settings
from lms.djangoapps.grades.tests.utils import mock_passing_grade from mock import Mock, patch
from nose.plugins.attrib import attr
from opaque_keys.edx.locator import CourseLocator from opaque_keys.edx.locator import CourseLocator
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from student.tests.factories import UserFactory, CourseEnrollmentFactory
from xmodule.modulestore.tests.factories import CourseFactory
# It is really unfortunate that we are using the XQueue client # It is really unfortunate that we are using the XQueue client
# code from the capa library. In the future, we should move this # code from the capa library. In the future, we should move this
...@@ -26,16 +19,15 @@ from xmodule.modulestore.tests.factories import CourseFactory ...@@ -26,16 +19,15 @@ from xmodule.modulestore.tests.factories import CourseFactory
# and verify that items are being correctly added to the queue # and verify that items are being correctly added to the queue
# in our `XQueueCertInterface` implementation. # in our `XQueueCertInterface` implementation.
from capa.xqueue_interface import XQueueInterface from capa.xqueue_interface import XQueueInterface
from certificates.models import CertificateStatuses, ExampleCertificate, ExampleCertificateSet, GeneratedCertificate
from certificates.models import (
ExampleCertificateSet,
ExampleCertificate,
GeneratedCertificate,
CertificateStatuses,
)
from certificates.queue import XQueueCertInterface from certificates.queue import XQueueCertInterface
from certificates.tests.factories import CertificateWhitelistFactory, GeneratedCertificateFactory from certificates.tests.factories import CertificateWhitelistFactory, GeneratedCertificateFactory
from course_modes.models import CourseMode
from lms.djangoapps.grades.tests.utils import mock_passing_grade
from lms.djangoapps.verify_student.tests.factories import SoftwareSecurePhotoVerificationFactory from lms.djangoapps.verify_student.tests.factories import SoftwareSecurePhotoVerificationFactory
from student.tests.factories import CourseEnrollmentFactory, UserFactory
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory
@ddt.ddt @ddt.ddt
......
...@@ -5,8 +5,8 @@ from certificates import api as certs_api ...@@ -5,8 +5,8 @@ from certificates import api as certs_api
from certificates.models import CertificateGenerationConfiguration from certificates.models import CertificateGenerationConfiguration
from certificates.signals import _listen_for_course_publish from certificates.signals import _listen_for_course_publish
from openedx.core.djangoapps.self_paced.models import SelfPacedConfiguration from openedx.core.djangoapps.self_paced.models import SelfPacedConfiguration
from xmodule.modulestore.tests.factories import CourseFactory
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory
class SelfGeneratedCertsSignalTest(ModuleStoreTestCase): class SelfGeneratedCertsSignalTest(ModuleStoreTestCase):
......
...@@ -8,17 +8,13 @@ import ddt ...@@ -8,17 +8,13 @@ import ddt
from django.conf import settings from django.conf import settings
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.test.utils import override_settings from django.test.utils import override_settings
from opaque_keys.edx.keys import CourseKey
from certificates.models import ( from certificates.models import CertificateInvalidation, CertificateStatuses, GeneratedCertificate
CertificateInvalidation,
CertificateStatuses,
GeneratedCertificate
)
from certificates.tests.factories import CertificateInvalidationFactory from certificates.tests.factories import CertificateInvalidationFactory
from opaque_keys.edx.keys import CourseKey
from student.tests.factories import UserFactory
from student.models import CourseEnrollment from student.models import CourseEnrollment
from student.roles import GlobalStaff, SupportStaffRole from student.roles import GlobalStaff, SupportStaffRole
from student.tests.factories import UserFactory
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory from xmodule.modulestore.tests.factories import CourseFactory
......
...@@ -11,15 +11,15 @@ from django.test.client import Client ...@@ -11,15 +11,15 @@ from django.test.client import Client
from django.test.utils import override_settings from django.test.utils import override_settings
from nose.plugins.attrib import attr from nose.plugins.attrib import attr
from opaque_keys.edx.locator import CourseLocator from opaque_keys.edx.locator import CourseLocator
from openedx.core.djangolib.testing.utils import CacheIsolationTestCase
from certificates.api import get_certificate_url from certificates.api import get_certificate_url
from certificates.models import ( from certificates.models import (
ExampleCertificateSet,
ExampleCertificate,
GeneratedCertificate,
CertificateHtmlViewConfiguration, CertificateHtmlViewConfiguration,
ExampleCertificate,
ExampleCertificateSet,
GeneratedCertificate
) )
from openedx.core.djangolib.testing.utils import CacheIsolationTestCase
from student.tests.factories import UserFactory from student.tests.factories import UserFactory
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory from xmodule.modulestore.tests.factories import CourseFactory
......
...@@ -2,49 +2,47 @@ ...@@ -2,49 +2,47 @@
"""Tests for certificates views. """ """Tests for certificates views. """
import json import json
import ddt
from uuid import uuid4
from nose.plugins.attrib import attr
from mock import patch
from urllib import urlencode
from collections import OrderedDict from collections import OrderedDict
from urllib import urlencode
from uuid import uuid4
import ddt
from django.conf import settings from django.conf import settings
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.test.client import Client, RequestFactory from django.test.client import Client, RequestFactory
from django.test.utils import override_settings from django.test.utils import override_settings
from mock import patch
from nose.plugins.attrib import attr
from certificates.api import get_certificate_url
from certificates.models import (
CertificateHtmlViewConfiguration,
CertificateSocialNetworks,
CertificateStatuses,
CertificateTemplate,
CertificateTemplateAsset,
GeneratedCertificate
)
from certificates.tests.factories import (
CertificateHtmlViewConfigurationFactory,
GeneratedCertificateFactory,
LinkedInAddToProfileConfigurationFactory
)
from course_modes.models import CourseMode from course_modes.models import CourseMode
from lms.djangoapps.badges.events.course_complete import get_completion_badge from lms.djangoapps.badges.events.course_complete import get_completion_badge
from lms.djangoapps.badges.tests.factories import ( from lms.djangoapps.badges.tests.factories import (
BadgeAssertionFactory, BadgeAssertionFactory,
CourseCompleteImageConfigurationFactory,
BadgeClassFactory, BadgeClassFactory,
CourseCompleteImageConfigurationFactory
) )
from lms.djangoapps.grades.tests.utils import mock_passing_grade from lms.djangoapps.grades.tests.utils import mock_passing_grade
from openedx.core.lib.tests.assertions.events import assert_event_matches from openedx.core.lib.tests.assertions.events import assert_event_matches
from student.tests.factories import UserFactory, CourseEnrollmentFactory
from student.roles import CourseStaffRole from student.roles import CourseStaffRole
from student.tests.factories import CourseEnrollmentFactory, UserFactory
from track.tests import EventTrackingTestCase from track.tests import EventTrackingTestCase
from util import organizations_helpers as organizations_api from util import organizations_helpers as organizations_api
from xmodule.modulestore.tests.factories import CourseFactory
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory
from certificates.api import get_certificate_url
from certificates.models import (
GeneratedCertificate,
CertificateStatuses,
CertificateSocialNetworks,
CertificateTemplate,
CertificateHtmlViewConfiguration,
CertificateTemplateAsset,
)
from certificates.tests.factories import (
CertificateHtmlViewConfigurationFactory,
LinkedInAddToProfileConfigurationFactory,
GeneratedCertificateFactory,
)
FEATURES_WITH_CERTS_ENABLED = settings.FEATURES.copy() FEATURES_WITH_CERTS_ENABLED = settings.FEATURES.copy()
FEATURES_WITH_CERTS_ENABLED['CERTIFICATES_HTML_VIEW'] = True FEATURES_WITH_CERTS_ENABLED['CERTIFICATES_HTML_VIEW'] = True
......
""" """
Tests for the certificates models. Tests for the certificates models.
""" """
from ddt import ddt, data, unpack from ddt import data, ddt, unpack
from mock import patch
from django.conf import settings from django.conf import settings
from milestones.tests.utils import MilestonesTestCaseMixin
from mock import patch
from nose.plugins.attrib import attr from nose.plugins.attrib import attr
from badges.tests.factories import CourseCompleteImageConfigurationFactory from badges.tests.factories import CourseCompleteImageConfigurationFactory
from xmodule.modulestore.tests.factories import CourseFactory
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from student.tests.factories import UserFactory, CourseEnrollmentFactory
from certificates.models import ( from certificates.models import (
CertificateStatuses, CertificateStatuses,
GeneratedCertificate, GeneratedCertificate,
certificate_status_for_student, certificate_info_for_user,
certificate_info_for_user certificate_status_for_student
) )
from certificates.tests.factories import GeneratedCertificateFactory from certificates.tests.factories import GeneratedCertificateFactory
from student.tests.factories import CourseEnrollmentFactory, UserFactory
from util.milestones_helpers import ( from util.milestones_helpers import milestones_achieved_by_user, set_prerequisite_courses
set_prerequisite_courses, from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
milestones_achieved_by_user, from xmodule.modulestore.tests.factories import CourseFactory
)
from milestones.tests.utils import MilestonesTestCaseMixin
@attr(shard=1) @attr(shard=1)
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
URLs for the certificates app. URLs for the certificates app.
""" """
from django.conf.urls import patterns, url
from django.conf import settings from django.conf import settings
from django.conf.urls import patterns, url
from certificates import views from certificates import views
......
...@@ -8,29 +8,23 @@ import logging ...@@ -8,29 +8,23 @@ import logging
import urllib import urllib
from functools import wraps from functools import wraps
from django.http import (
HttpResponse,
HttpResponseBadRequest,
HttpResponseForbidden,
HttpResponseServerError
)
from django.views.decorators.http import require_GET, require_POST
from django.db import transaction from django.db import transaction
from django.db.models import Q from django.db.models import Q
from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseForbidden, HttpResponseServerError
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.views.decorators.http import require_GET, require_POST
from opaque_keys import InvalidKeyError
from opaque_keys.edx.keys import CourseKey
from certificates import api from certificates import api
from certificates.models import CertificateInvalidation from certificates.models import CertificateInvalidation
from courseware.access import has_access from courseware.access import has_access
from lms.djangoapps.instructor_task.api import generate_certificates_for_students from lms.djangoapps.instructor_task.api import generate_certificates_for_students
from opaque_keys import InvalidKeyError
from opaque_keys.edx.keys import CourseKey
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
from student.models import User, CourseEnrollment from student.models import CourseEnrollment, User
from util.json_request import JsonResponse from util.json_request import JsonResponse
from xmodule.modulestore.django import modulestore from xmodule.modulestore.django import modulestore
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
......
...@@ -2,49 +2,49 @@ ...@@ -2,49 +2,49 @@
""" """
Certificate HTML webview. Certificate HTML webview.
""" """
from datetime import datetime
from uuid import uuid4
import logging import logging
import urllib import urllib
from datetime import datetime
from uuid import uuid4
from django.conf import settings from django.conf import settings
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.http import HttpResponse, Http404 from django.http import Http404, HttpResponse
from django.template import RequestContext from django.template import RequestContext
from django.utils.translation import ugettext as _
from django.utils.encoding import smart_str from django.utils.encoding import smart_str
from django.utils.translation import ugettext as _
from opaque_keys import InvalidKeyError
from opaque_keys.edx.keys import CourseKey
from badges.events.course_complete import get_completion_badge from badges.events.course_complete import get_completion_badge
from badges.utils import badges_enabled from badges.utils import badges_enabled
from certificates.api import (
emit_certificate_event,
get_active_web_certificate,
get_certificate_footer_context,
get_certificate_header_context,
get_certificate_template,
get_certificate_url,
has_html_certificates_enabled
)
from certificates.models import (
CertificateHtmlViewConfiguration,
CertificateSocialNetworks,
CertificateStatuses,
GeneratedCertificate
)
from courseware.access import has_access from courseware.access import has_access
from edxmako.shortcuts import render_to_response from edxmako.shortcuts import render_to_response
from edxmako.template import Template from edxmako.template import Template
from eventtracking import tracker from eventtracking import tracker
from opaque_keys import InvalidKeyError
from opaque_keys.edx.keys import CourseKey
from openedx.core.lib.courses import course_image_url
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
from openedx.core.lib.courses import course_image_url
from student.models import LinkedInAddToProfileConfiguration from student.models import LinkedInAddToProfileConfiguration
from util import organizations_helpers as organization_api from util import organizations_helpers as organization_api
from util.views import handle_500 from util.views import handle_500
from xmodule.modulestore.django import modulestore from xmodule.modulestore.django import modulestore
from xmodule.modulestore.exceptions import ItemNotFoundError from xmodule.modulestore.exceptions import ItemNotFoundError
from certificates.api import (
get_active_web_certificate,
get_certificate_url,
emit_certificate_event,
has_html_certificates_enabled,
get_certificate_template,
get_certificate_header_context,
get_certificate_footer_context,
)
from certificates.models import (
GeneratedCertificate,
CertificateStatuses,
CertificateHtmlViewConfiguration,
CertificateSocialNetworks)
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
......
...@@ -6,24 +6,23 @@ import logging ...@@ -6,24 +6,23 @@ import logging
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.db import transaction from django.db import transaction
from django.http import HttpResponse, Http404, HttpResponseForbidden from django.http import Http404, HttpResponse, HttpResponseForbidden
from django.views.decorators.csrf import csrf_exempt from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_POST from django.views.decorators.http import require_POST
import dogstats_wrapper as dog_stats_api from opaque_keys.edx.locations import SlashSeparatedCourseKey
import dogstats_wrapper as dog_stats_api
from capa.xqueue_interface import XQUEUE_METRIC_NAME from capa.xqueue_interface import XQUEUE_METRIC_NAME
from xmodule.modulestore.django import modulestore
from opaque_keys.edx.locations import SlashSeparatedCourseKey
from util.json_request import JsonResponse, JsonResponseBadRequest
from util.bad_request_rate_limiter import BadRequestRateLimiter
from certificates.api import generate_user_certificates from certificates.api import generate_user_certificates
from certificates.models import ( from certificates.models import (
certificate_status_for_student,
CertificateStatuses, CertificateStatuses,
GeneratedCertificate,
ExampleCertificate, ExampleCertificate,
GeneratedCertificate,
certificate_status_for_student
) )
from util.bad_request_rate_limiter import BadRequestRateLimiter
from util.json_request import JsonResponse, JsonResponseBadRequest
from xmodule.modulestore.django import modulestore
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
......
""" """
Computes the data to display on the Instructor Dashboard Computes the data to display on the Instructor Dashboard
""" """
from util.json_request import JsonResponse
import json import json
from courseware import models
from django.db.models import Count from django.db.models import Count
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from opaque_keys.edx.locations import Location
from courseware import models
from instructor_analytics.csvs import create_csv_response
from util.json_request import JsonResponse
from xmodule.modulestore.django import modulestore from xmodule.modulestore.django import modulestore
from xmodule.modulestore.inheritance import own_metadata from xmodule.modulestore.inheritance import own_metadata
from instructor_analytics.csvs import create_csv_response
from opaque_keys.edx.locations import Location
# Used to limit the length of list displayed to the screen. # Used to limit the length of list displayed to the screen.
MAX_SCREEN_LIST_LENGTH = 250 MAX_SCREEN_LIST_LENGTH = 250
......
...@@ -10,19 +10,23 @@ from mock import patch ...@@ -10,19 +10,23 @@ from mock import patch
from nose.plugins.attrib import attr from nose.plugins.attrib import attr
from capa.tests.response_xml_factory import StringResponseXMLFactory from capa.tests.response_xml_factory import StringResponseXMLFactory
from courseware.tests.factories import StudentModuleFactory
from student.tests.factories import UserFactory, CourseEnrollmentFactory, AdminFactory
from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory
from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase
from class_dashboard.dashboard_data import ( from class_dashboard.dashboard_data import (
get_problem_grade_distribution, get_sequential_open_distrib, get_array_section_has_problem,
get_problem_set_grade_distrib, get_d3_problem_grade_distrib, get_d3_problem_grade_distrib,
get_d3_sequential_open_distrib, get_d3_section_grade_distrib, get_d3_section_grade_distrib,
get_section_display_name, get_array_section_has_problem, get_d3_sequential_open_distrib,
get_students_opened_subsection, get_students_problem_grades, get_problem_grade_distribution,
get_problem_set_grade_distrib,
get_section_display_name,
get_sequential_open_distrib,
get_students_opened_subsection,
get_students_problem_grades
) )
from class_dashboard.views import has_instructor_access_for_class from class_dashboard.views import has_instructor_access_for_class
from courseware.tests.factories import StudentModuleFactory
from student.tests.factories import AdminFactory, CourseEnrollmentFactory, UserFactory
from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory
USER_COUNT = 11 USER_COUNT = 11
......
...@@ -6,11 +6,11 @@ import json ...@@ -6,11 +6,11 @@ import json
from django.test.client import RequestFactory from django.test.client import RequestFactory
from mock import patch from mock import patch
from nose.plugins.attrib import attr from nose.plugins.attrib import attr
from xmodule.modulestore.tests.factories import CourseFactory
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from class_dashboard import views from class_dashboard import views
from student.tests.factories import AdminFactory from student.tests.factories import AdminFactory
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory
@attr(shard=1) @attr(shard=1)
......
...@@ -2,8 +2,9 @@ ...@@ -2,8 +2,9 @@
Class Dashboard API endpoint urls. Class Dashboard API endpoint urls.
""" """
from django.conf.urls import patterns, url
from django.conf import settings from django.conf import settings
from django.conf.urls import patterns, url
COURSE_ID_PATTERN = settings.COURSE_ID_PATTERN COURSE_ID_PATTERN = settings.COURSE_ID_PATTERN
urlpatterns = patterns( urlpatterns = patterns(
......
...@@ -2,16 +2,15 @@ ...@@ -2,16 +2,15 @@
Handles requests for data, returning a json Handles requests for data, returning a json
""" """
import logging
import json import json
import logging
from django.http import HttpResponse from django.http import HttpResponse
from opaque_keys.edx.locations import SlashSeparatedCourseKey from opaque_keys.edx.locations import SlashSeparatedCourseKey
from courseware.courses import get_course_overview_with_access
from courseware.access import has_access
from class_dashboard import dashboard_data from class_dashboard import dashboard_data
from courseware.access import has_access
from courseware.courses import get_course_overview_with_access
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
......
""" Admin site bindings for commerce app. """ """ Admin site bindings for commerce app. """
from config_models.admin import ConfigurationModelAdmin
from django.contrib import admin from django.contrib import admin
from commerce.models import CommerceConfiguration from commerce.models import CommerceConfiguration
from config_models.admin import ConfigurationModelAdmin
admin.site.register(CommerceConfiguration, ConfigurationModelAdmin) admin.site.register(CommerceConfiguration, ConfigurationModelAdmin)
""" API URLs. """ """ API URLs. """
from django.conf.urls import patterns, url, include from django.conf.urls import include, patterns, url
urlpatterns = patterns( urlpatterns = patterns(
'', '',
......
""" Commerce API v0 view tests. """ """ Commerce API v0 view tests. """
from datetime import datetime, timedelta
import json
import itertools import itertools
import json
from datetime import datetime, timedelta
from uuid import uuid4 from uuid import uuid4
import httpretty
import ddt import ddt
import httpretty
import mock
import pytz
from django.conf import settings from django.conf import settings
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.test import TestCase from django.test import TestCase
from django.test.utils import override_settings from django.test.utils import override_settings
import mock from edx_rest_api_client import exceptions
from nose.plugins.attrib import attr from nose.plugins.attrib import attr
import pytz
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory
from commerce.api.v0.views import SAILTHRU_CAMPAIGN_COOKIE
from commerce.constants import Messages from commerce.constants import Messages
from commerce.tests import TEST_BASKET_ID, TEST_ORDER_NUMBER, TEST_PAYMENT_DATA from commerce.tests import TEST_BASKET_ID, TEST_ORDER_NUMBER, TEST_PAYMENT_DATA
from commerce.tests.mocks import mock_basket_order, mock_create_basket from commerce.tests.mocks import mock_basket_order, mock_create_basket
from commerce.tests.test_views import UserMixin from commerce.tests.test_views import UserMixin
from course_modes.models import CourseMode from course_modes.models import CourseMode
from edx_rest_api_client import exceptions
from openedx.core.djangoapps.embargo.test_utils import restrict_course
from enrollment.api import get_enrollment from enrollment.api import get_enrollment
from openedx.core.djangoapps.embargo.test_utils import restrict_course
from openedx.core.lib.django_test_client_utils import get_absolute_url from openedx.core.lib.django_test_client_utils import get_absolute_url
from student.models import CourseEnrollment from student.models import CourseEnrollment
from student.tests.factories import CourseModeFactory from student.tests.factories import CourseModeFactory
from student.tests.tests import EnrollmentEventTestMixin from student.tests.tests import EnrollmentEventTestMixin
from xmodule.modulestore.django import modulestore from xmodule.modulestore.django import modulestore
from commerce.api.v0.views import SAILTHRU_CAMPAIGN_COOKIE from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory
UTM_COOKIE_NAME = 'edx.test.utm' UTM_COOKIE_NAME = 'edx.test.utm'
UTM_COOKIE_CONTENTS = { UTM_COOKIE_CONTENTS = {
......
""" API v0 URLs. """ """ API v0 URLs. """
from django.conf.urls import patterns, url, include from django.conf.urls import include, patterns, url
from commerce.api.v0 import views from commerce.api.v0 import views
BASKET_URLS = patterns( BASKET_URLS = patterns(
'', '',
url(r'^$', views.BasketsView.as_view(), name='create'), url(r'^$', views.BasketsView.as_view(), name='create'),
......
""" API v0 views. """ """ API v0 views. """
import logging import logging
import requests
import requests
from edx_rest_api_client import exceptions from edx_rest_api_client import exceptions
from opaque_keys import InvalidKeyError from opaque_keys import InvalidKeyError
from opaque_keys.edx.keys import CourseKey from opaque_keys.edx.keys import CourseKey
...@@ -15,17 +15,16 @@ from commerce.exceptions import InvalidResponseError ...@@ -15,17 +15,16 @@ from commerce.exceptions import InvalidResponseError
from commerce.http import DetailResponse, InternalRequestErrorResponse from commerce.http import DetailResponse, InternalRequestErrorResponse
from course_modes.models import CourseMode from course_modes.models import CourseMode
from courseware import courses from courseware import courses
from openedx.core.djangoapps.embargo import api as embargo_api
from enrollment.api import add_enrollment from enrollment.api import add_enrollment
from enrollment.views import EnrollmentCrossDomainSessionAuth from enrollment.views import EnrollmentCrossDomainSessionAuth
from openedx.core.djangoapps.commerce.utils import ecommerce_api_client from openedx.core.djangoapps.commerce.utils import ecommerce_api_client
from openedx.core.djangoapps.embargo import api as embargo_api
from openedx.core.djangoapps.user_api.preferences.api import update_email_opt_in from openedx.core.djangoapps.user_api.preferences.api import update_email_opt_in
from openedx.core.lib.api.authentication import OAuth2AuthenticationAllowInactiveUser from openedx.core.lib.api.authentication import OAuth2AuthenticationAllowInactiveUser
from openedx.core.lib.log_utils import audit_log from openedx.core.lib.log_utils import audit_log
from student.models import CourseEnrollment, RegistrationCookieConfiguration from student.models import CourseEnrollment, RegistrationCookieConfiguration
from util.json_request import JsonResponse from util.json_request import JsonResponse
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
SAILTHRU_CAMPAIGN_COOKIE = 'sailthru_bid' SAILTHRU_CAMPAIGN_COOKIE = 'sailthru_bid'
......
""" API v1 models. """ """ API v1 models. """
import logging
from itertools import groupby from itertools import groupby
import logging
from django.db import transaction from django.db import transaction
from opaque_keys import InvalidKeyError from opaque_keys import InvalidKeyError
from opaque_keys.edx.keys import CourseKey from opaque_keys.edx.keys import CourseKey
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
from course_modes.models import CourseMode from course_modes.models import CourseMode
from lms.djangoapps.verify_student.models import VerificationDeadline from lms.djangoapps.verify_student.models import VerificationDeadline
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
......
...@@ -3,14 +3,12 @@ from datetime import datetime ...@@ -3,14 +3,12 @@ from datetime import datetime
import pytz import pytz
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from opaque_keys import InvalidKeyError from opaque_keys import InvalidKeyError
from opaque_keys.edx.keys import CourseKey from opaque_keys.edx.keys import CourseKey
from rest_framework import serializers from rest_framework import serializers
from commerce.api.v1.models import Course from commerce.api.v1.models import Course
from course_modes.models import CourseMode from course_modes.models import CourseMode
from xmodule.modulestore.django import modulestore from xmodule.modulestore.django import modulestore
......
""" Commerce API v1 view tests. """ """ Commerce API v1 view tests. """
from datetime import datetime, timedelta
import itertools import itertools
import json import json
from datetime import datetime, timedelta
import ddt import ddt
import pytz
from django.conf import settings from django.conf import settings
from django.contrib.auth.models import Permission from django.contrib.auth.models import Permission
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
...@@ -12,16 +13,15 @@ from django.test.utils import override_settings ...@@ -12,16 +13,15 @@ from django.test.utils import override_settings
from edx_rest_api_client import exceptions from edx_rest_api_client import exceptions
from flaky import flaky from flaky import flaky
from nose.plugins.attrib import attr from nose.plugins.attrib import attr
import pytz
from rest_framework.utils.encoders import JSONEncoder from rest_framework.utils.encoders import JSONEncoder
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory
from commerce.tests.mocks import mock_order_endpoint from commerce.tests.mocks import mock_order_endpoint
from commerce.tests.test_views import UserMixin from commerce.tests.test_views import UserMixin
from course_modes.models import CourseMode from course_modes.models import CourseMode
from student.tests.factories import UserFactory
from lms.djangoapps.verify_student.models import VerificationDeadline from lms.djangoapps.verify_student.models import VerificationDeadline
from student.tests.factories import UserFactory
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory
PASSWORD = 'test' PASSWORD = 'test'
JSON_CONTENT_TYPE = 'application/json' JSON_CONTENT_TYPE = 'application/json'
......
""" API v1 URLs. """ """ API v1 URLs. """
from django.conf import settings from django.conf import settings
from django.conf.urls import patterns, url, include from django.conf.urls import include, patterns, url
from commerce.api.v1 import views from commerce.api.v1 import views
......
...@@ -5,7 +5,7 @@ from django.http import Http404 ...@@ -5,7 +5,7 @@ from django.http import Http404
from edx_rest_api_client import exceptions from edx_rest_api_client import exceptions
from edx_rest_framework_extensions.authentication import JwtAuthentication from edx_rest_framework_extensions.authentication import JwtAuthentication
from rest_framework.authentication import SessionAuthentication from rest_framework.authentication import SessionAuthentication
from rest_framework.generics import RetrieveUpdateAPIView, ListAPIView from rest_framework.generics import ListAPIView, RetrieveUpdateAPIView
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated
from rest_framework.views import APIView from rest_framework.views import APIView
from rest_framework_oauth.authentication import OAuth2Authentication from rest_framework_oauth.authentication import OAuth2Authentication
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment