Reformat using black

This commit is contained in:
cuom1999 2022-05-14 12:57:27 -05:00
parent efee4ad081
commit a87fb49918
221 changed files with 19127 additions and 7310 deletions

View file

@ -6,17 +6,25 @@ from django.utils.safestring import mark_safe
class CheckboxSelectMultipleWithSelectAll(forms.CheckboxSelectMultiple):
def render(self, name, value, attrs=None, renderer=None):
if 'id' not in attrs:
raise FieldError('id required')
if "id" not in attrs:
raise FieldError("id required")
select_all_id = attrs['id'] + '_all'
select_all_name = name + '_all'
original = super(CheckboxSelectMultipleWithSelectAll, self).render(name, value, attrs, renderer)
template = get_template('widgets/select_all.html')
return mark_safe(template.render({
'original_widget': original,
'select_all_id': select_all_id,
'select_all_name': select_all_name,
'all_selected': all(choice[0] in value for choice in self.choices) if value else False,
'empty': not self.choices,
}))
select_all_id = attrs["id"] + "_all"
select_all_name = name + "_all"
original = super(CheckboxSelectMultipleWithSelectAll, self).render(
name, value, attrs, renderer
)
template = get_template("widgets/select_all.html")
return mark_safe(
template.render(
{
"original_widget": original,
"select_all_id": select_all_id,
"select_all_name": select_all_name,
"all_selected": all(choice[0] in value for choice in self.choices)
if value
else False,
"empty": not self.choices,
}
)
)

View file

