Skip to content
Snippets Groups Projects
Commit 7acf9639 authored by Samuel GAIST's avatar Samuel GAIST Committed by Flavio TARSETTI
Browse files

[ui][templatetags] Pre-commit cleanup

parent 616b301d
No related branches found
No related tags found
2 merge requests!368Cleanup ui,!342Django 3 migration
...@@ -26,30 +26,28 @@ ...@@ -26,30 +26,28 @@
############################################################################### ###############################################################################
from django import template from django import template
from django.templatetags.static import StaticNode
from django.contrib.staticfiles.storage import staticfiles_storage from django.contrib.staticfiles.storage import staticfiles_storage
from django.templatetags.static import StaticNode
from ... import __version__ from ... import __version__
register = template.Library() register = template.Library()
#-------------------------------------------------- # --------------------------------------------------
class FingerprintedFilesNode(StaticNode): class FingerprintedFilesNode(StaticNode):
def url(self, context): def url(self, context):
path = self.path.resolve(context) path = self.path.resolve(context)
url = staticfiles_storage.url(path) url = staticfiles_storage.url(path)
return url + '?v' + __version__ return url + "?v" + __version__
#-------------------------------------------------- # --------------------------------------------------
@register.tag('fingerprint') @register.tag("fingerprint")
def do_fingerprint(parser, token): def do_fingerprint(parser, token):
""" """
A template tag that returns the URL to a file A template tag that returns the URL to a file
......
...@@ -25,17 +25,16 @@ ...@@ -25,17 +25,16 @@
# # # #
############################################################################### ###############################################################################
from django.conf import settings
from django import template
from django.template.defaultfilters import stringfilter
import hashlib import hashlib
from django import template
from django.conf import settings
from django.template.defaultfilters import stringfilter
register = template.Library() register = template.Library()
#-------------------------------------------------- # --------------------------------------------------
@stringfilter @stringfilter
...@@ -43,13 +42,13 @@ def gravatar_hash(email): ...@@ -43,13 +42,13 @@ def gravatar_hash(email):
""" Computes the hash of an e-mail address to be recognized by gravatar.com """ Computes the hash of an e-mail address to be recognized by gravatar.com
""" """
to_hash = email.lower().encode("utf-8") to_hash = email.lower().encode("utf-8")
return hashlib.md5(to_hash).hexdigest() return hashlib.md5(to_hash).hexdigest() # nosec: B303
register.filter('gravatar_hash', gravatar_hash) register.filter("gravatar_hash", gravatar_hash)
#-------------------------------------------------- # --------------------------------------------------
@stringfilter @stringfilter
...@@ -57,9 +56,9 @@ def gravatar_url(email): ...@@ -57,9 +56,9 @@ def gravatar_url(email):
""" Returns the Gravatar URL of an e-mail address """ Returns the Gravatar URL of an e-mail address
""" """
if settings.USE_HTTPS_GRAVATAR: if settings.USE_HTTPS_GRAVATAR:
return 'https://secure.gravatar.com/avatar/' + gravatar_hash(email) return "https://secure.gravatar.com/avatar/" + gravatar_hash(email)
else: else:
return 'http://www.gravatar.com/avatar/' + gravatar_hash(email) return "http://www.gravatar.com/avatar/" + gravatar_hash(email)
register.filter('gravatar_url', gravatar_url) register.filter("gravatar_url", gravatar_url)
...@@ -36,18 +36,19 @@ markup syntaxes to HTML; currently there is support for: ...@@ -36,18 +36,19 @@ markup syntaxes to HTML; currently there is support for:
Source copied from: https://github.com/django/django/blob/stable/1.5.x/django/contrib/markup/templatetags/markup.py Source copied from: https://github.com/django/django/blob/stable/1.5.x/django/contrib/markup/templatetags/markup.py
""" """
from django import template from django import template
from django.conf import settings from django.conf import settings
from django.utils.encoding import force_bytes, force_text
from django.utils.safestring import mark_safe
from django.template.defaultfilters import stringfilter from django.template.defaultfilters import stringfilter
from django.utils.encoding import force_bytes
from django.utils.encoding import force_text
from django.utils.safestring import mark_safe
register = template.Library() register = template.Library()
@register.filter(is_safe=True) @register.filter(is_safe=True)
@stringfilter @stringfilter
def markdown(value, arg=''): def markdown(value, arg=""):
""" """
Runs Markdown over a given value, optionally using various Runs Markdown over a given value, optionally using various
extensions python-markdown supports. extensions python-markdown supports.
...@@ -68,31 +69,34 @@ def markdown(value, arg=''): ...@@ -68,31 +69,34 @@ def markdown(value, arg=''):
import markdown import markdown
except ImportError: except ImportError:
if settings.DEBUG: if settings.DEBUG:
raise template.TemplateSyntaxError("Error in 'markdown' filter: The Python markdown library isn't installed.") raise template.TemplateSyntaxError(
"Error in 'markdown' filter: The Python markdown library isn't installed."
)
return force_text(value) return force_text(value)
else: else:
markdown_vers = getattr(markdown, "version_info", 0) markdown_vers = getattr(markdown, "version_info", 0)
if markdown_vers < (2, 1): if markdown_vers < (2, 1):
if settings.DEBUG: if settings.DEBUG:
raise template.TemplateSyntaxError( raise template.TemplateSyntaxError(
"Error in 'markdown' filter: Django does not support versions of the Python markdown library < 2.1.") "Error in 'markdown' filter: Django does not support versions of the Python markdown library < 2.1."
)
return force_text(value) return force_text(value)
else: else:
extensions = [e for e in arg.split(",") if e] extensions = [e for e in arg.split(",") if e]
if extensions and extensions[0] == "safe": if extensions and extensions[0] == "safe":
extensions = extensions[1:] extensions = extensions[1:]
return mark_safe(markdown.markdown( return mark_safe( # nosec: B703
force_text(value), markdown.markdown(
extensions, force_text(value),
safe_mode=True, extensions,
enable_attributes=False, safe_mode=True,
)) enable_attributes=False,
)
)
else: else:
return mark_safe(markdown.markdown( return mark_safe( # nosec: B703
force_text(value), markdown.markdown(force_text(value), extensions, safe_mode=False,)
extensions, )
safe_mode=False,
))
@register.filter(is_safe=True) @register.filter(is_safe=True)
...@@ -102,12 +106,21 @@ def restructuredtext(value, full=False): ...@@ -102,12 +106,21 @@ def restructuredtext(value, full=False):
from docutils.core import publish_parts from docutils.core import publish_parts
except ImportError: except ImportError:
if settings.DEBUG: if settings.DEBUG:
raise template.TemplateSyntaxError("Error in 'restructuredtext' filter: The Python docutils library isn't installed.") raise template.TemplateSyntaxError(
"Error in 'restructuredtext' filter: The Python docutils library isn't installed."
)
return force_text(value) return force_text(value)
else: else:
docutils_settings = getattr(settings, "RESTRUCTUREDTEXT_FILTER_SETTINGS", {}) docutils_settings = getattr(settings, "RESTRUCTUREDTEXT_FILTER_SETTINGS", {})
parts = publish_parts(source=force_bytes(value), writer_name="html4css1", settings_overrides=docutils_settings) parts = publish_parts(
source=force_bytes(value),
writer_name="html4css1",
settings_overrides=docutils_settings,
)
if full: if full:
return mark_safe(force_text(parts["html_body"])) #with h1 title text = parts["html_body"] # with h1 title
else: else:
return mark_safe(force_text(parts["fragment"])) #contains no title text = parts["fragment"] # contains no title
return mark_safe(force_text(text)) # nosec: B703
...@@ -25,120 +25,123 @@ ...@@ -25,120 +25,123 @@
# # # #
############################################################################### ###############################################################################
import json
from collections import OrderedDict
from django import template from django import template
from django.conf import settings from django.conf import settings
from django.utils.html import format_html from django.utils.html import format_html
from ...common.texts import Messages as Texts
from ... import __version__
from collections import OrderedDict
import json from ... import __version__
from ...common.texts import Messages as Texts
register = template.Library() register = template.Library()
#-------------------------------------------------- # --------------------------------------------------
@register.inclusion_tag('ui/bar.html', takes_context=True) @register.inclusion_tag("ui/bar.html", takes_context=True)
def navbar(context): def navbar(context):
return { return {
'request': context['request'], "request": context["request"],
'documentation_link': settings.DOCUMENTATION_LINK, "documentation_link": settings.DOCUMENTATION_LINK,
'public_urls': [ "public_urls": [
('experiments', 'experiments:public-list'), ("experiments", "experiments:public-list"),
(False, ''), (False, ""),
('toolchains', 'toolchains:public-list'), ("toolchains", "toolchains:public-list"),
('algorithms', 'algorithms:public-list'), ("algorithms", "algorithms:public-list"),
('libraries', 'libraries:public-list'), ("libraries", "libraries:public-list"),
('dataformats', 'dataformats:public-list'), ("dataformats", "dataformats:public-list"),
(False, ''), (False, ""),
('attestations', 'attestations:public-list'), ("attestations", "attestations:public-list"),
('reports', 'reports:public-list'), ("reports", "reports:public-list"),
('searches', 'search:public-list'), ("searches", "search:public-list"),
('teams', 'teams:public-list'), ("teams", "teams:public-list"),
('plotterparameters', 'plotters:plotterparameter-public-list'), ("plotterparameters", "plotters:plotterparameter-public-list"),
(False, ''), (False, ""),
('databases', 'databases:list'), ("databases", "databases:list"),
('environments', 'backend:list-environments'), ("environments", "backend:list-environments"),
('plotters', 'plotters:list'), ("plotters", "plotters:list"),
#('plotterparameters', 'plotters:plotterparameter-public-list'), # ('plotterparameters', 'plotters:plotterparameter-public-list'),
], ],
'user_urls': [ "user_urls": [
('experiments', 'experiments:list', True), ("experiments", "experiments:list", True),
(False, '', False), (False, "", False),
('toolchains', 'toolchains:list', True), ("toolchains", "toolchains:list", True),
('algorithms', 'algorithms:list', True), ("algorithms", "algorithms:list", True),
('libraries', 'libraries:list', True), ("libraries", "libraries:list", True),
('dataformats', 'dataformats:list', True), ("dataformats", "dataformats:list", True),
(False, '', False), (False, "", False),
('attestations', 'attestations:list', True), ("attestations", "attestations:list", True),
('reports', 'reports:list', True), ("reports", "reports:list", True),
('searches', 'search:list', True), ("searches", "search:list", True),
('teams', 'teams:list', True), ("teams", "teams:list", True),
('plotterparameters', 'plotters:plotterparameter-list', True), ("plotterparameters", "plotters:plotterparameter-list", True),
(False, '', False), (False, "", False),
('databases', 'databases:list', False), ("databases", "databases:list", False),
('environments', 'backend:list-environments', False), ("environments", "backend:list-environments", False),
('plotters', 'plotters:list', False), ("plotters", "plotters:list", False),
#('plotterparameters', 'plotters:plotterparameter-list', True), # ('plotterparameters', 'plotters:plotterparameter-list', True),
], ],
} }
#-------------------------------------------------- # --------------------------------------------------
@register.inclusion_tag('ui/contribution_breadcrumb.html', takes_context=True) @register.inclusion_tag("ui/contribution_breadcrumb.html", takes_context=True)
def contribution_breadcrumb(context, obj): def contribution_breadcrumb(context, obj):
name_plural = obj.get_verbose_name_plural() name_plural = obj.get_verbose_name_plural()
return { return {
'request': context['request'], "request": context["request"],
'object': obj, "object": obj,
'name_plural': name_plural, "name_plural": name_plural,
'listurl': name_plural + ':list', "listurl": name_plural + ":list",
'public_listurl': name_plural + ':public-list', "public_listurl": name_plural + ":public-list",
'viewurl': name_plural + ':view-latest', "viewurl": name_plural + ":view-latest",
} }
#-------------------------------------------------- # --------------------------------------------------
@register.inclusion_tag('ui/contribution_breadcrumb_plotter.html', takes_context=True) @register.inclusion_tag("ui/contribution_breadcrumb_plotter.html", takes_context=True)
def contribution_breadcrumb_plotter(context, obj): def contribution_breadcrumb_plotter(context, obj):
name_plural = obj.get_verbose_name_plural() name_plural = obj.get_verbose_name_plural()
return { return {
'request': context['request'], "request": context["request"],
'object': obj, "object": obj,
'name_plural': name_plural, "name_plural": name_plural,
'listurl': name_plural + ':list', "listurl": name_plural + ":list",
'public_listurl': name_plural + ':list', "public_listurl": name_plural + ":list",
'viewurl': name_plural + ':plotter-view-latest', "viewurl": name_plural + ":plotter-view-latest",
} }
#-------------------------------------------------- # --------------------------------------------------
@register.inclusion_tag('ui/contribution_breadcrumb_plotterparameter.html', takes_context=True) @register.inclusion_tag(
"ui/contribution_breadcrumb_plotterparameter.html", takes_context=True
)
def contribution_breadcrumb_plotterparameter(context, obj): def contribution_breadcrumb_plotterparameter(context, obj):
name_plural = 'plotterparameters' name_plural = "plotterparameters"
name_url = 'plotters' name_url = "plotters"
return { return {
'request': context['request'], "request": context["request"],
'object': obj, "object": obj,
'name_plural': name_plural, "name_plural": name_plural,
'listurl': name_url + ':plotterparameter-list', "listurl": name_url + ":plotterparameter-list",
'public_listurl': name_url + ':plotterparameter-public-list', "public_listurl": name_url + ":plotterparameter-public-list",
'viewurl': name_url + ':plotterparameter-view-latest', "viewurl": name_url + ":plotterparameter-view-latest",
} }
#-------------------------------------------------- # --------------------------------------------------
@register.inclusion_tag('ui/filter_script.html') @register.inclusion_tag("ui/filter_script.html")
def filter_script(panel_id, text_filter_id, privacy_filter_id): def filter_script(panel_id, text_filter_id, privacy_filter_id):
return dict( return dict(
panel_id=panel_id, panel_id=panel_id,
...@@ -147,170 +150,192 @@ def filter_script(panel_id, text_filter_id, privacy_filter_id): ...@@ -147,170 +150,192 @@ def filter_script(panel_id, text_filter_id, privacy_filter_id):
) )
#-------------------------------------------------- # --------------------------------------------------
@register.inclusion_tag('ui/smart_selector.html') @register.inclusion_tag("ui/smart_selector.html")
def smart_selector(id): def smart_selector(id):
return { 'panel_id': id, return {
} "panel_id": id,
}
#-------------------------------------------------- # --------------------------------------------------
@register.inclusion_tag('ui/tabs.html', takes_context=True) @register.inclusion_tag("ui/tabs.html", takes_context=True)
def list_tabs(context, user, tab): def list_tabs(context, user, tab):
name = 'list' if not user.is_anonymous else 'public-list' name = "list" if not user.is_anonymous else "public-list"
return dict( return dict(
request=context['request'], request=context["request"],
user=user, user=user,
tab=tab, tab=tab,
# tab name -> list url mappings
#tab name -> list url mappings user_tabs=OrderedDict(
user_tabs=OrderedDict([ [
('experiments', 'experiments:' + name), ("experiments", "experiments:" + name),
(False, ''), (False, ""),
('toolchains', 'toolchains:' + name), ("toolchains", "toolchains:" + name),
('algorithms', 'algorithms:' + name), ("algorithms", "algorithms:" + name),
('libraries', 'libraries:' + name), ("libraries", "libraries:" + name),
('dataformats', 'dataformats:' + name), ("dataformats", "dataformats:" + name),
(None, ''), #note it has to be different as this is a dictionary! (None, ""), # note it has to be different as this is a dictionary!
('attestations', 'attestations:' + name), ("attestations", "attestations:" + name),
('reports', 'reports:' + name), ("reports", "reports:" + name),
('searches', 'search:' + name), ("searches", "search:" + name),
('teams', 'teams:' + name), ("teams", "teams:" + name),
('plotterparameters', 'plotters:plotterparameter-' + name), ("plotterparameters", "plotters:plotterparameter-" + name),
]), ]
system_tabs=OrderedDict([ ),
('databases', 'databases:list'), system_tabs=OrderedDict(
('environments', 'backend:list-environments'), [
('plotters', 'plotters:list'), ("databases", "databases:list"),
]), ("environments", "backend:list-environments"),
("plotters", "plotters:list"),
]
),
) )
#-------------------------------------------------- # --------------------------------------------------
@register.inclusion_tag('ui/list_selector.html') @register.inclusion_tag("ui/list_selector.html")
def list_selector(id): def list_selector(id):
return { 'panel_id': id, return {
} "panel_id": id,
}
#-------------------------------------------------- # --------------------------------------------------
@register.inclusion_tag('ui/multiple_selector.html') @register.inclusion_tag("ui/multiple_selector.html")
def multiple_selector(id): def multiple_selector(id):
return { 'panel_id': id, return {
} "panel_id": id,
}
#-------------------------------------------------- # --------------------------------------------------
@register.inclusion_tag('ui/doc_editor.html', takes_context=True) @register.inclusion_tag("ui/doc_editor.html", takes_context=True)
def doc_editor(context, obj, url_name, editable=True): def doc_editor(context, obj, url_name, editable=True):
return { return {
'request': context['request'], "request": context["request"],
'owner': obj.author == context['request'].user, "owner": obj.author == context["request"].user,
'object': obj, "object": obj,
'url_name': url_name, "url_name": url_name,
'texts': Texts, "texts": Texts,
'editable': editable, "editable": editable,
} }
#-------------------------------------------------- # --------------------------------------------------
@register.inclusion_tag('ui/history.html', takes_context=True) @register.inclusion_tag("ui/history.html", takes_context=True)
def history(context, plural, obj, panel_id, height): def history(context, plural, obj, panel_id, height):
return { return {
'plural': plural, "plural": plural,
'object': obj, "object": obj,
'history': obj.json_history(context['request'].user), "history": obj.json_history(context["request"].user),
'panel_id': panel_id, "panel_id": panel_id,
'height': height, "height": height,
'URL_PREFIX': context['URL_PREFIX'], "URL_PREFIX": context["URL_PREFIX"],
} }
#-------------------------------------------------- # --------------------------------------------------
@register.simple_tag @register.simple_tag
def code_editor_scripts(modes): def code_editor_scripts(modes):
js = [ js = [
'lib/codemirror.js', "lib/codemirror.js",
'addon/fold/brace-fold.js', "addon/fold/brace-fold.js",
'addon/fold/foldcode.js', "addon/fold/foldcode.js",
'addon/fold/foldgutter.js', "addon/fold/foldgutter.js",
'addon/fold/indent-fold.js', "addon/fold/indent-fold.js",
'addon/mode/overlay.js', "addon/mode/overlay.js",
'addon/search/search.js', "addon/search/search.js",
'addon/search/searchcursor.js', "addon/search/searchcursor.js",
'addon/dialog/dialog.js', "addon/dialog/dialog.js",
'addon/display/rulers.js', "addon/display/rulers.js",
] ]
# adds mode-related CodeMirror plugins # adds mode-related CodeMirror plugins
js += ['mode/%s/%s.js' % (k,k) for k in modes.split(',')] js += ["mode/%s/%s.js" % (k, k) for k in modes.split(",")]
# sets include path # sets include path
js = ['%s/%s' % (settings.CODEMIRROR_PATH, k) for k in js] js = ["%s/%s" % (settings.CODEMIRROR_PATH, k) for k in js]
# inserts the CodeMirror editor defaults # inserts the CodeMirror editor defaults
js.append("ui/js/codemirror-defaults.js") js.append("ui/js/codemirror-defaults.js")
js = ['<script src="%s%s?v%s" type="text/javascript" charset="utf-8"></script>' % (settings.STATIC_URL, k, __version__) for k in js] js = [
'<script src="%s%s?v%s" type="text/javascript" charset="utf-8"></script>'
% (settings.STATIC_URL, k, __version__)
for k in js
]
return format_html('\n'.join(js)) return format_html("\n".join(js))
#-------------------------------------------------- # --------------------------------------------------
@register.simple_tag @register.simple_tag
def code_editor_css(): def code_editor_css():
css = [ css = [
'%s/lib/codemirror.css' % settings.CODEMIRROR_PATH, "%s/lib/codemirror.css" % settings.CODEMIRROR_PATH,
'%s/addon/fold/foldgutter.css' % settings.CODEMIRROR_PATH, "%s/addon/fold/foldgutter.css" % settings.CODEMIRROR_PATH,
'ui/css/codemirror-overrides.css', "ui/css/codemirror-overrides.css",
] ]
if settings.CODEMIRROR_THEME != 'default': if settings.CODEMIRROR_THEME != "default":
css.append('%s/theme/%s.css' % (settings.CODEMIRROR_PATH, settings.CODEMIRROR_THEME)) css.append(
"%s/theme/%s.css" % (settings.CODEMIRROR_PATH, settings.CODEMIRROR_THEME)
return format_html('\n'.join(map(lambda x: '<link rel="stylesheet" href="%s%s?v%s" type="text/css" media="screen" />' % (settings.STATIC_URL, x, __version__), css))) )
return format_html(
"\n".join(
map(
lambda x: '<link rel="stylesheet" href="%s%s?v%s" type="text/css" media="screen" />'
% (settings.STATIC_URL, x, __version__),
css,
)
)
)
#-------------------------------------------------- # --------------------------------------------------
@register.inclusion_tag('ui/save_as_dialog.html') @register.inclusion_tag("ui/save_as_dialog.html")
def save_as_dialog(id): def save_as_dialog(id):
return { 'dialog_id': id, return {
'URL_PREFIX': settings.URL_PREFIX, "dialog_id": id,
} "URL_PREFIX": settings.URL_PREFIX,
}
#-------------------------------------------------- # --------------------------------------------------
@register.inclusion_tag('ui/messages.html') @register.inclusion_tag("ui/messages.html")
def messages(request): def messages(request):
"""Sets-up the HTML for message display""" """Sets-up the HTML for message display"""
from django.contrib import messages as django_messages from django.contrib import messages as django_messages
return dict( return dict(
messages=django_messages.get_messages(request), messages=django_messages.get_messages(request),
DEFAULT_MESSAGE_LEVELS=django_messages.DEFAULT_LEVELS, DEFAULT_MESSAGE_LEVELS=django_messages.DEFAULT_LEVELS,
) )
#-------------------------------------------------- # --------------------------------------------------
@register.filter @register.filter
...@@ -319,29 +344,32 @@ def join_by(the_list, attr_or_method): ...@@ -319,29 +344,32 @@ def join_by(the_list, attr_or_method):
def _getval(o, n): def _getval(o, n):
attr = getattr(o, n) attr = getattr(o, n)
if hasattr(attr, '__call__'): return attr() if hasattr(attr, "__call__"):
else: return attr return attr()
else:
return attr
return ", ".join(unicode(_getval(i, attr_or_method)) for i in the_list) return ", ".join(str(_getval(i, attr_or_method)) for i in the_list)
#-------------------------------------------------- # --------------------------------------------------
@register.filter @register.filter
def getkey(mapping, key): def getkey(mapping, key):
"""Returns the given dictionary key (useful in templates)""" """Returns the given dictionary key (useful in templates)"""
return mapping.get(key, '') return mapping.get(key, "")
#-------------------------------------------------- # --------------------------------------------------
@register.filter @register.filter
def split_fullname(s): def split_fullname(s):
return s.split('/') return s.split("/")
#---------------------------------------------------------------- # ----------------------------------------------------------------
@register.filter @register.filter
...@@ -352,7 +380,7 @@ def get_item(mapping, key): ...@@ -352,7 +380,7 @@ def get_item(mapping, key):
if key in data.keys(): if key in data.keys():
output_value = json.dumps(data[key]) output_value = json.dumps(data[key])
except: except Exception:
output_value = "" output_value = ""
return output_value return output_value
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment