mirror of
https://github.com/inventree/InvenTree.git
synced 2025-04-30 20:46:47 +00:00
Remove custom context processors (#8540)
* Remove custom context processors - Only merge after 0.17.0 release - Remove code which injects custom context variables into CUI requests - Not needed for new API-based PUI code - Speeds up requests - remove unnecessary DB hits * Remove broken import * Remove custom staticfile processing - No longer needed as CUI is gone
This commit is contained in:
parent
24f433c948
commit
acb756eacc
@ -1,84 +0,0 @@
|
||||
"""Provides extra global data to all templates."""
|
||||
|
||||
import InvenTree.helpers_email
|
||||
import InvenTree.ready
|
||||
import InvenTree.status
|
||||
from generic.states.custom import get_custom_classes
|
||||
from users.models import RuleSet, check_user_role
|
||||
|
||||
|
||||
def health_status(request):
|
||||
"""Provide system health status information to the global context.
|
||||
|
||||
- Not required for AJAX requests
|
||||
- Do not provide if it is already provided to the context
|
||||
"""
|
||||
if request.path.endswith('.js'):
|
||||
# Do not provide to script requests
|
||||
return {} # pragma: no cover
|
||||
|
||||
if hasattr(request, '_inventree_health_status'):
|
||||
# Do not duplicate efforts
|
||||
return {}
|
||||
|
||||
request._inventree_health_status = True
|
||||
|
||||
status = {
|
||||
'django_q_running': InvenTree.status.is_worker_running(),
|
||||
'email_configured': InvenTree.helpers_email.is_email_configured(),
|
||||
}
|
||||
|
||||
# The following keys are required to denote system health
|
||||
health_keys = ['django_q_running']
|
||||
|
||||
all_healthy = True
|
||||
|
||||
for k in health_keys:
|
||||
if status[k] is not True:
|
||||
all_healthy = False
|
||||
|
||||
status['system_healthy'] = all_healthy
|
||||
|
||||
status['up_to_date'] = InvenTree.version.isInvenTreeUpToDate()
|
||||
|
||||
return status
|
||||
|
||||
|
||||
def status_codes(request):
|
||||
"""Provide status code enumerations."""
|
||||
if hasattr(request, '_inventree_status_codes'):
|
||||
# Do not duplicate efforts
|
||||
return {}
|
||||
|
||||
request._inventree_status_codes = True
|
||||
get_custom = InvenTree.ready.isRebuildingData() is False
|
||||
return {
|
||||
cls.__name__: cls.template_context() for cls in get_custom_classes(get_custom)
|
||||
}
|
||||
|
||||
|
||||
def user_roles(request):
|
||||
"""Return a map of the current roles assigned to the user.
|
||||
|
||||
Roles are denoted by their simple names, and then the permission type.
|
||||
|
||||
Permissions can be access as follows:
|
||||
|
||||
- roles.part.view
|
||||
- roles.build.delete
|
||||
|
||||
Each value will return a boolean True / False
|
||||
"""
|
||||
user = request.user
|
||||
|
||||
roles = {}
|
||||
|
||||
for role in RuleSet.get_ruleset_models():
|
||||
permissions = {}
|
||||
|
||||
for perm in ['view', 'add', 'change', 'delete']:
|
||||
permissions[perm] = user.is_superuser or check_user_role(user, role, perm)
|
||||
|
||||
roles[role] = permissions
|
||||
|
||||
return {'roles': roles}
|
@ -211,18 +211,6 @@ PLUGIN_FILE_HASH = ''
|
||||
|
||||
STATICFILES_DIRS = []
|
||||
|
||||
# Translated Template settings
|
||||
STATICFILES_I18_PREFIX = 'i18n'
|
||||
STATICFILES_I18_SRC = BASE_DIR.joinpath('templates', 'js', 'translated')
|
||||
STATICFILES_I18_TRG = BASE_DIR.joinpath('InvenTree', 'static_i18n')
|
||||
|
||||
# Create the target directory if it does not exist
|
||||
if not STATICFILES_I18_TRG.exists():
|
||||
STATICFILES_I18_TRG.mkdir(parents=True)
|
||||
|
||||
STATICFILES_DIRS.append(STATICFILES_I18_TRG)
|
||||
STATICFILES_I18_TRG = STATICFILES_I18_TRG.joinpath(STATICFILES_I18_PREFIX)
|
||||
|
||||
# Append directory for compiled react files if debug server is running
|
||||
if DEBUG and 'collectstatic' not in sys.argv:
|
||||
web_dir = BASE_DIR.joinpath('..', 'web', 'static').absolute()
|
||||
@ -235,10 +223,6 @@ if DEBUG and 'collectstatic' not in sys.argv:
|
||||
STATICFILES_DIRS.append(BASE_DIR.joinpath('plugin', 'samples', 'static'))
|
||||
|
||||
print('-', STATICFILES_DIRS[-1])
|
||||
STATFILES_I18_PROCESSORS = ['InvenTree.context.status_codes']
|
||||
|
||||
# Color Themes Directory
|
||||
STATIC_COLOR_THEMES_DIR = STATIC_ROOT.joinpath('css', 'color-themes').resolve()
|
||||
|
||||
# Database backup options
|
||||
# Ref: https://django-dbbackup.readthedocs.io/en/master/configuration.html
|
||||
@ -553,10 +537,6 @@ TEMPLATES = [
|
||||
'django.template.context_processors.i18n',
|
||||
'django.contrib.auth.context_processors.auth',
|
||||
'django.contrib.messages.context_processors.messages',
|
||||
# Custom InvenTree context processors
|
||||
'InvenTree.context.health_status',
|
||||
'InvenTree.context.status_codes',
|
||||
'InvenTree.context.user_roles',
|
||||
],
|
||||
'loaders': [
|
||||
(
|
||||
|
@ -1,12 +1,10 @@
|
||||
"""This module provides template tags for extra functionality, over and above the built-in Django tags."""
|
||||
|
||||
import logging
|
||||
import os
|
||||
from datetime import date, datetime
|
||||
|
||||
from django import template
|
||||
from django.conf import settings as djangosettings
|
||||
from django.templatetags.static import StaticNode
|
||||
from django.urls import NoReverseMatch, reverse
|
||||
from django.utils.safestring import mark_safe
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
@ -444,72 +442,6 @@ def inventree_customize(reference, *args, **kwargs):
|
||||
return djangosettings.CUSTOMIZE.get(reference, '')
|
||||
|
||||
|
||||
class I18nStaticNode(StaticNode):
|
||||
"""Custom StaticNode.
|
||||
|
||||
Replaces a variable named *lng* in the path with the current language
|
||||
"""
|
||||
|
||||
def render(self, context): # pragma: no cover
|
||||
"""Render this node with the determined locale context."""
|
||||
self.original = getattr(self, 'original', None)
|
||||
|
||||
if not self.original:
|
||||
# Store the original (un-rendered) path template, as it gets overwritten below
|
||||
self.original = self.path.var
|
||||
|
||||
if hasattr(context, 'request'):
|
||||
# Convert the "requested" language code to a standard format
|
||||
language_code = context.request.LANGUAGE_CODE.lower().strip()
|
||||
language_code = language_code.replace('_', '-')
|
||||
|
||||
# Find the first "best" match:
|
||||
# - First, try the original requested code, e.g. 'pt-br'
|
||||
# - Next, try a simpler version of the code e.g. 'pt'
|
||||
# - Finally, fall back to english
|
||||
options = [language_code, language_code.split('-')[0], 'en']
|
||||
|
||||
for lng in options:
|
||||
lng_file = os.path.join(
|
||||
djangosettings.STATIC_ROOT, self.original.format(lng=lng)
|
||||
)
|
||||
|
||||
if os.path.exists(lng_file):
|
||||
self.path.var = self.original.format(lng=lng)
|
||||
break
|
||||
|
||||
ret = super().render(context)
|
||||
|
||||
return ret
|
||||
|
||||
|
||||
# use the dynamic url - tag if in Debugging-Mode
|
||||
if settings.DEBUG:
|
||||
|
||||
@register.simple_tag()
|
||||
def i18n_static(url_name):
|
||||
"""Simple tag to enable {% url %} functionality instead of {% static %}."""
|
||||
return reverse(url_name)
|
||||
|
||||
else: # pragma: no cover
|
||||
|
||||
@register.tag('i18n_static')
|
||||
def do_i18n_static(parser, token):
|
||||
"""Overrides normal static, adds language - lookup for prerenderd files #1485.
|
||||
|
||||
Usage (like static):
|
||||
{% i18n_static path [as varname] %}
|
||||
"""
|
||||
bits = token.split_contents()
|
||||
loc_name = settings.STATICFILES_I18_PREFIX
|
||||
|
||||
# change path to called resource
|
||||
bits[1] = f"'{loc_name}/{{lng}}.{bits[1][1:-1]}'"
|
||||
token.contents = ' '.join(bits)
|
||||
|
||||
return I18nStaticNode.handle_token(parser, token)
|
||||
|
||||
|
||||
@register.simple_tag()
|
||||
def admin_index(user):
|
||||
"""Return a URL for the admin interface."""
|
||||
|
Loading…
x
Reference in New Issue
Block a user