@ -7,23 +7,27 @@ from lxml import html
class CompressorWidgetMixin(object):
__template_css = dedent('''\
__template_css = dedent(
"""\
{% compress css %}
{{ media.css }}
{% endcompress %}
''')
"""
)
__template_js = dedent('''\
__template_js = dedent(
"""\
{% compress js %}
{{ media.js }}
{% endcompress %}
''')
"""
)
__templates = {
(False, False): Template(''),
(True, False): Template('{% load compress %}' + __template_css),
(False, True): Template('{% load compress %}' + __template_js),
(True, True): Template('{% load compress %}' + __template_js + __template_css),
(False, False): Template(""),
(True, False): Template("{% load compress %}" + __template_css),
(False, True): Template("{% load compress %}" + __template_js),
(True, True): Template("{% load compress %}" + __template_js + __template_css),
}
compress_css = False
@ -34,14 +38,19 @@ class CompressorWidgetMixin(object):
except ImportError:
pass
else:
if getattr(settings, 'COMPRESS_ENABLED', not settings.DEBUG):
if getattr(settings, "COMPRESS_ENABLED", not settings.DEBUG):
@property
def media(self):
media = super().media
template = self.__templates[self.compress_css, self.compress_js]
result = html.fromstring(template.render(Context({'media': media})))
result = html.fromstring(template.render(Context({"media": media})))
return forms.Media(
css={'all': [result.find('.//link').get('href')]} if self.compress_css else media._css,
js=[result.find('.//script').get('src')] if self.compress_js else media._js,
css={"all": [result.find(".//link").get("href")]}
if self.compress_css
else media._css,
js=[result.find(".//script").get("src")]
if self.compress_js
else media._js,
)

View file

@ -6,9 +6,14 @@ from django.utils.html import conditional_escape
from judge.widgets.mixins import CompressorWidgetMixin
__all__ = ['PagedownWidget', 'AdminPagedownWidget',
'MathJaxPagedownWidget', 'MathJaxAdminPagedownWidget',
'HeavyPreviewPageDownWidget', 'HeavyPreviewAdminPageDownWidget']
__all__ = [
"PagedownWidget",
"AdminPagedownWidget",
"MathJaxPagedownWidget",
"MathJaxAdminPagedownWidget",
"HeavyPreviewPageDownWidget",
"HeavyPreviewAdminPageDownWidget",
]
try:
from pagedown.widgets import PagedownWidget as OldPagedownWidget
@ -20,6 +25,7 @@ except ImportError:
HeavyPreviewPageDownWidget = None
HeavyPreviewAdminPageDownWidget = None
else:
class PagedownWidget(CompressorWidgetMixin, OldPagedownWidget):
# The goal here is to compress all the pagedown JS into one file.
# We do not want any further compress down the chain, because
@ -28,23 +34,25 @@ else:
compress_js = True
def __init__(self, *args, **kwargs):
kwargs.setdefault('css', ('pagedown_widget.css',))
kwargs.setdefault("css", ("pagedown_widget.css",))
super(PagedownWidget, self).__init__(*args, **kwargs)
class AdminPagedownWidget(PagedownWidget, admin_widgets.AdminTextareaWidget):
class Media:
css = {'all': [
'content-description.css',
'admin/css/pagedown.css',
]}
js = ['admin/js/pagedown.js']
css = {
"all": [
"content-description.css",
"admin/css/pagedown.css",
]
}
js = ["admin/js/pagedown.js"]
class MathJaxPagedownWidget(PagedownWidget):
class Media:
js = [
'mathjax_config.js',
'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_HTMLorMML',
'pagedown_math.js',
"mathjax_config.js",
"https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_HTMLorMML",
"pagedown_math.js",
]
class MathJaxAdminPagedownWidget(AdminPagedownWidget, MathJaxPagedownWidget):
@ -52,40 +60,46 @@ else:
class HeavyPreviewPageDownWidget(PagedownWidget):
def __init__(self, *args, **kwargs):
kwargs.setdefault('template', 'pagedown.html')
self.preview_url = kwargs.pop('preview')
self.preview_timeout = kwargs.pop('preview_timeout', None)
self.hide_preview_button = kwargs.pop('hide_preview_button', False)
kwargs.setdefault("template", "pagedown.html")
self.preview_url = kwargs.pop("preview")
self.preview_timeout = kwargs.pop("preview_timeout", None)
self.hide_preview_button = kwargs.pop("hide_preview_button", False)
super(HeavyPreviewPageDownWidget, self).__init__(*args, **kwargs)
def render(self, name, value, attrs=None, renderer=None):
if value is None:
value = ''
final_attrs = self.build_attrs(attrs, {'name': name})
if 'class' not in final_attrs:
final_attrs['class'] = ''
final_attrs['class'] += ' wmd-input'
return get_template(self.template).render(self.get_template_context(final_attrs, value))
value = ""
final_attrs = self.build_attrs(attrs, {"name": name})
if "class" not in final_attrs:
final_attrs["class"] = ""
final_attrs["class"] += " wmd-input"
return get_template(self.template).render(
self.get_template_context(final_attrs, value)
)
def get_template_context(self, attrs, value):
return {
'attrs': flatatt(attrs),
'body': conditional_escape(force_text(value)),
'id': attrs['id'],
'show_preview': self.show_preview,
'preview_url': self.preview_url,
'preview_timeout': self.preview_timeout,
'extra_classes': 'dmmd-no-button' if self.hide_preview_button else None,
"attrs": flatatt(attrs),
"body": conditional_escape(force_text(value)),
"id": attrs["id"],
"show_preview": self.show_preview,
"preview_url": self.preview_url,
"preview_timeout": self.preview_timeout,
"extra_classes": "dmmd-no-button" if self.hide_preview_button else None,
}
class Media:
css = {'all': ['dmmd-preview.css']}
js = ['dmmd-preview.js']
css = {"all": ["dmmd-preview.css"]}
js = ["dmmd-preview.js"]
class HeavyPreviewAdminPageDownWidget(AdminPagedownWidget, HeavyPreviewPageDownWidget):
class HeavyPreviewAdminPageDownWidget(
AdminPagedownWidget, HeavyPreviewPageDownWidget
):
class Media:
css = {'all': [
'pygment-github.css',
'table.css',
'ranks.css',
]}
css = {
"all": [
"pygment-github.css",
"table.css",
"ranks.css",
]
}

View file

@ -46,13 +46,23 @@ from django.core import signing
from django.forms.models import ModelChoiceIterator
from django.urls import reverse_lazy
DEFAULT_SELECT2_JS = '//cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js'
DEFAULT_SELECT2_CSS = '//cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css'
DEFAULT_SELECT2_JS = "//cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"
DEFAULT_SELECT2_CSS = (
"//cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css"
)
__all__ = ['Select2Widget', 'Select2MultipleWidget', 'Select2TagWidget',
'HeavySelect2Widget', 'HeavySelect2MultipleWidget', 'HeavySelect2TagWidget',
'AdminSelect2Widget', 'AdminSelect2MultipleWidget', 'AdminHeavySelect2Widget',
'AdminHeavySelect2MultipleWidget']
__all__ = [
"Select2Widget",
"Select2MultipleWidget",
"Select2TagWidget",
"HeavySelect2Widget",
"HeavySelect2MultipleWidget",
"HeavySelect2TagWidget",
"AdminSelect2Widget",
"AdminSelect2MultipleWidget",
"AdminHeavySelect2Widget",
"AdminHeavySelect2MultipleWidget",
]
class Select2Mixin(object):
@ -68,22 +78,22 @@ class Select2Mixin(object):
"""Add select2 data attributes."""
attrs = super(Select2Mixin, self).build_attrs(base_attrs, extra_attrs)
if self.is_required:
attrs.setdefault('data-allow-clear', 'false')
attrs.setdefault("data-allow-clear", "false")
else:
attrs.setdefault('data-allow-clear', 'true')
attrs.setdefault('data-placeholder', '')
attrs.setdefault("data-allow-clear", "true")
attrs.setdefault("data-placeholder", "")
attrs.setdefault('data-minimum-input-length', 0)
if 'class' in attrs:
attrs['class'] += ' django-select2'
attrs.setdefault("data-minimum-input-length", 0)
if "class" in attrs:
attrs["class"] += " django-select2"
else:
attrs['class'] = 'django-select2'
attrs["class"] = "django-select2"
return attrs
def optgroups(self, name, value, attrs=None):
"""Add empty option for clearable selects."""
if not self.is_required and not self.allow_multiple_selected:
self.choices = list(chain([('', '')], self.choices))
self.choices = list(chain([("", "")], self.choices))
return super(Select2Mixin, self).optgroups(name, value, attrs=attrs)
@property
@ -95,8 +105,8 @@ class Select2Mixin(object):
https://docs.djangoproject.com/en/1.8/topics/forms/media/#media-as-a-dynamic-property
"""
return forms.Media(
js=[settings.SELECT2_JS_URL, 'django_select2.js'],
css={'screen': [settings.SELECT2_CSS_URL]},
js=[settings.SELECT2_JS_URL, "django_select2.js"],
css={"screen": [settings.SELECT2_CSS_URL]},
)
@ -104,8 +114,12 @@ class AdminSelect2Mixin(Select2Mixin):
@property
def media(self):
return forms.Media(
js=['admin/js/jquery.init.js', settings.SELECT2_JS_URL, 'django_select2.js'],
css={'screen': [settings.SELECT2_CSS_URL]},
js=[
"admin/js/jquery.init.js",
settings.SELECT2_JS_URL,
"django_select2.js",
],
css={"screen": [settings.SELECT2_CSS_URL]},
)
@ -115,9 +129,9 @@ class Select2TagMixin(object):
def build_attrs(self, base_attrs, extra_attrs=None):
"""Add select2's tag attributes."""
extra_attrs = extra_attrs or {}
extra_attrs.setdefault('data-minimum-input-length', 1)
extra_attrs.setdefault('data-tags', 'true')
extra_attrs.setdefault('data-token-separators', [",", " "])
extra_attrs.setdefault("data-minimum-input-length", 1)
extra_attrs.setdefault("data-tags", "true")
extra_attrs.setdefault("data-token-separators", [",", " "])
return super(Select2TagMixin, self).build_attrs(base_attrs, extra_attrs)
@ -182,8 +196,8 @@ class HeavySelect2Mixin(Select2Mixin):
else:
self.attrs = {}
self.data_view = kwargs.pop('data_view', None)
self.data_url = kwargs.pop('data_url', None)
self.data_view = kwargs.pop("data_view", None)
self.data_url = kwargs.pop("data_url", None)
if not (self.data_view or self.data_url):
raise ValueError('You must ether specify "data_view" or "data_url".')
@ -201,22 +215,22 @@ class HeavySelect2Mixin(Select2Mixin):
# encrypt instance Id
self.widget_id = signing.dumps(id(self))
attrs['data-field_id'] = self.widget_id
attrs.setdefault('data-ajax--url', self.get_url())
attrs.setdefault('data-ajax--cache', "true")
attrs.setdefault('data-ajax--type', "GET")
attrs.setdefault('data-minimum-input-length', 2)
attrs["data-field_id"] = self.widget_id
attrs.setdefault("data-ajax--url", self.get_url())
attrs.setdefault("data-ajax--cache", "true")
attrs.setdefault("data-ajax--type", "GET")
attrs.setdefault("data-minimum-input-length", 2)
attrs['class'] += ' django-select2-heavy'
attrs["class"] += " django-select2-heavy"
return attrs
def format_value(self, value):
result = super(HeavySelect2Mixin, self).format_value(value)
if isinstance(self.choices, ModelChoiceIterator):
chosen = copy(self.choices)
chosen.queryset = chosen.queryset.filter(pk__in=[
int(i) for i in result if isinstance(i, int) or i.isdigit()
])
chosen.queryset = chosen.queryset.filter(
pk__in=[int(i) for i in result if isinstance(i, int) or i.isdigit()]
)
self.choices = set(chosen)
return result