diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3c4bdd54..a4c78cb0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,7 +15,7 @@ jobs: matrix: os: [ubuntu-20.04] python-version: ['3.8'] - toxenv: [django32, quality] + toxenv: [django32, django42, quality] steps: - uses: actions/checkout@v2 @@ -36,7 +36,7 @@ jobs: run: tox - name: Run Coverage - if: matrix.python-version == '3.8' && matrix.toxenv=='django32' + if: matrix.python-version == '3.8' && matrix.toxenv=='django42' uses: codecov/codecov-action@v2 with: flags: unittests diff --git a/edxval/__init__.py b/edxval/__init__.py index efb7d67a..1af498d1 100644 --- a/edxval/__init__.py +++ b/edxval/__init__.py @@ -2,4 +2,4 @@ init """ -__version__ = '2.3.0' +__version__ = '2.4.0' diff --git a/edxval/admin.py b/edxval/admin.py index 8da3c491..4093db76 100644 --- a/edxval/admin.py +++ b/edxval/admin.py @@ -17,6 +17,7 @@ ) +@admin.register(Profile) class ProfileAdmin(admin.ModelAdmin): """ Admin for profile """ list_display = ('id', 'profile_name') @@ -37,6 +38,7 @@ class CourseVideoInline(admin.TabularInline): verbose_name_plural = "Courses" +@admin.register(Video) class VideoAdmin(admin.ModelAdmin): """ Admin for Video """ list_display = ( @@ -49,63 +51,66 @@ class VideoAdmin(admin.ModelAdmin): inlines = [CourseVideoInline, EncodedVideoInline] +@admin.register(VideoImage) class VideoImageAdmin(admin.ModelAdmin): """ Admin for VideoImage """ raw_id_fields = ('course_video', ) list_display = ('get_course_video', 'image', 'generated_images') search_fields = ('id', 'course_video__course_id', 'course_video__video__edx_video_id', 'generated_images') + @admin.display( + description='Course Video', + ordering='course_video', + ) def get_course_video(self, obj): """ get course video """ return '"{course_id}" -- "{edx_video_id}" '.format( course_id=obj.course_video.course_id, edx_video_id=obj.course_video.video.edx_video_id ) - - get_course_video.admin_order_field = 'course_video' - get_course_video.short_description = 'Course Video' - model = VideoImage - verbose_name = 'Video Image' verbose_name_plural = 'Video Images' +@admin.register(CourseVideo) class CourseVideoAdmin(admin.ModelAdmin): """ Admin for CourseVideo """ list_display = ('course_id', 'get_video_id', 'is_hidden') search_fields = ('id', 'course_id', 'video__status', 'video__edx_video_id') + @admin.display( + description='edX Video Id', + ordering='video', + ) def get_video_id(self, obj): """ get video id """ return obj.video.edx_video_id - - get_video_id.admin_order_field = 'video' - get_video_id.short_description = 'edX Video Id' - model = CourseVideo verbose_name = 'Course Video' verbose_name_plural = 'Course Videos' +@admin.register(VideoTranscript) class VideoTranscriptAdmin(admin.ModelAdmin): """ Admin for VideoTranscript """ raw_id_fields = ('video',) list_display = ('get_video', 'language_code', 'provider', 'file_format') search_fields = ('id', 'video__edx_video_id', 'language_code') + @admin.display( + description='Video', + ordering='video', + ) def get_video(self, transcript): """ get video """ return transcript.video.edx_video_id if getattr(transcript, 'video', False) else '' - - get_video.admin_order_field = 'video' - get_video.short_description = 'Video' - model = VideoTranscript verbose_name = 'Video Transcript' verbose_name_plural = 'Video Transcripts' +@admin.register(TranscriptPreference) class TranscriptPreferenceAdmin(admin.ModelAdmin): """ Admin for TranscriptPreference """ list_display = ('course_id', 'provider', 'video_source_language', 'preferred_languages') @@ -113,6 +118,7 @@ class TranscriptPreferenceAdmin(admin.ModelAdmin): model = TranscriptPreference +@admin.register(ThirdPartyTranscriptCredentialsState) class ThirdPartyTranscriptCredentialsStateAdmin(admin.ModelAdmin): """ Admin for ThirdPartyTranscriptCredentialsState """ list_display = ('org', 'provider', 'has_creds', 'created', 'modified') @@ -120,12 +126,3 @@ class ThirdPartyTranscriptCredentialsStateAdmin(admin.ModelAdmin): model = ThirdPartyTranscriptCredentialsState verbose_name = 'Organization Transcript Credential State' verbose_name_plural = 'Organization Transcript Credentials State' - - -admin.site.register(Profile, ProfileAdmin) -admin.site.register(Video, VideoAdmin) -admin.site.register(VideoTranscript, VideoTranscriptAdmin) -admin.site.register(TranscriptPreference, TranscriptPreferenceAdmin) -admin.site.register(VideoImage, VideoImageAdmin) -admin.site.register(CourseVideo, CourseVideoAdmin) -admin.site.register(ThirdPartyTranscriptCredentialsState, ThirdPartyTranscriptCredentialsStateAdmin) diff --git a/tox.ini b/tox.ini index d7cae15b..196a5857 100644 --- a/tox.ini +++ b/tox.ini @@ -1,10 +1,11 @@ [tox] -envlist = py38-django{32}, quality +envlist = py38-django{32,42}, quality [testenv] deps = django32: Django>=3.2,<4.0 django40: Django>=4.0,<4.1 + django42: Django>=4.2,<4.3 -r{toxinidir}/requirements/test.txt commands = python -Wd -m pytest {posargs}