feat: New codemods on OpenedX 2 (#28777)
This commit is contained in:
@@ -15,9 +15,10 @@ from .models import CourseOverview
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
COURSE_START_DATE_CHANGED = Signal(providing_args=["updated_course_overview", "previous_start_date"])
|
||||
COURSE_PACING_CHANGED = Signal(providing_args=["updated_course_overview", "previous_self_paced"])
|
||||
# providing_args=["updated_course_overview", "previous_start_date"]
|
||||
COURSE_START_DATE_CHANGED = Signal()
|
||||
# providing_args=["updated_course_overview", "previous_self_paced"]
|
||||
COURSE_PACING_CHANGED = Signal()
|
||||
|
||||
|
||||
@receiver(SignalHandler.course_published)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# lint-amnesty, pylint: disable=missing-module-docstring
|
||||
from django.apps import AppConfig
|
||||
from django.conf import settings
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from edx_proctoring.runtime import set_runtime_service
|
||||
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@ from django.contrib.auth.models import AbstractUser, Group
|
||||
from django.core.exceptions import PermissionDenied
|
||||
from django.core.validators import validate_unicode_slug
|
||||
from django.db import IntegrityError
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.utils.translation import gettext as _
|
||||
from elasticsearch.exceptions import ConnectionError as ElasticConnectionError
|
||||
from lxml import etree
|
||||
from opaque_keys.edx.keys import LearningContextKey, UsageKey
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
""" Constants used for the content libraries. """
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
# ./api.py and ./views.py are only used in Studio, so we always work with this draft of any
|
||||
# content library bundle:
|
||||
|
||||
@@ -42,7 +42,7 @@ from django.contrib.auth.models import Group
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.db import models
|
||||
from django.db import transaction
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from opaque_keys.edx.django.models import CourseKeyField
|
||||
from opaque_keys.edx.locator import LibraryLocatorV2
|
||||
|
||||
@@ -4,9 +4,14 @@ Content libraries related signals.
|
||||
|
||||
from django.dispatch import Signal
|
||||
|
||||
CONTENT_LIBRARY_CREATED = Signal(providing_args=['library_key'])
|
||||
CONTENT_LIBRARY_UPDATED = Signal(providing_args=['library_key', 'update_blocks'])
|
||||
CONTENT_LIBRARY_DELETED = Signal(providing_args=['library_key'])
|
||||
LIBRARY_BLOCK_CREATED = Signal(providing_args=['library_key', 'usage_key'])
|
||||
LIBRARY_BLOCK_DELETED = Signal(providing_args=['library_key', 'usage_key'])
|
||||
LIBRARY_BLOCK_UPDATED = Signal(providing_args=['library_key', 'usage_key'])
|
||||
# providing_args=['library_key']
|
||||
CONTENT_LIBRARY_CREATED = Signal()
|
||||
# providing_args=['library_key', 'update_blocks']
|
||||
CONTENT_LIBRARY_UPDATED = Signal()
|
||||
# providing_args=['library_key']
|
||||
CONTENT_LIBRARY_DELETED = Signal()
|
||||
|
||||
# Same providing_args=['library_key', 'usage_key'] for next 3 signals.
|
||||
LIBRARY_BLOCK_CREATED = Signal()
|
||||
LIBRARY_BLOCK_DELETED = Signal()
|
||||
LIBRARY_BLOCK_UPDATED = Signal()
|
||||
|
||||
@@ -5,7 +5,7 @@ from typing import Dict, Optional
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.utils.translation import ugettext_noop as _
|
||||
from django.utils.translation import gettext_noop as _
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
|
||||
from openedx.core.djangoapps.course_apps.plugins import CourseApp
|
||||
|
||||
@@ -11,7 +11,7 @@ from django.db import models
|
||||
from django.db.models.signals import post_save
|
||||
from django.dispatch import receiver
|
||||
|
||||
from django.utils.translation import ugettext_noop
|
||||
from django.utils.translation import gettext_noop
|
||||
from jsonfield.fields import JSONField
|
||||
from opaque_keys.edx.django.models import CourseKeyField
|
||||
|
||||
@@ -22,11 +22,11 @@ from common.djangoapps.student.roles import GlobalStaff
|
||||
from xmodule.modulestore.django import modulestore
|
||||
from xmodule.modulestore.exceptions import ItemNotFoundError
|
||||
|
||||
FORUM_ROLE_ADMINISTRATOR = ugettext_noop('Administrator')
|
||||
FORUM_ROLE_MODERATOR = ugettext_noop('Moderator')
|
||||
FORUM_ROLE_GROUP_MODERATOR = ugettext_noop('Group Moderator')
|
||||
FORUM_ROLE_COMMUNITY_TA = ugettext_noop('Community TA')
|
||||
FORUM_ROLE_STUDENT = ugettext_noop('Student')
|
||||
FORUM_ROLE_ADMINISTRATOR = gettext_noop('Administrator')
|
||||
FORUM_ROLE_MODERATOR = gettext_noop('Moderator')
|
||||
FORUM_ROLE_GROUP_MODERATOR = gettext_noop('Group Moderator')
|
||||
FORUM_ROLE_COMMUNITY_TA = gettext_noop('Community TA')
|
||||
FORUM_ROLE_STUDENT = gettext_noop('Student')
|
||||
|
||||
|
||||
@receiver(post_save, sender=CourseEnrollment)
|
||||
|
||||
@@ -4,14 +4,15 @@
|
||||
|
||||
from django.dispatch import Signal
|
||||
|
||||
thread_created = Signal(providing_args=['user', 'post'])
|
||||
thread_edited = Signal(providing_args=['user', 'post'])
|
||||
thread_voted = Signal(providing_args=['user', 'post'])
|
||||
thread_deleted = Signal(providing_args=['user', 'post'])
|
||||
thread_followed = Signal(providing_args=['user', 'post'])
|
||||
thread_unfollowed = Signal(providing_args=['user', 'post'])
|
||||
comment_created = Signal(providing_args=['user', 'post'])
|
||||
comment_edited = Signal(providing_args=['user', 'post'])
|
||||
comment_voted = Signal(providing_args=['user', 'post'])
|
||||
comment_deleted = Signal(providing_args=['user', 'post'])
|
||||
comment_endorsed = Signal(providing_args=['user', 'post'])
|
||||
# Same providing_args=['user', 'post'] for all following signals.
|
||||
thread_created = Signal()
|
||||
thread_edited = Signal()
|
||||
thread_voted = Signal()
|
||||
thread_deleted = Signal()
|
||||
thread_followed = Signal()
|
||||
thread_unfollowed = Signal()
|
||||
comment_created = Signal()
|
||||
comment_edited = Signal()
|
||||
comment_voted = Signal()
|
||||
comment_deleted = Signal()
|
||||
comment_endorsed = Signal()
|
||||
|
||||
@@ -5,7 +5,7 @@ Defines forms for providing validation of embargo admin details.
|
||||
|
||||
import ipaddress
|
||||
from django import forms
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.utils.translation import gettext as _
|
||||
from opaque_keys import InvalidKeyError
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
|
||||
|
||||
@@ -21,8 +21,8 @@ from django.core.cache import cache
|
||||
from django.db import models
|
||||
from django.db.models.signals import post_delete, post_save
|
||||
from django.urls import reverse
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.utils.translation import ugettext_lazy
|
||||
from django.utils.translation import gettext as _
|
||||
from django.utils.translation import gettext_lazy
|
||||
from django_countries import countries
|
||||
from django_countries.fields import CountryField
|
||||
from opaque_keys.edx.django.models import CourseKeyField
|
||||
@@ -132,26 +132,26 @@ class RestrictedCourse(models.Model):
|
||||
|
||||
course_key = CourseKeyField(
|
||||
max_length=255, db_index=True, unique=True,
|
||||
help_text=ugettext_lazy("The course key for the restricted course.")
|
||||
help_text=gettext_lazy("The course key for the restricted course.")
|
||||
)
|
||||
|
||||
enroll_msg_key = models.CharField(
|
||||
max_length=255,
|
||||
choices=ENROLL_MSG_KEY_CHOICES,
|
||||
default='default',
|
||||
help_text=ugettext_lazy("The message to show when a user is blocked from enrollment.")
|
||||
help_text=gettext_lazy("The message to show when a user is blocked from enrollment.")
|
||||
)
|
||||
|
||||
access_msg_key = models.CharField(
|
||||
max_length=255,
|
||||
choices=COURSEWARE_MSG_KEY_CHOICES,
|
||||
default='default',
|
||||
help_text=ugettext_lazy("The message to show when a user is blocked from accessing a course.")
|
||||
help_text=gettext_lazy("The message to show when a user is blocked from accessing a course.")
|
||||
)
|
||||
|
||||
disable_access_check = models.BooleanField(
|
||||
default=False,
|
||||
help_text=ugettext_lazy(
|
||||
help_text=gettext_lazy(
|
||||
"Allow users who enrolled in an allowed country "
|
||||
"to access restricted courses from excluded countries."
|
||||
)
|
||||
@@ -380,7 +380,7 @@ class Country(models.Model):
|
||||
"""
|
||||
country = CountryField(
|
||||
db_index=True, unique=True,
|
||||
help_text=ugettext_lazy("Two character ISO country code.")
|
||||
help_text=gettext_lazy("Two character ISO country code.")
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
@@ -425,7 +425,7 @@ class CountryAccessRule(models.Model):
|
||||
max_length=255,
|
||||
choices=RULE_TYPE_CHOICES,
|
||||
default=BLACKLIST_RULE,
|
||||
help_text=ugettext_lazy(
|
||||
help_text=gettext_lazy(
|
||||
"Whether to include or exclude the given course. "
|
||||
"If whitelist countries are specified, then ONLY users from whitelisted countries "
|
||||
"will be able to access the course. If blacklist countries are specified, then "
|
||||
@@ -435,13 +435,13 @@ class CountryAccessRule(models.Model):
|
||||
|
||||
restricted_course = models.ForeignKey(
|
||||
"RestrictedCourse",
|
||||
help_text=ugettext_lazy("The course to which this rule applies."),
|
||||
help_text=gettext_lazy("The course to which this rule applies."),
|
||||
on_delete=models.CASCADE,
|
||||
)
|
||||
|
||||
country = models.ForeignKey(
|
||||
"Country",
|
||||
help_text=ugettext_lazy("The country to which this rule applies."),
|
||||
help_text=gettext_lazy("The country to which this rule applies."),
|
||||
on_delete=models.CASCADE,
|
||||
)
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
from collections import namedtuple
|
||||
|
||||
from django.conf import settings
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.utils.translation import gettext as _
|
||||
from openedx.core.djangoapps.dark_lang.models import DarkLangConfig
|
||||
from openedx.core.djangoapps.site_configuration.helpers import get_value
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ from datetime import datetime
|
||||
|
||||
from django.db import models
|
||||
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from django_mysql.models import ListCharField
|
||||
from oauth2_provider.settings import oauth2_settings
|
||||
from organizations.models import Organization
|
||||
|
||||
@@ -6,7 +6,7 @@ import logging
|
||||
from dateutil.parser import parse as parse_date
|
||||
from django.apps import AppConfig
|
||||
from django.conf import settings
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from edx_django_utils.plugins import PluginSettings
|
||||
|
||||
from openedx.core.djangoapps.plugins.constants import ProjectType, SettingsType
|
||||
|
||||
@@ -6,7 +6,7 @@ from datetime import datetime
|
||||
|
||||
import pytz
|
||||
from django.conf import settings
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.utils.translation import gettext as _
|
||||
|
||||
from openedx.core.djangolib.markup import HTML
|
||||
from common.djangoapps.util.date_utils import DEFAULT_SHORT_DATE_FORMAT, strftime_localized
|
||||
|
||||
@@ -11,7 +11,7 @@ from io import BytesIO
|
||||
import piexif
|
||||
from django.conf import settings
|
||||
from django.core.files.base import ContentFile
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.utils.translation import gettext as _
|
||||
from PIL import Image
|
||||
|
||||
from openedx.core.djangoapps.user_api.accounts.image_helpers import get_profile_image_storage
|
||||
|
||||
@@ -8,7 +8,7 @@ import itertools
|
||||
import logging
|
||||
from contextlib import closing
|
||||
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.utils.translation import gettext as _
|
||||
from edx_rest_framework_extensions.auth.jwt.authentication import JwtAuthentication
|
||||
from edx_rest_framework_extensions.auth.session.authentication import SessionAuthenticationAllowInactiveUser
|
||||
from pytz import UTC
|
||||
|
||||
@@ -19,7 +19,7 @@ class Migration(migrations.Migration):
|
||||
('internal_service_url', models.URLField(verbose_name='Internal Service URL')),
|
||||
('public_service_url', models.URLField(verbose_name='Public Service URL')),
|
||||
('api_version_number', models.IntegerField(verbose_name='API Version')),
|
||||
('enable_student_dashboard', models.NullBooleanField(verbose_name='Enable Student Dashboard Displays')),
|
||||
('enable_student_dashboard', models.BooleanField(verbose_name='Enable Student Dashboard Displays', null=True)),
|
||||
('changed_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, editable=False, to=settings.AUTH_USER_MODEL, null=True, verbose_name='Changed by')),
|
||||
],
|
||||
options={
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
"""Models providing Programs support for the LMS and Studio."""
|
||||
from config_models.models import ConfigurationModel
|
||||
from django.db import models
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class ProgramsApiConfig(ConfigurationModel):
|
||||
|
||||
@@ -163,7 +163,7 @@ class SafeCookieData:
|
||||
safe_cookie_data = SafeCookieData(
|
||||
cls.CURRENT_VERSION,
|
||||
session_id,
|
||||
key_salt=get_random_string(),
|
||||
key_salt=get_random_string(12),
|
||||
signature=None,
|
||||
)
|
||||
safe_cookie_data.sign(user_id)
|
||||
|
||||
@@ -7,7 +7,7 @@ from django.contrib import admin
|
||||
from django.db.models import F
|
||||
from django.urls import reverse
|
||||
from django.utils.html import format_html
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
|
||||
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# lint-amnesty, pylint: disable=missing-module-docstring
|
||||
|
||||
from django.apps import AppConfig
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from edx_django_utils.plugins import PluginSignals # lint-amnesty, pylint: disable=unused-import
|
||||
|
||||
from openedx.core.djangoapps.plugins.constants import ProjectType # lint-amnesty, pylint: disable=unused-import
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
from config_models.models import ConfigurationModel
|
||||
from django.contrib.sites.models import Site
|
||||
from django.db import models
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from model_utils import Choices
|
||||
from model_utils.models import TimeStampedModel
|
||||
from simple_history.models import HistoricalRecords
|
||||
|
||||
@@ -5,7 +5,7 @@ Configuration for self-paced courses.
|
||||
|
||||
from config_models.models import ConfigurationModel
|
||||
from django.db.models import BooleanField
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class SelfPacedConfiguration(ConfigurationModel):
|
||||
|
||||
@@ -6,43 +6,39 @@ This module contains all general use signals.
|
||||
from django.dispatch import Signal
|
||||
|
||||
# Signal that fires when a user is graded
|
||||
COURSE_GRADE_CHANGED = Signal(providing_args=["user", "course_grade", "course_key", "deadline"])
|
||||
# providing_args=["user", "course_grade", "course_key", "deadline"]
|
||||
COURSE_GRADE_CHANGED = Signal()
|
||||
|
||||
# Signal that fires when a user is awarded a certificate in a course (in the certificates django app)
|
||||
# TODO: runtime coupling between apps will be reduced if this event is changed to carry a username
|
||||
# rather than a User object; however, this will require changes to the milestones and badges APIs
|
||||
COURSE_CERT_CHANGED = Signal(providing_args=["user", "course_key", "mode", "status"])
|
||||
COURSE_CERT_AWARDED = Signal(providing_args=["user", "course_key", "mode", "status"])
|
||||
COURSE_CERT_REVOKED = Signal(providing_args=["user", "course_key", "mode", "status"])
|
||||
COURSE_CERT_DATE_CHANGE = Signal(providing_args=["course_key", "available_date"])
|
||||
# Same providing_args=["user", "course_key", "mode", "status"] for next 3 signals.
|
||||
COURSE_CERT_CHANGED = Signal()
|
||||
COURSE_CERT_AWARDED = Signal()
|
||||
COURSE_CERT_REVOKED = Signal()
|
||||
# providing_args=["course_key", "available_date"]
|
||||
COURSE_CERT_DATE_CHANGE = Signal()
|
||||
|
||||
|
||||
COURSE_ASSESSMENT_GRADE_CHANGED = Signal(
|
||||
providing_args=[
|
||||
'user',
|
||||
'course_id',
|
||||
'subsection_id',
|
||||
'subsection_grade',
|
||||
]
|
||||
)
|
||||
# providing_args=['user', 'course_id', 'subsection_id', 'subsection_grade', ]
|
||||
COURSE_ASSESSMENT_GRADE_CHANGED = Signal()
|
||||
|
||||
# Signal that indicates that a user has passed a course.
|
||||
COURSE_GRADE_NOW_PASSED = Signal(
|
||||
providing_args=[
|
||||
'user', # user object
|
||||
'course_id', # course.id
|
||||
]
|
||||
)
|
||||
# providing_args=[
|
||||
# 'user', # user object
|
||||
# 'course_id', # course.id
|
||||
# ]
|
||||
COURSE_GRADE_NOW_PASSED = Signal()
|
||||
#Signal that indicates a user is now failing a course that they had previously passed.
|
||||
COURSE_GRADE_NOW_FAILED = Signal(
|
||||
providing_args=[
|
||||
'user', # user object
|
||||
'course_id', # course.id
|
||||
'grade', # CourseGrade object
|
||||
]
|
||||
)
|
||||
# providing_args=[
|
||||
# 'user', # user object
|
||||
# 'course_id', # course.id
|
||||
# 'grade', # CourseGrade object
|
||||
# ]
|
||||
COURSE_GRADE_NOW_FAILED = Signal()
|
||||
|
||||
# Signal that indicates that a user has become verified for certificate purposes
|
||||
LEARNER_NOW_VERIFIED = Signal(providing_args=['user'])
|
||||
# providing_args=['user']
|
||||
LEARNER_NOW_VERIFIED = Signal()
|
||||
|
||||
USER_ACCOUNT_ACTIVATED = Signal(providing_args=["user"]) # Signal indicating email verification
|
||||
# providing_args=['user']
|
||||
USER_ACCOUNT_ACTIVATED = Signal() # Signal indicating email verification
|
||||
|
||||
@@ -4,7 +4,7 @@ Django template context processors.
|
||||
|
||||
|
||||
from django.conf import settings
|
||||
from django.utils.http import urlquote_plus
|
||||
from urllib.parse import quote_plus
|
||||
|
||||
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
|
||||
|
||||
@@ -15,6 +15,6 @@ def configuration_context(request):
|
||||
"""
|
||||
return {
|
||||
'platform_name': configuration_helpers.get_value('platform_name', settings.PLATFORM_NAME),
|
||||
'current_url': urlquote_plus(request.build_absolute_uri(request.path)),
|
||||
'current_site_url': urlquote_plus(request.build_absolute_uri('/')),
|
||||
'current_url': quote_plus(request.build_absolute_uri(request.path)),
|
||||
'current_site_url': quote_plus(request.build_absolute_uri('/')),
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ from django.http import Http404
|
||||
from django.shortcuts import redirect
|
||||
from django.template.loader import render_to_string
|
||||
from django.utils.decorators import method_decorator
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.utils.translation import gettext as _
|
||||
from web_fragments.fragment import Fragment
|
||||
|
||||
from openedx.core.djangoapps.plugin_api.views import EdxFragmentView
|
||||
|
||||
@@ -4,7 +4,7 @@ Account constants
|
||||
|
||||
from django.conf import settings
|
||||
from django.utils.text import format_lazy
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
# The maximum length for the bio ("about me") account field
|
||||
BIO_MAX_LENGTH = 300
|
||||
|
||||
@@ -10,7 +10,7 @@ from django.conf import settings
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
from django.core.validators import ValidationError, validate_email
|
||||
from django.utils.translation import override as override_language
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.utils.translation import gettext as _
|
||||
from edx_name_affirmation.name_change_validator import NameChangeValidator
|
||||
from edx_name_affirmation.toggles import is_verified_name_enabled
|
||||
from pytz import UTC
|
||||
|
||||
@@ -10,7 +10,7 @@ from django.contrib import messages
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.shortcuts import redirect
|
||||
from django.urls import reverse
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.utils.translation import gettext as _
|
||||
from django.views.decorators.http import require_http_methods
|
||||
from django_countries import countries
|
||||
|
||||
|
||||
Reference in New Issue
Block a user