Skip to content

Commit

Permalink
Merge pull request #82 from mcpt/revamp-merge-base
Browse files Browse the repository at this point in the history
  • Loading branch information
JasonLovesDoggo authored Jan 10, 2025
2 parents 8d026ad + 4c6a985 commit 5c20258
Show file tree
Hide file tree
Showing 127 changed files with 43,430 additions and 863 deletions.
5 changes: 1 addition & 4 deletions .flake8
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[flake8]
max-line-length = 120
application-import-names = dmoj,judge,django_ace
application-import-names = dmoj,judge,django_ace,martor
import-order-style = pycharm
enable-extensions = G
ignore =
Expand All @@ -18,9 +18,6 @@ per-file-ignores =
./judge/management/commands/runmoss.py:F403,F405
# E501: line too long, ignore in migrations
./judge/migrations/*.py:E501
# E303: too many blank lines
# PyCharm likes to have double lines between class/def in an if statement.
./judge/widgets/pagedown.py:E303
exclude =
# belongs to the user
./dmoj/local_settings.py,
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@
*~
*.swp
dmoj/local_settings.py
resources/ace-dmoj.css
resources/dark
resources/featherlight.css
resources/martor-description.css
resources/select2-dmoj.css
resources/style.css
Expand Down
4 changes: 0 additions & 4 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
[submodule "resources/pagedown"]
path = resources/pagedown
url = https://github.com/DMOJ/dmoj-pagedown.git
branch = master
[submodule "resources/libs"]
path = resources/libs
url = https://github.com/DMOJ/site-assets.git
Expand Down
2 changes: 1 addition & 1 deletion django_ace/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
"""
Django-ace originally from https://github.com/bradleyayers/django-ace.
Django-ace originally from https://github.com/django-ace/django-ace.
"""

from .widgets import AceWidget
58 changes: 0 additions & 58 deletions django_ace/static/django_ace/widget.css

This file was deleted.

10 changes: 4 additions & 6 deletions django_ace/widgets.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
"""
Django-ace originally from https://github.com/bradleyayers/django-ace.
Django-ace originally from https://github.com/django-ace/django-ace.
"""

from urllib.parse import urljoin
Expand All @@ -25,10 +25,7 @@ def __init__(self, mode=None, theme=None, wordwrap=False, width='100%', height='
def media(self):
js = [urljoin(settings.ACE_URL, 'ace.js')] if self.ace_media else []
js.append('django_ace/widget.js')
css = {
'screen': ['django_ace/widget.css'],
}
return forms.Media(js=js, css=css)
return forms.Media(js=js)

def render(self, name, value, attrs=None, renderer=None):
attrs = attrs or {}
Expand All @@ -53,7 +50,8 @@ def render(self, name, value, attrs=None, renderer=None):
html = '<div%s><div></div></div>%s' % (flatatt(ace_attrs), textarea)

# add toolbar
html = ('<div class="django-ace-editor"><div style="width: 100%%" class="django-ace-toolbar">'
html = ('<div style="width: 100%%" class="django-ace-editor">'
'<div style="width: 100%%" class="django-ace-toolbar">'
'<a href="./" class="django-ace-max_min"></a></div>%s</div>') % html

return mark_safe(html)
15 changes: 6 additions & 9 deletions dmoj/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
Django settings for dmoj project.
For more information on this file, see
https://docs.djangoproject.com/en/3.2/topics/settings/
https://docs.djangoproject.com/en/4.2/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.2/ref/settings/
https://docs.djangoproject.com/en/4.2/ref/settings/
"""

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
Expand All @@ -19,7 +19,7 @@
BASE_DIR = os.path.dirname(os.path.dirname(__file__))

# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/
# See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '5*9f5q57mqmlz2#f$x1h76&jxy#yortjl1v+l*6hd18$d*yx#0'
Expand Down Expand Up @@ -272,7 +272,6 @@
'social_django',
'compressor',
'django_ace',
'pagedown',
'sortedm2m',
'statici18n',
'impersonate',
Expand Down Expand Up @@ -496,9 +495,7 @@
MARTOR_ENABLE_CONFIGS = {
'imgur': 'true',
'mention': 'true',
'jquery': 'false',
'living': 'false',
'spellcheck': 'false',
'hljs': 'false',
}
MARTOR_MARKDOWNIFY_URL = '/widgets/preview/default'
Expand All @@ -511,7 +508,7 @@
MARTOR_UPLOAD_SAFE_EXTS = {'.jpg', '.png', '.gif'}

# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases
# https://docs.djangoproject.com/en/4.2/ref/settings/#databases

DATABASES = {
'default': {
Expand All @@ -538,7 +535,7 @@
EVENT_DAEMON_SUBMISSION_KEY = '6Sdmkx^%pk@GsifDfXcwX*Y7LRF%RGT8vmFpSxFBT$fwS7trc8raWfN#CSfQuKApx&$B#Gh2L7p%W!Ww'

# Internationalization
# https://docs.djangoproject.com/en/3.2/topics/i18n/
# https://docs.djangoproject.com/en/4.2/topics/i18n/

# Whatever you do, this better be one of the entries in `LANGUAGES`.
LANGUAGE_CODE = 'en'
Expand All @@ -552,7 +549,7 @@
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.2/howto/static-files/
# https://docs.djangoproject.com/en/4.2/howto/static-files/

DMOJ_RESOURCES = os.path.join(BASE_DIR, 'resources')
STATICFILES_FINDERS = (
Expand Down
2 changes: 1 addition & 1 deletion dmoj/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
from django.utils.functional import lazy
from django.utils.translation import gettext_lazy as _
from django.views.generic import RedirectView
from martor.views import markdown_search_user

from judge.feed import AtomBlogFeed, AtomCommentFeed, AtomProblemFeed, BlogFeed, CommentFeed, ProblemFeed
from judge.sitemap import sitemaps
Expand All @@ -25,6 +24,7 @@
ContestUserSearchSelect2View, OrganizationSelect2View, ProblemSelect2View, TicketUserSelect2View, \
UserSearchSelect2View, UserSelect2View
from judge.views.widgets import martor_image_uploader
from martor.views import markdown_search_user

admin.autodiscover()

Expand Down
2 changes: 1 addition & 1 deletion dmoj_install_pymysql.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import pymysql

pymysql.install_as_MySQLdb()
pymysql.version_info = (1, 4, 0, 'final', 0)
pymysql.version_info = (1, 4, 3, 'final', 0)
1 change: 0 additions & 1 deletion judge/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +0,0 @@
default_app_config = 'judge.apps.JudgeAppConfig'
25 changes: 10 additions & 15 deletions judge/admin/contest.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from adminsortable2.admin import SortableInlineAdminMixin
from adminsortable2.admin import SortableAdminBase, SortableInlineAdminMixin
from django.contrib import admin
from django.core.exceptions import PermissionDenied
from django.db import connection, transaction
Expand All @@ -14,12 +14,11 @@
from django.views.decorators.http import require_POST
from reversion.admin import VersionAdmin

from django_ace import AceWidget
from judge.models import Class, Contest, ContestProblem, ContestSubmission, Profile, Rating, Submission
from judge.ratings import rate_contest
from judge.utils.views import NoBatchDeleteMixin
from judge.widgets import AdminHeavySelect2MultipleWidget, AdminHeavySelect2Widget, AdminMartorWidget, \
AdminSelect2MultipleWidget, AdminSelect2Widget
from judge.widgets import AdminAceWidget, AdminHeavySelect2MultipleWidget, AdminHeavySelect2Widget, \
AdminMartorWidget, AdminSelect2MultipleWidget, AdminSelect2Widget


class AdminHeavySelect2Widget(AdminHeavySelect2Widget):
Expand Down Expand Up @@ -101,23 +100,19 @@ class Meta:
'curators': AdminHeavySelect2MultipleWidget(data_view='profile_select2'),
'testers': AdminHeavySelect2MultipleWidget(data_view='profile_select2'),
'spectators': AdminHeavySelect2MultipleWidget(data_view='profile_select2'),
'private_contestants': AdminHeavySelect2MultipleWidget(data_view='profile_select2',
attrs={'style': 'width: 100%'}),
'private_contestants': AdminHeavySelect2MultipleWidget(data_view='profile_select2'),
'organizations': AdminHeavySelect2MultipleWidget(data_view='organization_select2'),
'classes': AdminHeavySelect2MultipleWidget(data_view='class_select2'),
'join_organizations': AdminHeavySelect2MultipleWidget(data_view='organization_select2'),
'tags': AdminSelect2MultipleWidget,
'banned_users': AdminHeavySelect2MultipleWidget(data_view='profile_select2',
attrs={'style': 'width: 100%'}),
'view_contest_scoreboard': AdminHeavySelect2MultipleWidget(data_view='profile_select2',
attrs={'style': 'width: 100%'}),
'view_contest_submissions': AdminHeavySelect2MultipleWidget(data_view='profile_select2',
attrs={'style': 'width: 100%'}),
'banned_users': AdminHeavySelect2MultipleWidget(data_view='profile_select2'),
'view_contest_scoreboard': AdminHeavySelect2MultipleWidget(data_view='profile_select2'),
'view_contest_submissions': AdminHeavySelect2MultipleWidget(data_view='profile_select2'),
'description': AdminMartorWidget(attrs={'data-markdownfy-url': reverse_lazy('contest_preview')}),
}


class ContestAdmin(NoBatchDeleteMixin, VersionAdmin):
class ContestAdmin(NoBatchDeleteMixin, SortableAdminBase, VersionAdmin):
fieldsets = (
(None, {'fields': ('key', 'name', 'authors', 'curators', 'testers', 'tester_see_submissions',
'tester_see_scoreboard', 'spectators')}),
Expand Down Expand Up @@ -309,14 +304,14 @@ def rate_view(self, request, id):
raise Http404()
with transaction.atomic():
contest.rate()
return HttpResponseRedirect(request.META.get('HTTP_REFERER', reverse('admin:judge_contest_changelist')))
return HttpResponseRedirect(request.headers.get('referer', reverse('admin:judge_contest_changelist')))

def get_form(self, request, obj=None, **kwargs):
form = super(ContestAdmin, self).get_form(request, obj, **kwargs)
if 'problem_label_script' in form.base_fields:
# form.base_fields['problem_label_script'] does not exist when the user has only view permission
# on the model.
form.base_fields['problem_label_script'].widget = AceWidget(
form.base_fields['problem_label_script'].widget = AdminAceWidget(
mode='lua', theme=request.profile.resolved_ace_theme,
)

Expand Down
6 changes: 3 additions & 3 deletions judge/admin/interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ def __init__(self, *args, **kwargs):

class Meta:
widgets = {
'authors': AdminHeavySelect2MultipleWidget(data_view='profile_select2', attrs={'style': 'width: 100%'}),
'authors': AdminHeavySelect2MultipleWidget(data_view='profile_select2'),
'content': AdminMartorWidget(attrs={'data-markdownfy-url': reverse_lazy('blog_preview')}),
'summary': AdminMartorWidget(attrs={'data-markdownfy-url': reverse_lazy('blog_preview')}),
}
Expand Down Expand Up @@ -104,8 +104,8 @@ def __init__(self, *args, **kwargs):

class Meta:
widgets = {
'authors': AdminHeavySelect2MultipleWidget(data_view='profile_select2', attrs={'style': 'width: 100%'}),
'problem': AdminHeavySelect2Widget(data_view='problem_select2', attrs={'style': 'width: 250px'}),
'authors': AdminHeavySelect2MultipleWidget(data_view='profile_select2'),
'problem': AdminHeavySelect2Widget(data_view='problem_select2'),
'content': AdminMartorWidget(attrs={'data-markdownfy-url': reverse_lazy('solution_preview')}),
}

Expand Down
14 changes: 6 additions & 8 deletions judge/admin/problem.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,11 @@ def __init__(self, *args, **kwargs):

class Meta:
widgets = {
'authors': AdminHeavySelect2MultipleWidget(data_view='profile_select2', attrs={'style': 'width: 100%'}),
'curators': AdminHeavySelect2MultipleWidget(data_view='profile_select2', attrs={'style': 'width: 100%'}),
'testers': AdminHeavySelect2MultipleWidget(data_view='profile_select2', attrs={'style': 'width: 100%'}),
'banned_users': AdminHeavySelect2MultipleWidget(data_view='profile_select2',
attrs={'style': 'width: 100%'}),
'organizations': AdminHeavySelect2MultipleWidget(data_view='organization_select2',
attrs={'style': 'width: 100%'}),
'authors': AdminHeavySelect2MultipleWidget(data_view='profile_select2'),
'curators': AdminHeavySelect2MultipleWidget(data_view='profile_select2'),
'testers': AdminHeavySelect2MultipleWidget(data_view='profile_select2'),
'banned_users': AdminHeavySelect2MultipleWidget(data_view='profile_select2'),
'organizations': AdminHeavySelect2MultipleWidget(data_view='organization_select2'),
'types': AdminSelect2MultipleWidget,
'group': AdminSelect2Widget,
'description': AdminMartorWidget(attrs={'data-markdownfy-url': reverse_lazy('problem_preview')}),
Expand Down Expand Up @@ -89,7 +87,7 @@ def __init__(self, *args, **kwargs):

class Meta:
widgets = {
'authors': AdminHeavySelect2MultipleWidget(data_view='profile_select2', attrs={'style': 'width: 100%'}),
'authors': AdminHeavySelect2MultipleWidget(data_view='profile_select2'),
'content': AdminMartorWidget(attrs={'data-markdownfy-url': reverse_lazy('solution_preview')}),
}

Expand Down
5 changes: 2 additions & 3 deletions judge/admin/profile.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,9 @@
from django.utils.translation import gettext, gettext_lazy as _, ngettext
from reversion.admin import VersionAdmin

from django_ace import AceWidget
from judge.models import Profile, WebAuthnCredential
from judge.utils.views import NoBatchDeleteMixin
from judge.widgets import AdminMartorWidget, AdminSelect2Widget
from judge.widgets import AdminAceWidget, AdminMartorWidget, AdminSelect2Widget


class ProfileForm(ModelForm):
Expand Down Expand Up @@ -134,7 +133,7 @@ def get_form(self, request, obj=None, **kwargs):
form = super(ProfileAdmin, self).get_form(request, obj, **kwargs)
if 'user_script' in form.base_fields:
# form.base_fields['user_script'] does not exist when the user has only view permission on the model.
form.base_fields['user_script'].widget = AceWidget(
form.base_fields['user_script'].widget = AdminAceWidget(
mode='javascript', theme=request.profile.resolved_ace_theme,
)
return form
Expand Down
5 changes: 2 additions & 3 deletions judge/admin/runtime.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,8 @@
from django.views.decorators.http import require_POST
from reversion.admin import VersionAdmin

from django_ace import AceWidget
from judge.models import Judge
from judge.widgets import AdminMartorWidget
from judge.widgets import AdminAceWidget, AdminMartorWidget


class LanguageForm(ModelForm):
Expand All @@ -30,7 +29,7 @@ class LanguageAdmin(VersionAdmin):
def get_form(self, request, obj=None, **kwargs):
form = super(LanguageAdmin, self).get_form(request, obj, **kwargs)
if obj is not None:
form.base_fields['template'].widget = AceWidget(
form.base_fields['template'].widget = AdminAceWidget(
mode=obj.ace, theme=request.profile.resolved_ace_theme,
)
return form
Expand Down
Loading

0 comments on commit 5c20258

Please sign in to comment.