Reorder LMS imports using isort
This commit is contained in:
@@ -1,4 +0,0 @@
|
||||
[settings]
|
||||
indent=' '
|
||||
line_length=120
|
||||
multi_line_output=3
|
||||
@@ -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
|
||||
"""
|
||||
from __future__ import absolute_import
|
||||
|
||||
import os
|
||||
|
||||
from celery import Celery
|
||||
from django.conf import settings
|
||||
|
||||
from openedx.core.lib.celery.routers import AlternateEnvironmentRouter
|
||||
|
||||
# set the default Django settings module for the 'celery' program.
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
"""
|
||||
Admin registration for Badge Models
|
||||
"""
|
||||
from django.contrib import admin
|
||||
from badges.models import CourseCompleteImageConfiguration, CourseEventBadgesConfiguration, BadgeClass
|
||||
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(BadgeClass)
|
||||
|
||||
@@ -3,7 +3,7 @@ Serializers for Badges
|
||||
"""
|
||||
from rest_framework import serializers
|
||||
|
||||
from badges.models import BadgeClass, BadgeAssertion
|
||||
from badges.models import BadgeAssertion, BadgeClass
|
||||
|
||||
|
||||
class BadgeClassSerializer(serializers.ModelSerializer):
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
"""
|
||||
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.test.utils import override_settings
|
||||
from nose.plugins.attrib import attr
|
||||
|
||||
@@ -6,14 +6,14 @@ from opaque_keys.edx.keys import CourseKey
|
||||
from rest_framework import generics
|
||||
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.xmodule_django.models import CourseKeyField
|
||||
from openedx.core.lib.api.authentication import (
|
||||
OAuth2AuthenticationAllowInactiveUser,
|
||||
SessionAuthenticationAllowInactiveUser
|
||||
)
|
||||
from openedx.core.djangoapps.xmodule_django.models import CourseKeyField
|
||||
|
||||
from badges.models import BadgeAssertion
|
||||
from .serializers import BadgeAssertionSerializer
|
||||
|
||||
|
||||
|
||||
@@ -12,9 +12,8 @@ from lazy import lazy
|
||||
from requests.packages.urllib3.exceptions import HTTPError
|
||||
|
||||
from badges.backends.base import BadgeBackend
|
||||
from eventtracking import tracker
|
||||
|
||||
from badges.models import BadgeAssertion
|
||||
from eventtracking import tracker
|
||||
|
||||
MAX_SLUG_LENGTH = 255
|
||||
LOGGER = logging.getLogger(__name__)
|
||||
|
||||
@@ -7,13 +7,13 @@ import ddt
|
||||
from django.db.models.fields.files import ImageFieldFile
|
||||
from django.test.utils import override_settings
|
||||
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.models import BadgeAssertion
|
||||
from badges.tests.factories import BadgeClassFactory
|
||||
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 xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
||||
from xmodule.modulestore.tests.factories import CourseFactory
|
||||
|
||||
@@ -8,8 +8,8 @@ from django.core.urlresolvers import reverse
|
||||
from django.template.defaultfilters import slugify
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from badges.models import CourseCompleteImageConfiguration, BadgeClass, BadgeAssertion
|
||||
from badges.utils import site_prefix, requires_badges_enabled
|
||||
from badges.models import BadgeAssertion, BadgeClass, CourseCompleteImageConfiguration
|
||||
from badges.utils import requires_badges_enabled, site_prefix
|
||||
from xmodule.modulestore.django import modulestore
|
||||
|
||||
LOGGER = logging.getLogger(__name__)
|
||||
|
||||
@@ -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.
|
||||
"""
|
||||
|
||||
from badges.models import CourseEventBadgesConfiguration, BadgeClass
|
||||
from badges.models import BadgeClass, CourseEventBadgesConfiguration
|
||||
from badges.utils import requires_badges_enabled
|
||||
|
||||
|
||||
|
||||
@@ -3,11 +3,10 @@ Tests for the course completion helper functions.
|
||||
"""
|
||||
from datetime import datetime
|
||||
|
||||
from student.tests.factories import UserFactory
|
||||
from xmodule.modulestore.tests.factories import CourseFactory
|
||||
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
||||
|
||||
from badges.events import course_complete
|
||||
from student.tests.factories import UserFactory
|
||||
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
||||
from xmodule.modulestore.tests.factories import CourseFactory
|
||||
|
||||
|
||||
class CourseCompleteTestCase(ModuleStoreTestCase):
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
"""
|
||||
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 mock import patch
|
||||
|
||||
from django.conf import settings
|
||||
|
||||
from badges.tests.factories import RandomBadgeClassFactory, CourseEventBadgesConfigurationFactory
|
||||
from certificates.models import GeneratedCertificate, CertificateStatuses
|
||||
from badges.tests.factories import CourseEventBadgesConfigurationFactory, RandomBadgeClassFactory
|
||||
from certificates.models import CertificateStatuses, GeneratedCertificate
|
||||
from student.models import CourseEnrollment
|
||||
from student.tests.factories import UserFactory
|
||||
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
||||
|
||||
@@ -3,6 +3,7 @@ Database models for the badges app
|
||||
"""
|
||||
from importlib import import_module
|
||||
|
||||
from config_models.models import ConfigurationModel
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import User
|
||||
from django.core.exceptions import ValidationError
|
||||
@@ -15,9 +16,8 @@ from opaque_keys import InvalidKeyError
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
|
||||
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 xmodule.modulestore.django import modulestore
|
||||
|
||||
|
||||
def validate_badge_image(image):
|
||||
|
||||
@@ -8,7 +8,7 @@ from django.core.files.base import ContentFile
|
||||
from factory import DjangoModelFactory
|
||||
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
|
||||
|
||||
|
||||
|
||||
@@ -7,19 +7,21 @@ from django.core.files.storage import default_storage
|
||||
from django.db.utils import IntegrityError
|
||||
from django.test import TestCase
|
||||
from django.test.utils import override_settings
|
||||
from mock import patch, Mock
|
||||
from mock import Mock, patch
|
||||
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 (
|
||||
CourseCompleteImageConfiguration, validate_badge_image, BadgeClass, BadgeAssertion,
|
||||
CourseBadgesDisabledError
|
||||
BadgeAssertion,
|
||||
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 student.tests.factories import UserFactory
|
||||
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
||||
from xmodule.modulestore.tests.factories import CourseFactory
|
||||
|
||||
|
||||
def get_image(name):
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
"""Django admin pages for branding configuration. """
|
||||
from django.contrib import admin
|
||||
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(BrandingApiConfig, ConfigurationModelAdmin)
|
||||
|
||||
@@ -16,14 +16,13 @@ import logging
|
||||
import urlparse
|
||||
|
||||
from django.conf import settings
|
||||
from django.utils.translation import ugettext as _
|
||||
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 edxmako.shortcuts import marketing_link
|
||||
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
|
||||
|
||||
|
||||
log = logging.getLogger("edx.footer")
|
||||
EMPTY_URL = '#'
|
||||
|
||||
|
||||
@@ -6,9 +6,10 @@ Includes:
|
||||
use Branding.
|
||||
"""
|
||||
import json
|
||||
from django.db.models import TextField
|
||||
from django.core.exceptions import ValidationError
|
||||
|
||||
from config_models.models import ConfigurationModel
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.db.models import TextField
|
||||
|
||||
|
||||
class BrandingInfoConfig(ConfigurationModel):
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
"""Tests of Branding API """
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.test import TestCase
|
||||
|
||||
import mock
|
||||
from branding.api import get_logo_url, get_footer
|
||||
from django.test import TestCase
|
||||
from django.test.utils import override_settings
|
||||
|
||||
from branding.api import get_footer, get_logo_url
|
||||
|
||||
|
||||
class TestHeader(TestCase):
|
||||
"""Test API end-point for retrieving the header. """
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
"""
|
||||
Tests for the Video Branding configuration.
|
||||
"""
|
||||
from django.test import TestCase
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.test import TestCase
|
||||
from nose.plugins.attrib import attr
|
||||
|
||||
from branding.models import BrandingInfoConfig
|
||||
|
||||
@@ -8,22 +8,21 @@ from django.conf import settings
|
||||
from django.contrib.auth.models import AnonymousUser
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.test.utils import override_settings
|
||||
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 pytz import UTC
|
||||
from edxmako.shortcuts import render_to_response
|
||||
|
||||
from branding.views import index
|
||||
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 util.milestones_helpers import set_prerequisite_courses
|
||||
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
||||
from xmodule.modulestore.tests.factories import CourseFactory
|
||||
|
||||
|
||||
FEATURES_WITH_STARTDATE = settings.FEATURES.copy()
|
||||
FEATURES_WITH_STARTDATE['DISABLE_START_DATES'] = False
|
||||
FEATURES_WO_STARTDATE = settings.FEATURES.copy()
|
||||
|
||||
@@ -2,14 +2,15 @@
|
||||
"""Tests of Branding API views. """
|
||||
import json
|
||||
import urllib
|
||||
from django.test import TestCase
|
||||
|
||||
import ddt
|
||||
import mock
|
||||
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.conf import settings
|
||||
from django.test import TestCase
|
||||
|
||||
import mock
|
||||
import ddt
|
||||
from config_models.models import cache
|
||||
from branding.models import BrandingApiConfig
|
||||
from openedx.core.djangoapps.dark_lang.models import DarkLangConfig
|
||||
from openedx.core.djangoapps.lang_pref.api import released_languages
|
||||
|
||||
@@ -6,22 +6,21 @@ from django.conf import settings
|
||||
from django.contrib.staticfiles.storage import staticfiles_storage
|
||||
from django.core.cache import cache
|
||||
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.utils import translation
|
||||
from django.utils.translation.trans_real import get_supported_language_variant
|
||||
from django.views.decorators.cache import cache_control
|
||||
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 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.site_configuration import helpers as configuration_helpers
|
||||
from util.cache import cache_if_anonymous
|
||||
from util.json_request import JsonResponse
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
"""
|
||||
Django admin page for bulk email models
|
||||
"""
|
||||
from config_models.admin import ConfigurationModelAdmin
|
||||
from django.contrib import admin
|
||||
|
||||
from config_models.admin import ConfigurationModelAdmin
|
||||
|
||||
from bulk_email.models import CourseEmail, Optout, CourseEmailTemplate, CourseAuthorization, BulkEmailFlag
|
||||
from bulk_email.forms import CourseEmailTemplateForm, CourseAuthorizationAdminForm
|
||||
from bulk_email.forms import CourseAuthorizationAdminForm, CourseEmailTemplateForm
|
||||
from bulk_email.models import BulkEmailFlag, CourseAuthorization, CourseEmail, CourseEmailTemplate, Optout
|
||||
|
||||
|
||||
class CourseEmailAdmin(admin.ModelAdmin):
|
||||
|
||||
@@ -5,14 +5,13 @@ import logging
|
||||
|
||||
from django import forms
|
||||
from django.core.exceptions import ValidationError
|
||||
|
||||
from bulk_email.models import CourseEmailTemplate, COURSE_EMAIL_MESSAGE_BODY_TAG, CourseAuthorization
|
||||
|
||||
from opaque_keys import InvalidKeyError
|
||||
from xmodule.modulestore.django import modulestore
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
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__)
|
||||
|
||||
|
||||
|
||||
@@ -2,24 +2,21 @@
|
||||
Models for bulk email
|
||||
"""
|
||||
import logging
|
||||
import markupsafe
|
||||
|
||||
import markupsafe
|
||||
from config_models.models import ConfigurationModel
|
||||
from django.contrib.auth.models import User
|
||||
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 enrollment.api import validate_course_mode
|
||||
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.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.query import use_read_replica_if_available
|
||||
|
||||
|
||||
@@ -3,52 +3,51 @@
|
||||
This module contains celery task functions for handling the sending of bulk email
|
||||
to a course.
|
||||
"""
|
||||
from collections import Counter
|
||||
import json
|
||||
import logging
|
||||
import random
|
||||
import re
|
||||
from collections import Counter
|
||||
from smtplib import SMTPConnectError, SMTPDataError, SMTPException, SMTPServerDisconnected
|
||||
from time import sleep
|
||||
|
||||
import dogstats_wrapper as dog_stats_api
|
||||
from smtplib import SMTPServerDisconnected, SMTPDataError, SMTPConnectError, SMTPException
|
||||
from boto.ses.exceptions import (
|
||||
SESAddressNotVerifiedError,
|
||||
SESIdentityNotVerifiedError,
|
||||
SESDomainNotConfirmedError,
|
||||
SESAddressBlacklistedError,
|
||||
SESDailyQuotaExceededError,
|
||||
SESMaxSendingRateExceededError,
|
||||
SESDomainEndsWithDotError,
|
||||
SESLocalAddressCharacterError,
|
||||
SESIllegalAddressError,
|
||||
)
|
||||
from boto.exception import AWSConnectionError
|
||||
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 boto.ses.exceptions import (
|
||||
SESAddressBlacklistedError,
|
||||
SESAddressNotVerifiedError,
|
||||
SESDailyQuotaExceededError,
|
||||
SESDomainEndsWithDotError,
|
||||
SESDomainNotConfirmedError,
|
||||
SESIdentityNotVerifiedError,
|
||||
SESIllegalAddressError,
|
||||
SESLocalAddressCharacterError,
|
||||
SESMaxSendingRateExceededError
|
||||
)
|
||||
from celery import current_task, task # pylint: disable=no-name-in-module
|
||||
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.contrib.auth.models import User
|
||||
from django.core.mail import EmailMultiAlternatives, get_connection
|
||||
from django.core.mail.message import forbid_multi_line_headers
|
||||
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 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.subtasks import (
|
||||
SubtaskStatus,
|
||||
queue_subtasks_for_query,
|
||||
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.lib.courses import course_image_url
|
||||
from util.date_utils import get_default_time_display
|
||||
|
||||
log = logging.getLogger('edx.celery.task')
|
||||
|
||||
|
||||
@@ -3,18 +3,18 @@
|
||||
Unit tests for student optouts from course email
|
||||
"""
|
||||
import json
|
||||
from mock import patch, Mock
|
||||
from nose.plugins.attrib import attr
|
||||
|
||||
from django.core import mail
|
||||
from django.core.management import call_command
|
||||
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.tests.factories import AdminFactory, CourseEnrollmentFactory, UserFactory
|
||||
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
||||
from xmodule.modulestore.tests.factories import CourseFactory
|
||||
from bulk_email.models import BulkEmailFlag
|
||||
|
||||
|
||||
@attr(shard=1)
|
||||
|
||||
@@ -3,31 +3,31 @@
|
||||
Unit tests for sending course email
|
||||
"""
|
||||
import json
|
||||
from markupsafe import escape
|
||||
from mock import patch, Mock
|
||||
from nose.plugins.attrib import attr
|
||||
import os
|
||||
from unittest import skipIf
|
||||
import ddt
|
||||
|
||||
import ddt
|
||||
from django.conf import settings
|
||||
from django.core import mail
|
||||
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.urlresolvers import reverse
|
||||
from django.test.utils import override_settings
|
||||
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.tasks import _get_source_address, _get_course_email_context
|
||||
from openedx.core.djangoapps.course_groups.models import CourseCohort
|
||||
from openedx.core.djangoapps.course_groups.cohorts import add_user_to_cohort
|
||||
from bulk_email.models import BulkEmailFlag, Optout
|
||||
from bulk_email.tasks import _get_course_email_context, _get_source_address
|
||||
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 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.roles import CourseStaffRole
|
||||
from student.tests.factories import CourseEnrollmentFactory, UserFactory
|
||||
from xmodule.modulestore import ModuleStoreEnum
|
||||
from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase
|
||||
|
||||
@@ -2,32 +2,32 @@
|
||||
"""
|
||||
Unit tests for handling email sending errors
|
||||
"""
|
||||
import json
|
||||
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
|
||||
from celery.states import RETRY, SUCCESS # pylint: disable=no-name-in-module, import-error
|
||||
from django.conf import settings
|
||||
from django.core.management import call_command
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.db import DatabaseError
|
||||
import json
|
||||
from mock import patch, Mock
|
||||
from mock import Mock, patch
|
||||
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 lms.djangoapps.instructor_task.exceptions import DuplicateTaskException
|
||||
from lms.djangoapps.instructor_task.models import InstructorTask
|
||||
from lms.djangoapps.instructor_task.subtasks import (
|
||||
initialize_subtask_info,
|
||||
MAX_DATABASE_LOCK_RETRIES,
|
||||
SubtaskStatus,
|
||||
check_subtask_is_valid,
|
||||
update_subtask_status,
|
||||
MAX_DATABASE_LOCK_RETRIES,
|
||||
initialize_subtask_info,
|
||||
update_subtask_status
|
||||
)
|
||||
from opaque_keys.edx.locations import SlashSeparatedCourseKey
|
||||
from student.tests.factories import UserFactory, AdminFactory, CourseEnrollmentFactory
|
||||
from student.tests.factories import AdminFactory, CourseEnrollmentFactory, UserFactory
|
||||
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
||||
from xmodule.modulestore.tests.factories import CourseFactory
|
||||
|
||||
|
||||
@@ -4,10 +4,10 @@ Unit tests for bulk-email-related forms.
|
||||
"""
|
||||
|
||||
from nose.plugins.attrib import attr
|
||||
|
||||
from bulk_email.models import CourseEmailTemplate, BulkEmailFlag
|
||||
from bulk_email.forms import CourseAuthorizationAdminForm, CourseEmailTemplateForm
|
||||
from opaque_keys.edx.locations import SlashSeparatedCourseKey
|
||||
|
||||
from bulk_email.forms import CourseAuthorizationAdminForm, CourseEmailTemplateForm
|
||||
from bulk_email.models import BulkEmailFlag, CourseEmailTemplate
|
||||
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
||||
from xmodule.modulestore.tests.factories import CourseFactory
|
||||
|
||||
|
||||
@@ -4,27 +4,27 @@ Unit tests for bulk-email-related models.
|
||||
import datetime
|
||||
|
||||
import ddt
|
||||
from bulk_email.models import (
|
||||
CourseEmail,
|
||||
SEND_TO_COHORT,
|
||||
SEND_TO_TRACK,
|
||||
SEND_TO_STAFF,
|
||||
CourseEmailTemplate,
|
||||
CourseAuthorization,
|
||||
BulkEmailFlag
|
||||
)
|
||||
from course_modes.models import CourseMode
|
||||
from django.core.management import call_command
|
||||
from django.test import TestCase
|
||||
from mock import patch, Mock
|
||||
from mock import Mock, patch
|
||||
from nose.plugins.attrib import attr
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
|
||||
from bulk_email.models import (
|
||||
SEND_TO_COHORT,
|
||||
SEND_TO_STAFF,
|
||||
SEND_TO_TRACK,
|
||||
BulkEmailFlag,
|
||||
CourseAuthorization,
|
||||
CourseEmail,
|
||||
CourseEmailTemplate
|
||||
)
|
||||
from course_modes.models import CourseMode
|
||||
from openedx.core.djangoapps.course_groups.models import CourseCohort
|
||||
from student.tests.factories import UserFactory
|
||||
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
||||
from xmodule.modulestore.tests.factories import CourseFactory
|
||||
|
||||
from openedx.core.djangoapps.course_groups.models import CourseCohort
|
||||
|
||||
|
||||
@ddt.ddt
|
||||
@attr(shard=1)
|
||||
|
||||
@@ -7,41 +7,38 @@ paths actually work.
|
||||
|
||||
"""
|
||||
import json
|
||||
from itertools import chain, cycle, repeat
|
||||
from smtplib import SMTPAuthenticationError, SMTPConnectError, SMTPDataError, SMTPServerDisconnected
|
||||
from uuid import uuid4
|
||||
from itertools import cycle, chain, repeat
|
||||
from mock import patch, Mock
|
||||
from nose.plugins.attrib import attr
|
||||
from smtplib import SMTPServerDisconnected, SMTPDataError, SMTPConnectError, SMTPAuthenticationError
|
||||
from boto.ses.exceptions import (
|
||||
SESAddressNotVerifiedError,
|
||||
SESIdentityNotVerifiedError,
|
||||
SESDomainNotConfirmedError,
|
||||
SESAddressBlacklistedError,
|
||||
SESDailyQuotaExceededError,
|
||||
SESMaxSendingRateExceededError,
|
||||
SESDomainEndsWithDotError,
|
||||
SESLocalAddressCharacterError,
|
||||
SESIllegalAddressError,
|
||||
)
|
||||
|
||||
from boto.exception import AWSConnectionError
|
||||
|
||||
from celery.states import SUCCESS, FAILURE # pylint: disable=no-name-in-module, import-error
|
||||
|
||||
from boto.ses.exceptions import (
|
||||
SESAddressBlacklistedError,
|
||||
SESAddressNotVerifiedError,
|
||||
SESDailyQuotaExceededError,
|
||||
SESDomainEndsWithDotError,
|
||||
SESDomainNotConfirmedError,
|
||||
SESIdentityNotVerifiedError,
|
||||
SESIllegalAddressError,
|
||||
SESLocalAddressCharacterError,
|
||||
SESMaxSendingRateExceededError
|
||||
)
|
||||
from celery.states import FAILURE, SUCCESS # pylint: disable=no-name-in-module, import-error
|
||||
from django.conf import settings
|
||||
from django.core.management import call_command
|
||||
|
||||
from xmodule.modulestore.tests.factories import CourseFactory
|
||||
|
||||
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 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.tests.test_base import InstructorTaskCourseTestCase
|
||||
from lms.djangoapps.instructor_task.tests.factories import InstructorTaskFactory
|
||||
from mock import Mock, patch
|
||||
from nose.plugins.attrib import attr
|
||||
from opaque_keys.edx.locations import SlashSeparatedCourseKey
|
||||
|
||||
from bulk_email.models import SEND_TO_LEARNERS, SEND_TO_MYSELF, SEND_TO_STAFF, CourseEmail, Optout
|
||||
from bulk_email.tasks import _get_course_email_context
|
||||
from lms.djangoapps.instructor_task.models import InstructorTask
|
||||
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.test_base import InstructorTaskCourseTestCase
|
||||
from xmodule.modulestore.tests.factories import CourseFactory
|
||||
|
||||
|
||||
class TestTaskFailure(Exception):
|
||||
"""Dummy exception used for unit tests."""
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
""" CCX API URLs. """
|
||||
from django.conf.urls import patterns, url, include
|
||||
from django.conf.urls import include, patterns, url
|
||||
|
||||
urlpatterns = patterns(
|
||||
'',
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
""" CCX API v0 Serializers. """
|
||||
|
||||
from ccx_keys.locator import CCXLocator
|
||||
from rest_framework import serializers
|
||||
|
||||
from lms.djangoapps.ccx.models import CustomCourseForEdX
|
||||
from ccx_keys.locator import CCXLocator
|
||||
|
||||
|
||||
class CCXCourseSerializer(serializers.ModelSerializer):
|
||||
|
||||
@@ -3,7 +3,6 @@ Tests for the CCX REST APIs.
|
||||
"""
|
||||
import json
|
||||
import math
|
||||
import pytz
|
||||
import string
|
||||
import urllib
|
||||
import urlparse
|
||||
@@ -12,45 +11,31 @@ from itertools import izip
|
||||
|
||||
import ddt
|
||||
import mock
|
||||
import pytz
|
||||
from ccx_keys.locator import CCXLocator
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import User
|
||||
from django.core.urlresolvers import (
|
||||
reverse,
|
||||
resolve,
|
||||
Resolver404
|
||||
)
|
||||
from django.core.urlresolvers import Resolver404, resolve, reverse
|
||||
from nose.plugins.attrib import attr
|
||||
from oauth2_provider import models as dot_models
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
from provider.constants import CONFIDENTIAL
|
||||
from provider.oauth2.models import (
|
||||
Client,
|
||||
Grant,
|
||||
)
|
||||
from provider.oauth2.models import Client, Grant
|
||||
from rest_framework import status
|
||||
from rest_framework.test import APITestCase
|
||||
|
||||
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.models import CcxFieldOverride, CustomCourseForEdX
|
||||
from lms.djangoapps.ccx.overrides import override_field_for_ccx
|
||||
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 opaque_keys.edx.keys import CourseKey
|
||||
from student.roles import (
|
||||
CourseInstructorRole,
|
||||
CourseCcxCoachRole,
|
||||
CourseStaffRole,
|
||||
)
|
||||
from student.tests.factories import AdminFactory
|
||||
from lms.djangoapps.ccx.utils import get_course_chapters
|
||||
from lms.djangoapps.instructor.access import allow_access, list_with_level
|
||||
from lms.djangoapps.instructor.enrollment import enroll_email, get_email_params
|
||||
from student.models import CourseEnrollment
|
||||
from student.roles import CourseCcxCoachRole, CourseInstructorRole, CourseStaffRole
|
||||
from student.tests.factories import AdminFactory, UserFactory
|
||||
|
||||
USER_PASSWORD = 'test'
|
||||
AUTH_ATTRS = ('auth', 'auth_header_oauth2_provider')
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
""" CCX API v0 URLs. """
|
||||
|
||||
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
|
||||
|
||||
|
||||
@@ -3,45 +3,36 @@
|
||||
import datetime
|
||||
import json
|
||||
import logging
|
||||
import pytz
|
||||
|
||||
import pytz
|
||||
from ccx_keys.locator import CCXLocator
|
||||
from django.contrib.auth.models import User
|
||||
from django.db import transaction
|
||||
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.generics import GenericAPIView
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from rest_framework.response import Response
|
||||
|
||||
from ccx_keys.locator import CCXLocator
|
||||
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.overrides import (
|
||||
override_field_for_ccx,
|
||||
)
|
||||
from lms.djangoapps.ccx.overrides import override_field_for_ccx
|
||||
from lms.djangoapps.ccx.utils import (
|
||||
add_master_course_staff_to_ccx,
|
||||
assign_staff_role_to_ccx,
|
||||
is_email,
|
||||
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 .serializers import CCXCourseSerializer
|
||||
|
||||
|
||||
@@ -2,21 +2,21 @@
|
||||
Models for the custom course feature
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import json
|
||||
import logging
|
||||
from datetime import datetime
|
||||
|
||||
from ccx_keys.locator import CCXLocator
|
||||
from django.contrib.auth.models import User
|
||||
from django.db import models
|
||||
from pytz import utc
|
||||
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 xmodule.error_module import ErrorDescriptor
|
||||
from xmodule.modulestore.django import modulestore
|
||||
|
||||
|
||||
log = logging.getLogger("edx.ccx")
|
||||
|
||||
|
||||
|
||||
@@ -11,8 +11,10 @@ version that was passed in.
|
||||
"""
|
||||
from contextlib import contextmanager
|
||||
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
|
||||
|
||||
|
||||
|
||||
@@ -5,17 +5,14 @@ by the individual custom courses feature.
|
||||
import json
|
||||
import logging
|
||||
|
||||
from ccx_keys.locator import CCXBlockUsageLocator, CCXLocator
|
||||
from django.db import transaction
|
||||
from opaque_keys.edx.keys import CourseKey, UsageKey
|
||||
|
||||
import request_cache
|
||||
|
||||
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
|
||||
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
|
||||
@@ -5,9 +5,9 @@ Registers the CCX feature for the edX platform.
|
||||
from django.conf import settings
|
||||
from django.utils.translation import ugettext_noop
|
||||
|
||||
from xmodule.tabs import CourseTab
|
||||
from student.roles import CourseCcxCoachRole
|
||||
from courseware.access import has_access
|
||||
from student.roles import CourseCcxCoachRole
|
||||
from xmodule.tabs import CourseTab
|
||||
|
||||
|
||||
class CcxCourseTab(CourseTab):
|
||||
|
||||
@@ -2,16 +2,16 @@
|
||||
Asynchronous tasks for the CCX app.
|
||||
"""
|
||||
|
||||
from django.dispatch import receiver
|
||||
import logging
|
||||
|
||||
from ccx_keys.locator import CCXLocator
|
||||
from django.dispatch import receiver
|
||||
from opaque_keys import InvalidKeyError
|
||||
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 xmodule.modulestore.django import SignalHandler
|
||||
|
||||
log = logging.getLogger("edx.ccx")
|
||||
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
"""
|
||||
Dummy factories for tests
|
||||
"""
|
||||
from factory import SubFactory, Sequence
|
||||
from factory import Sequence, SubFactory
|
||||
from factory.django import DjangoModelFactory
|
||||
from student.tests.factories import UserFactory
|
||||
|
||||
from lms.djangoapps.ccx.models import CustomCourseForEdX
|
||||
from student.tests.factories import UserFactory
|
||||
|
||||
|
||||
class CcxFactory(DjangoModelFactory): # pylint: disable=missing-docstring
|
||||
|
||||
@@ -1,20 +1,17 @@
|
||||
"""
|
||||
Test the CCXModulestoreWrapper
|
||||
"""
|
||||
from collections import deque
|
||||
from ccx_keys.locator import CCXLocator
|
||||
import datetime
|
||||
from itertools import izip_longest, chain
|
||||
from collections import deque
|
||||
from itertools import chain, izip_longest
|
||||
|
||||
import pytz
|
||||
from student.tests.factories import AdminFactory
|
||||
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 ccx_keys.locator import CCXLocator
|
||||
|
||||
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):
|
||||
|
||||
@@ -2,33 +2,37 @@
|
||||
"""
|
||||
Performance tests for field overrides.
|
||||
"""
|
||||
import ddt
|
||||
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
|
||||
|
||||
import ddt
|
||||
import mock
|
||||
from ccx_keys.locator import CCXLocator
|
||||
from django.conf import settings
|
||||
from django.core.cache import caches
|
||||
from django.test.client import RequestFactory
|
||||
from django.test.utils import override_settings
|
||||
from nose.plugins.attrib import attr
|
||||
from nose.plugins.skip import SkipTest
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
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 student.models import CourseEnrollment
|
||||
from student.tests.factories import UserFactory
|
||||
from xblock.core import XBlock
|
||||
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase, \
|
||||
TEST_DATA_SPLIT_MODULESTORE, TEST_DATA_MONGO_MODULESTORE
|
||||
from xmodule.modulestore.tests.factories import check_mongo_calls, CourseFactory, check_sum_of_calls
|
||||
from xmodule.modulestore.tests.django_utils import (
|
||||
TEST_DATA_MONGO_MODULESTORE,
|
||||
TEST_DATA_SPLIT_MODULESTORE,
|
||||
ModuleStoreTestCase
|
||||
)
|
||||
from xmodule.modulestore.tests.factories import CourseFactory, check_mongo_calls, check_sum_of_calls
|
||||
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)
|
||||
|
||||
@@ -1,28 +1,20 @@
|
||||
"""
|
||||
tests for the models
|
||||
"""
|
||||
import ddt
|
||||
import json
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
import ddt
|
||||
from nose.plugins.attrib import attr
|
||||
from pytz import utc
|
||||
from student.roles import CourseCcxCoachRole
|
||||
from student.tests.factories import (
|
||||
AdminFactory,
|
||||
)
|
||||
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 student.roles import CourseCcxCoachRole
|
||||
from student.tests.factories import AdminFactory
|
||||
from xmodule.modulestore.tests.django_utils import TEST_DATA_SPLIT_MODULESTORE, ModuleStoreTestCase
|
||||
from xmodule.modulestore.tests.factories import CourseFactory, check_mongo_calls
|
||||
|
||||
from ..overrides import override_field_for_ccx
|
||||
from .factories import CcxFactory
|
||||
|
||||
|
||||
@ddt.ddt
|
||||
|
||||
@@ -3,28 +3,25 @@
|
||||
tests for overrides
|
||||
"""
|
||||
import datetime
|
||||
|
||||
import mock
|
||||
import pytz
|
||||
from ccx_keys.locator import CCXLocator
|
||||
from django.test.utils import override_settings
|
||||
from nose.plugins.attrib import attr
|
||||
|
||||
from ccx_keys.locator import CCXLocator
|
||||
from courseware.courses import get_course_by_id
|
||||
from courseware.field_overrides import OverrideFieldData
|
||||
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 request_cache.middleware import RequestCache
|
||||
from student.tests.factories import AdminFactory
|
||||
from xmodule.modulestore.tests.django_utils import (
|
||||
SharedModuleStoreTestCase,
|
||||
TEST_DATA_SPLIT_MODULESTORE)
|
||||
from xmodule.modulestore.tests.django_utils import TEST_DATA_SPLIT_MODULESTORE, SharedModuleStoreTestCase
|
||||
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)
|
||||
@override_settings(
|
||||
|
||||
@@ -2,24 +2,18 @@
|
||||
Tests for celery tasks defined in tasks module
|
||||
"""
|
||||
|
||||
from ccx_keys.locator import CCXLocator
|
||||
from mock_django import mock_signal_receiver
|
||||
|
||||
from lms.djangoapps.ccx.tests.factories import CcxFactory
|
||||
from student.roles import CourseCcxCoachRole
|
||||
from student.tests.factories import (
|
||||
AdminFactory,
|
||||
)
|
||||
from xmodule.modulestore.django import SignalHandler
|
||||
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
|
||||
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.tests.factories import AdminFactory
|
||||
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
|
||||
|
||||
|
||||
class TestSendCCXCoursePublished(ModuleStoreTestCase):
|
||||
|
||||
@@ -1,40 +1,25 @@
|
||||
"""
|
||||
test utils
|
||||
"""
|
||||
import mock
|
||||
import uuid
|
||||
from nose.plugins.attrib import attr
|
||||
from smtplib import SMTPException
|
||||
|
||||
import mock
|
||||
from ccx_keys.locator import CCXLocator
|
||||
from student.roles import (
|
||||
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 nose.plugins.attrib import attr
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
from xmodule.modulestore.django import modulestore
|
||||
|
||||
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.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)
|
||||
|
||||
@@ -4,78 +4,52 @@ test views
|
||||
import datetime
|
||||
import json
|
||||
import re
|
||||
import pytz
|
||||
import ddt
|
||||
import urlparse
|
||||
|
||||
import ddt
|
||||
import pytz
|
||||
from ccx_keys.locator import CCXLocator
|
||||
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 opaque_keys.edx.keys import CourseKey
|
||||
|
||||
from capa.tests.response_xml_factory import StringResponseXMLFactory
|
||||
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.helpers import LoginEnrollmentTestCase
|
||||
from courseware.tabs import get_course_tab_list
|
||||
from courseware.testutils import FieldOverrideTestMixin
|
||||
from django_comment_client.utils import has_forum_access
|
||||
from django_comment_common.models import FORUM_ROLE_ADMINISTRATOR
|
||||
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 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.overrides import get_override_for_ccx, override_field_for_ccx
|
||||
from lms.djangoapps.ccx.tests.factories import CcxFactory
|
||||
from lms.djangoapps.ccx.tests.utils import (
|
||||
CcxTestCase,
|
||||
flatten,
|
||||
)
|
||||
from lms.djangoapps.ccx.utils import (
|
||||
ccx_course,
|
||||
is_email,
|
||||
)
|
||||
from lms.djangoapps.ccx.tests.utils import CcxTestCase, flatten
|
||||
from lms.djangoapps.ccx.utils import ccx_course, is_email
|
||||
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.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):
|
||||
|
||||
@@ -2,30 +2,17 @@
|
||||
Test utils for CCX
|
||||
"""
|
||||
import datetime
|
||||
|
||||
import pytz
|
||||
|
||||
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.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):
|
||||
|
||||
@@ -3,7 +3,6 @@ URLs for the CCX Feature.
|
||||
"""
|
||||
from django.conf.urls import patterns, url
|
||||
|
||||
|
||||
urlpatterns = patterns(
|
||||
'',
|
||||
url(r'^ccx_coach$',
|
||||
|
||||
@@ -5,40 +5,27 @@ Does not include any access control, be sure to check access before calling.
|
||||
"""
|
||||
import datetime
|
||||
import logging
|
||||
import pytz
|
||||
from contextlib import contextmanager
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
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 smtplib import SMTPException
|
||||
|
||||
import pytz
|
||||
from django.contrib.auth.models import User
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.core.validators import validate_email
|
||||
from django.utils.translation import ugettext as _
|
||||
|
||||
from courseware.courses import get_course_by_id
|
||||
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.ccx.custom_exception import CCXUserValidationException
|
||||
from lms.djangoapps.ccx.models import CustomCourseForEdX
|
||||
from lms.djangoapps.ccx.overrides import get_override_for_ccx
|
||||
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.views.tools import get_student_from_identifier
|
||||
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
|
||||
from openedx.core.djangoapps.content.course_structures.models import CourseStructure
|
||||
from student.models import CourseEnrollment, CourseEnrollmentException
|
||||
from student.roles import (
|
||||
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
|
||||
from student.roles import CourseCcxCoachRole, CourseInstructorRole, CourseStaffRole
|
||||
|
||||
log = logging.getLogger("edx.ccx")
|
||||
|
||||
|
||||
@@ -6,66 +6,55 @@ import datetime
|
||||
import functools
|
||||
import json
|
||||
import logging
|
||||
import pytz
|
||||
|
||||
from copy import deepcopy
|
||||
from cStringIO import StringIO
|
||||
|
||||
import pytz
|
||||
from ccx_keys.locator import CCXLocator
|
||||
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.auth.models import User
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.db import transaction
|
||||
from django.http import Http404
|
||||
from django.http import Http404, HttpResponse, HttpResponseForbidden
|
||||
from django.shortcuts import redirect
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.views.decorators.cache import cache_control
|
||||
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.courses import get_course_by_id
|
||||
|
||||
from courseware.field_overrides import disable_overrides
|
||||
from django_comment_common.models import FORUM_ROLE_ADMINISTRATOR, assign_role
|
||||
from django_comment_common.utils import seed_permissions_roles
|
||||
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.overrides import (
|
||||
get_override_for_ccx,
|
||||
override_field_for_ccx,
|
||||
clear_ccx_field_info_from_ccx_map,
|
||||
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 (
|
||||
add_master_course_staff_to_ccx,
|
||||
assign_staff_role_to_ccx,
|
||||
ccx_course,
|
||||
ccx_students_enrolling_center,
|
||||
get_ccx_for_coach,
|
||||
get_ccx_by_ccx_id,
|
||||
get_ccx_creation_dict,
|
||||
get_ccx_for_coach,
|
||||
get_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__)
|
||||
TODAY = datetime.datetime.today # for patching in tests
|
||||
|
||||
@@ -1,18 +1,19 @@
|
||||
"""
|
||||
django admin pages for certificates models
|
||||
"""
|
||||
from django.contrib import admin
|
||||
from django import forms
|
||||
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 (
|
||||
CertificateGenerationConfiguration,
|
||||
CertificateGenerationCourseSetting,
|
||||
CertificateHtmlViewConfiguration,
|
||||
CertificateTemplate,
|
||||
CertificateTemplateAsset,
|
||||
GeneratedCertificate,
|
||||
GeneratedCertificate
|
||||
)
|
||||
from util.organizations_helpers import get_organizations
|
||||
|
||||
|
||||
class CertificateTemplateForm(forms.ModelForm):
|
||||
|
||||
@@ -8,16 +8,10 @@ import logging
|
||||
|
||||
from django.conf import settings
|
||||
from django.core.urlresolvers import reverse
|
||||
from eventtracking import tracker
|
||||
from opaque_keys import InvalidKeyError
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
|
||||
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 (
|
||||
CertificateGenerationConfiguration,
|
||||
CertificateGenerationCourseSetting,
|
||||
@@ -27,10 +21,14 @@ from certificates.models import (
|
||||
CertificateTemplateAsset,
|
||||
ExampleCertificateSet,
|
||||
GeneratedCertificate,
|
||||
certificate_status_for_student,
|
||||
certificate_status_for_student
|
||||
)
|
||||
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")
|
||||
MODES = GeneratedCertificate.MODES
|
||||
|
||||
@@ -1,9 +1,5 @@
|
||||
""" Certificates API URLs. """
|
||||
from django.conf.urls import (
|
||||
include,
|
||||
patterns,
|
||||
url,
|
||||
)
|
||||
from django.conf.urls import include, patterns, url
|
||||
|
||||
urlpatterns = patterns(
|
||||
'',
|
||||
|
||||
@@ -1,15 +1,10 @@
|
||||
""" Certificates API v0 URLs. """
|
||||
|
||||
from django.conf import settings
|
||||
from django.conf.urls import (
|
||||
include,
|
||||
patterns,
|
||||
url,
|
||||
)
|
||||
from django.conf.urls import include, patterns, url
|
||||
|
||||
from lms.djangoapps.certificates.apis.v0 import views
|
||||
|
||||
|
||||
CERTIFICATES_URLS = patterns(
|
||||
'',
|
||||
url(
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
""" API v0 views. """
|
||||
import logging
|
||||
|
||||
from edx_rest_framework_extensions.authentication import JwtAuthentication
|
||||
from opaque_keys import InvalidKeyError
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
from rest_framework.generics import GenericAPIView
|
||||
@@ -8,11 +9,7 @@ from rest_framework.permissions import IsAuthenticated
|
||||
from rest_framework.response import Response
|
||||
|
||||
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__)
|
||||
|
||||
|
||||
@@ -3,13 +3,16 @@ Management command which sets or gets the certificate whitelist for a given
|
||||
user/course
|
||||
"""
|
||||
from __future__ import print_function
|
||||
from django.core.management.base import BaseCommand, CommandError
|
||||
|
||||
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.edx.keys import CourseKey
|
||||
from opaque_keys.edx.locations import SlashSeparatedCourseKey
|
||||
|
||||
from certificates.models import CertificateWhitelist
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
|
||||
def get_user_from_identifier(identifier):
|
||||
|
||||
@@ -10,12 +10,13 @@ Example usage:
|
||||
|
||||
"""
|
||||
import logging
|
||||
from django.core.management.base import BaseCommand, CommandError
|
||||
from django.contrib.auth.models import User
|
||||
from optparse import make_option
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
from certificates.models import GeneratedCertificate, CertificateStatuses
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
from django.core.management.base import BaseCommand, CommandError
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
|
||||
from certificates.models import CertificateStatuses, GeneratedCertificate
|
||||
|
||||
LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
"""
|
||||
Management command which fixes ungraded certificates for students
|
||||
"""
|
||||
from django.core.management.base import BaseCommand
|
||||
import logging
|
||||
from optparse import make_option
|
||||
|
||||
from django.core.management.base import BaseCommand
|
||||
|
||||
from certificates.models import GeneratedCertificate
|
||||
from courseware import courses
|
||||
from lms.djangoapps.grades.new.course_grade_factory import CourseGradeFactory
|
||||
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
|
||||
@@ -2,14 +2,16 @@
|
||||
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 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.edx.keys import CourseKey
|
||||
from opaque_keys.edx.locations import SlashSeparatedCourseKey
|
||||
from django.db.models import Count
|
||||
|
||||
from certificates.models import GeneratedCertificate
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
"""Django management command to force certificate regeneration for one user"""
|
||||
|
||||
import logging
|
||||
import copy
|
||||
import logging
|
||||
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
|
||||
@@ -10,8 +11,8 @@ from opaque_keys.edx.keys import CourseKey
|
||||
from opaque_keys.edx.locations import SlashSeparatedCourseKey
|
||||
|
||||
from badges.events.course_complete import get_completion_badge
|
||||
from xmodule.modulestore.django import modulestore
|
||||
from certificates.api import regenerate_user_certificates
|
||||
from xmodule.modulestore.django import modulestore
|
||||
|
||||
LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -18,14 +18,14 @@ Example usage:
|
||||
"""
|
||||
import logging
|
||||
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.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__)
|
||||
|
||||
|
||||
@@ -2,20 +2,20 @@
|
||||
Management command to find all students that need certificates for
|
||||
courses that have finished, and put their cert requests on the queue.
|
||||
"""
|
||||
import logging
|
||||
import datetime
|
||||
from pytz import UTC
|
||||
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
|
||||
import logging
|
||||
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.edx.keys import CourseKey
|
||||
from opaque_keys.edx.locations import SlashSeparatedCourseKey
|
||||
from xmodule.modulestore.django import modulestore
|
||||
from certificates.models import CertificateStatuses
|
||||
from pytz import UTC
|
||||
|
||||
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__)
|
||||
|
||||
|
||||
@@ -47,9 +47,10 @@ Eligibility:
|
||||
"""
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
import uuid
|
||||
|
||||
import os
|
||||
from config_models.models import ConfigurationModel
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import User
|
||||
from django.core.exceptions import ValidationError
|
||||
@@ -60,15 +61,13 @@ from django.utils.translation import ugettext_lazy as _
|
||||
from django_extensions.db.fields import CreationDateTimeField
|
||||
from model_utils import Choices
|
||||
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_meta import completion_check, course_group_check
|
||||
from config_models.models import ConfigurationModel
|
||||
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 util.milestones_helpers import fulfill_course_milestone, is_prerequisite_courses_enabled
|
||||
|
||||
LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -1,33 +1,30 @@
|
||||
"""Interface for adding certificate generation tasks to the XQueue. """
|
||||
import json
|
||||
import random
|
||||
import logging
|
||||
import lxml.html
|
||||
from lxml.etree import XMLSyntaxError, ParserError
|
||||
import random
|
||||
from uuid import uuid4
|
||||
|
||||
from django.test.client import RequestFactory
|
||||
import lxml.html
|
||||
from django.conf import settings
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.test.client import RequestFactory
|
||||
from lxml.etree import ParserError, XMLSyntaxError
|
||||
from requests.auth import HTTPBasicAuth
|
||||
|
||||
from lms.djangoapps.grades.new.course_grade_factory import CourseGradeFactory
|
||||
from xmodule.modulestore.django import modulestore
|
||||
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 capa.xqueue_interface import XQueueInterface, make_hashkey, make_xheader
|
||||
from certificates.models import CertificateStatuses as status
|
||||
from certificates.models import (
|
||||
CertificateStatuses,
|
||||
GeneratedCertificate,
|
||||
certificate_status_for_student,
|
||||
CertificateStatuses as status,
|
||||
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__)
|
||||
|
||||
|
||||
@@ -3,9 +3,9 @@ for self-paced courses.
|
||||
"""
|
||||
from celery.task import task
|
||||
from django.dispatch.dispatcher import receiver
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
|
||||
from certificates.models import CertificateGenerationCourseSetting
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
|
||||
from xmodule.modulestore.django import SignalHandler
|
||||
|
||||
|
||||
@@ -5,8 +5,11 @@ from uuid import uuid4
|
||||
from factory.django import DjangoModelFactory
|
||||
|
||||
from certificates.models import (
|
||||
GeneratedCertificate, CertificateStatuses, CertificateHtmlViewConfiguration, CertificateWhitelist,
|
||||
CertificateHtmlViewConfiguration,
|
||||
CertificateInvalidation,
|
||||
CertificateStatuses,
|
||||
CertificateWhitelist,
|
||||
GeneratedCertificate
|
||||
)
|
||||
from student.models import LinkedInAddToProfileConfiguration
|
||||
|
||||
|
||||
@@ -1,20 +1,30 @@
|
||||
"""Tests for the certificates Python API. """
|
||||
from contextlib import contextmanager
|
||||
import ddt
|
||||
from functools import wraps
|
||||
import uuid
|
||||
from contextlib import contextmanager
|
||||
from functools import wraps
|
||||
|
||||
from django.test import TestCase, RequestFactory
|
||||
from django.test.utils import override_settings
|
||||
import ddt
|
||||
from config_models.models import cache
|
||||
from django.conf import settings
|
||||
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 freezegun import freeze_time
|
||||
from mock import patch
|
||||
from nose.plugins.attrib import attr
|
||||
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.tests.factories import CourseModeFactory
|
||||
from courseware.tests.factories import GlobalStaffFactory
|
||||
@@ -23,26 +33,8 @@ from microsite_configuration import microsite
|
||||
from student.models import CourseEnrollment
|
||||
from student.tests.factories import UserFactory
|
||||
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.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['CERTIFICATES_HTML_VIEW'] = True
|
||||
|
||||
@@ -1,22 +1,21 @@
|
||||
"""Tests for the resubmit_error_certificates management command. """
|
||||
import ddt
|
||||
from django.core.management.base import CommandError
|
||||
from nose.plugins.attrib import attr
|
||||
from django.test.utils import override_settings
|
||||
from mock import patch
|
||||
|
||||
from course_modes.models import CourseMode
|
||||
from nose.plugins.attrib import attr
|
||||
from opaque_keys.edx.locator import CourseLocator
|
||||
|
||||
from badges.events.course_complete import get_completion_badge
|
||||
from badges.models import BadgeAssertion
|
||||
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 student.tests.factories import CourseEnrollmentFactory, UserFactory
|
||||
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
||||
from xmodule.modulestore.tests.factories import CourseFactory, check_mongo_calls, ItemFactory
|
||||
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
|
||||
from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory, check_mongo_calls
|
||||
|
||||
|
||||
class CertificateManagementTest(ModuleStoreTestCase):
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
"""Tests for the create_fake_certs management command. """
|
||||
from django.test import TestCase
|
||||
from django.core.management.base import CommandError
|
||||
from django.test import TestCase
|
||||
from nose.plugins.attrib import attr
|
||||
|
||||
from opaque_keys.edx.locator import CourseLocator
|
||||
from student.tests.factories import UserFactory
|
||||
|
||||
from certificates.management.commands import create_fake_cert
|
||||
from certificates.models import GeneratedCertificate
|
||||
from student.tests.factories import UserFactory
|
||||
|
||||
|
||||
@attr(shard=1)
|
||||
|
||||
@@ -1,31 +1,29 @@
|
||||
"""Tests for certificate Django models. """
|
||||
import json
|
||||
|
||||
import ddt
|
||||
from django.conf import settings
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
from django.test import TestCase
|
||||
from django.test.utils import override_settings
|
||||
from nose.plugins.attrib import attr
|
||||
import json
|
||||
from mock import Mock
|
||||
from nose.plugins.attrib import attr
|
||||
from opaque_keys.edx.locator import CourseLocator
|
||||
from path import Path as path
|
||||
|
||||
from certificates.models import (
|
||||
CertificateGenerationHistory,
|
||||
CertificateHtmlViewConfiguration,
|
||||
CertificateInvalidation,
|
||||
CertificateStatuses,
|
||||
CertificateTemplateAsset,
|
||||
ExampleCertificate,
|
||||
ExampleCertificateSet,
|
||||
CertificateHtmlViewConfiguration,
|
||||
CertificateTemplateAsset,
|
||||
CertificateInvalidation,
|
||||
GeneratedCertificate,
|
||||
CertificateStatuses,
|
||||
CertificateGenerationHistory,
|
||||
)
|
||||
from certificates.tests.factories import (
|
||||
CertificateInvalidationFactory,
|
||||
GeneratedCertificateFactory
|
||||
GeneratedCertificate
|
||||
)
|
||||
from certificates.tests.factories import CertificateInvalidationFactory, GeneratedCertificateFactory
|
||||
from lms.djangoapps.instructor_task.tests.factories import InstructorTaskFactory
|
||||
from opaque_keys.edx.locator import CourseLocator
|
||||
from student.tests.factories import AdminFactory, UserFactory
|
||||
from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase
|
||||
from xmodule.modulestore.tests.factories import CourseFactory
|
||||
|
||||
@@ -1,24 +1,17 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""Tests for the XQueue certificates interface. """
|
||||
import json
|
||||
from contextlib import contextmanager
|
||||
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
|
||||
from django.test.utils import override_settings
|
||||
import ddt
|
||||
import freezegun
|
||||
import pytz
|
||||
|
||||
from course_modes.models import CourseMode
|
||||
from lms.djangoapps.grades.tests.utils import mock_passing_grade
|
||||
from django.test import TestCase
|
||||
from django.test.utils import override_settings
|
||||
from mock import Mock, patch
|
||||
from nose.plugins.attrib import attr
|
||||
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
|
||||
# code from the capa library. In the future, we should move this
|
||||
@@ -26,16 +19,15 @@ from xmodule.modulestore.tests.factories import CourseFactory
|
||||
# and verify that items are being correctly added to the queue
|
||||
# in our `XQueueCertInterface` implementation.
|
||||
from capa.xqueue_interface import XQueueInterface
|
||||
|
||||
from certificates.models import (
|
||||
ExampleCertificateSet,
|
||||
ExampleCertificate,
|
||||
GeneratedCertificate,
|
||||
CertificateStatuses,
|
||||
)
|
||||
from certificates.models import CertificateStatuses, ExampleCertificate, ExampleCertificateSet, GeneratedCertificate
|
||||
from certificates.queue import XQueueCertInterface
|
||||
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 student.tests.factories import CourseEnrollmentFactory, UserFactory
|
||||
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
||||
from xmodule.modulestore.tests.factories import CourseFactory
|
||||
|
||||
|
||||
@ddt.ddt
|
||||
|
||||
@@ -5,8 +5,8 @@ from certificates import api as certs_api
|
||||
from certificates.models import CertificateGenerationConfiguration
|
||||
from certificates.signals import _listen_for_course_publish
|
||||
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.factories import CourseFactory
|
||||
|
||||
|
||||
class SelfGeneratedCertsSignalTest(ModuleStoreTestCase):
|
||||
|
||||
@@ -8,17 +8,13 @@ import ddt
|
||||
from django.conf import settings
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.test.utils import override_settings
|
||||
|
||||
from certificates.models import (
|
||||
CertificateInvalidation,
|
||||
CertificateStatuses,
|
||||
GeneratedCertificate
|
||||
)
|
||||
from certificates.tests.factories import CertificateInvalidationFactory
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
from student.tests.factories import UserFactory
|
||||
|
||||
from certificates.models import CertificateInvalidation, CertificateStatuses, GeneratedCertificate
|
||||
from certificates.tests.factories import CertificateInvalidationFactory
|
||||
from student.models import CourseEnrollment
|
||||
from student.roles import GlobalStaff, SupportStaffRole
|
||||
from student.tests.factories import UserFactory
|
||||
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
||||
from xmodule.modulestore.tests.factories import CourseFactory
|
||||
|
||||
|
||||
@@ -11,15 +11,15 @@ from django.test.client import Client
|
||||
from django.test.utils import override_settings
|
||||
from nose.plugins.attrib import attr
|
||||
from opaque_keys.edx.locator import CourseLocator
|
||||
from openedx.core.djangolib.testing.utils import CacheIsolationTestCase
|
||||
|
||||
from certificates.api import get_certificate_url
|
||||
from certificates.models import (
|
||||
ExampleCertificateSet,
|
||||
ExampleCertificate,
|
||||
GeneratedCertificate,
|
||||
CertificateHtmlViewConfiguration,
|
||||
ExampleCertificate,
|
||||
ExampleCertificateSet,
|
||||
GeneratedCertificate
|
||||
)
|
||||
from openedx.core.djangolib.testing.utils import CacheIsolationTestCase
|
||||
from student.tests.factories import UserFactory
|
||||
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
||||
from xmodule.modulestore.tests.factories import CourseFactory
|
||||
|
||||
@@ -2,49 +2,47 @@
|
||||
"""Tests for certificates views. """
|
||||
|
||||
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 urllib import urlencode
|
||||
from uuid import uuid4
|
||||
|
||||
import ddt
|
||||
from django.conf import settings
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.test.client import Client, RequestFactory
|
||||
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 lms.djangoapps.badges.events.course_complete import get_completion_badge
|
||||
from lms.djangoapps.badges.tests.factories import (
|
||||
BadgeAssertionFactory,
|
||||
CourseCompleteImageConfigurationFactory,
|
||||
BadgeClassFactory,
|
||||
CourseCompleteImageConfigurationFactory
|
||||
)
|
||||
from lms.djangoapps.grades.tests.utils import mock_passing_grade
|
||||
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.tests.factories import CourseEnrollmentFactory, UserFactory
|
||||
from track.tests import EventTrackingTestCase
|
||||
from util import organizations_helpers as organizations_api
|
||||
from xmodule.modulestore.tests.factories import CourseFactory
|
||||
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
||||
|
||||
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,
|
||||
)
|
||||
from xmodule.modulestore.tests.factories import CourseFactory
|
||||
|
||||
FEATURES_WITH_CERTS_ENABLED = settings.FEATURES.copy()
|
||||
FEATURES_WITH_CERTS_ENABLED['CERTIFICATES_HTML_VIEW'] = True
|
||||
|
||||
@@ -1,29 +1,24 @@
|
||||
"""
|
||||
Tests for the certificates models.
|
||||
"""
|
||||
from ddt import ddt, data, unpack
|
||||
from mock import patch
|
||||
from ddt import data, ddt, unpack
|
||||
from django.conf import settings
|
||||
from milestones.tests.utils import MilestonesTestCaseMixin
|
||||
from mock import patch
|
||||
from nose.plugins.attrib import attr
|
||||
|
||||
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 (
|
||||
CertificateStatuses,
|
||||
GeneratedCertificate,
|
||||
certificate_status_for_student,
|
||||
certificate_info_for_user
|
||||
certificate_info_for_user,
|
||||
certificate_status_for_student
|
||||
)
|
||||
from certificates.tests.factories import GeneratedCertificateFactory
|
||||
|
||||
from util.milestones_helpers import (
|
||||
set_prerequisite_courses,
|
||||
milestones_achieved_by_user,
|
||||
)
|
||||
from milestones.tests.utils import MilestonesTestCaseMixin
|
||||
from student.tests.factories import CourseEnrollmentFactory, UserFactory
|
||||
from util.milestones_helpers import milestones_achieved_by_user, set_prerequisite_courses
|
||||
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
||||
from xmodule.modulestore.tests.factories import CourseFactory
|
||||
|
||||
|
||||
@attr(shard=1)
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
URLs for the certificates app.
|
||||
"""
|
||||
|
||||
from django.conf.urls import patterns, url
|
||||
from django.conf import settings
|
||||
from django.conf.urls import patterns, url
|
||||
|
||||
from certificates import views
|
||||
|
||||
|
||||
@@ -8,29 +8,23 @@ import logging
|
||||
import urllib
|
||||
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.models import Q
|
||||
from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseForbidden, HttpResponseServerError
|
||||
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.models import CertificateInvalidation
|
||||
from courseware.access import has_access
|
||||
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 student.models import User, CourseEnrollment
|
||||
from student.models import CourseEnrollment, User
|
||||
from util.json_request import JsonResponse
|
||||
from xmodule.modulestore.django import modulestore
|
||||
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
|
||||
@@ -2,49 +2,49 @@
|
||||
"""
|
||||
Certificate HTML webview.
|
||||
"""
|
||||
from datetime import datetime
|
||||
from uuid import uuid4
|
||||
import logging
|
||||
import urllib
|
||||
from datetime import datetime
|
||||
from uuid import uuid4
|
||||
|
||||
from django.conf import settings
|
||||
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.utils.translation import ugettext as _
|
||||
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.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 edxmako.shortcuts import render_to_response
|
||||
from edxmako.template import Template
|
||||
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.lib.courses import course_image_url
|
||||
from student.models import LinkedInAddToProfileConfiguration
|
||||
from util import organizations_helpers as organization_api
|
||||
from util.views import handle_500
|
||||
from xmodule.modulestore.django import modulestore
|
||||
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__)
|
||||
|
||||
|
||||
|
||||
@@ -6,24 +6,23 @@ import logging
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
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.http import require_POST
|
||||
import dogstats_wrapper as dog_stats_api
|
||||
|
||||
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
|
||||
|
||||
import dogstats_wrapper as dog_stats_api
|
||||
from capa.xqueue_interface import XQUEUE_METRIC_NAME
|
||||
from certificates.api import generate_user_certificates
|
||||
from certificates.models import (
|
||||
certificate_status_for_student,
|
||||
CertificateStatuses,
|
||||
GeneratedCertificate,
|
||||
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__)
|
||||
|
||||
|
||||
@@ -1,18 +1,17 @@
|
||||
"""
|
||||
Computes the data to display on the Instructor Dashboard
|
||||
"""
|
||||
from util.json_request import JsonResponse
|
||||
import json
|
||||
|
||||
from courseware import models
|
||||
from django.db.models import Count
|
||||
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.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.
|
||||
MAX_SCREEN_LIST_LENGTH = 250
|
||||
|
||||
@@ -10,19 +10,23 @@ from mock import patch
|
||||
from nose.plugins.attrib import attr
|
||||
|
||||
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 (
|
||||
get_problem_grade_distribution, get_sequential_open_distrib,
|
||||
get_problem_set_grade_distrib, get_d3_problem_grade_distrib,
|
||||
get_d3_sequential_open_distrib, get_d3_section_grade_distrib,
|
||||
get_section_display_name, get_array_section_has_problem,
|
||||
get_students_opened_subsection, get_students_problem_grades,
|
||||
get_array_section_has_problem,
|
||||
get_d3_problem_grade_distrib,
|
||||
get_d3_section_grade_distrib,
|
||||
get_d3_sequential_open_distrib,
|
||||
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 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
|
||||
|
||||
|
||||
@@ -6,11 +6,11 @@ import json
|
||||
from django.test.client import RequestFactory
|
||||
from mock import patch
|
||||
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 student.tests.factories import AdminFactory
|
||||
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
||||
from xmodule.modulestore.tests.factories import CourseFactory
|
||||
|
||||
|
||||
@attr(shard=1)
|
||||
|
||||
@@ -2,8 +2,9 @@
|
||||
Class Dashboard API endpoint urls.
|
||||
"""
|
||||
|
||||
from django.conf.urls import patterns, url
|
||||
from django.conf import settings
|
||||
from django.conf.urls import patterns, url
|
||||
|
||||
COURSE_ID_PATTERN = settings.COURSE_ID_PATTERN
|
||||
|
||||
urlpatterns = patterns(
|
||||
|
||||
@@ -2,16 +2,15 @@
|
||||
Handles requests for data, returning a json
|
||||
"""
|
||||
|
||||
import logging
|
||||
import json
|
||||
import logging
|
||||
|
||||
from django.http import HttpResponse
|
||||
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 courseware.access import has_access
|
||||
from courseware.courses import get_course_overview_with_access
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
""" Admin site bindings for commerce app. """
|
||||
|
||||
from config_models.admin import ConfigurationModelAdmin
|
||||
from django.contrib import admin
|
||||
|
||||
from commerce.models import CommerceConfiguration
|
||||
from config_models.admin import ConfigurationModelAdmin
|
||||
|
||||
admin.site.register(CommerceConfiguration, ConfigurationModelAdmin)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
""" API URLs. """
|
||||
from django.conf.urls import patterns, url, include
|
||||
from django.conf.urls import include, patterns, url
|
||||
|
||||
urlpatterns = patterns(
|
||||
'',
|
||||
|
||||
@@ -1,35 +1,35 @@
|
||||
""" Commerce API v0 view tests. """
|
||||
from datetime import datetime, timedelta
|
||||
import json
|
||||
import itertools
|
||||
import json
|
||||
from datetime import datetime, timedelta
|
||||
from uuid import uuid4
|
||||
import httpretty
|
||||
|
||||
import ddt
|
||||
import httpretty
|
||||
import mock
|
||||
import pytz
|
||||
from django.conf import settings
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.test import TestCase
|
||||
from django.test.utils import override_settings
|
||||
import mock
|
||||
from edx_rest_api_client import exceptions
|
||||
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.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.test_views import UserMixin
|
||||
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 openedx.core.djangoapps.embargo.test_utils import restrict_course
|
||||
from openedx.core.lib.django_test_client_utils import get_absolute_url
|
||||
from student.models import CourseEnrollment
|
||||
from student.tests.factories import CourseModeFactory
|
||||
from student.tests.tests import EnrollmentEventTestMixin
|
||||
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_CONTENTS = {
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
""" 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
|
||||
|
||||
|
||||
BASKET_URLS = patterns(
|
||||
'',
|
||||
url(r'^$', views.BasketsView.as_view(), name='create'),
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
""" API v0 views. """
|
||||
import logging
|
||||
import requests
|
||||
|
||||
import requests
|
||||
from edx_rest_api_client import exceptions
|
||||
from opaque_keys import InvalidKeyError
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
@@ -15,17 +15,16 @@ from commerce.exceptions import InvalidResponseError
|
||||
from commerce.http import DetailResponse, InternalRequestErrorResponse
|
||||
from course_modes.models import CourseMode
|
||||
from courseware import courses
|
||||
from openedx.core.djangoapps.embargo import api as embargo_api
|
||||
from enrollment.api import add_enrollment
|
||||
from enrollment.views import EnrollmentCrossDomainSessionAuth
|
||||
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.lib.api.authentication import OAuth2AuthenticationAllowInactiveUser
|
||||
from openedx.core.lib.log_utils import audit_log
|
||||
from student.models import CourseEnrollment, RegistrationCookieConfiguration
|
||||
from util.json_request import JsonResponse
|
||||
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
SAILTHRU_CAMPAIGN_COOKIE = 'sailthru_bid'
|
||||
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
""" API v1 models. """
|
||||
import logging
|
||||
from itertools import groupby
|
||||
|
||||
import logging
|
||||
from django.db import transaction
|
||||
from opaque_keys import InvalidKeyError
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
|
||||
|
||||
from course_modes.models import CourseMode
|
||||
from lms.djangoapps.verify_student.models import VerificationDeadline
|
||||
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -3,14 +3,12 @@ from datetime import datetime
|
||||
|
||||
import pytz
|
||||
from django.utils.translation import ugettext as _
|
||||
|
||||
from opaque_keys import InvalidKeyError
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
from rest_framework import serializers
|
||||
|
||||
from commerce.api.v1.models import Course
|
||||
from course_modes.models import CourseMode
|
||||
|
||||
from xmodule.modulestore.django import modulestore
|
||||
|
||||
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
""" Commerce API v1 view tests. """
|
||||
from datetime import datetime, timedelta
|
||||
import itertools
|
||||
import json
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
import ddt
|
||||
import pytz
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import Permission
|
||||
from django.core.urlresolvers import reverse
|
||||
@@ -12,16 +13,15 @@ from django.test.utils import override_settings
|
||||
from edx_rest_api_client import exceptions
|
||||
from flaky import flaky
|
||||
from nose.plugins.attrib import attr
|
||||
import pytz
|
||||
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.test_views import UserMixin
|
||||
from course_modes.models import CourseMode
|
||||
from student.tests.factories import UserFactory
|
||||
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'
|
||||
JSON_CONTENT_TYPE = 'application/json'
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
""" API v1 URLs. """
|
||||
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
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ from django.http import Http404
|
||||
from edx_rest_api_client import exceptions
|
||||
from edx_rest_framework_extensions.authentication import JwtAuthentication
|
||||
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.views import APIView
|
||||
from rest_framework_oauth.authentication import OAuth2Authentication
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user