2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-05-01 04:56:45 +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:
Oliver 2024-12-17 13:48:43 +11:00 committed by GitHub
parent 24f433c948
commit acb756eacc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 0 additions and 172 deletions

View File

@ -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}

View File

@ -211,18 +211,6 @@ PLUGIN_FILE_HASH = ''
STATICFILES_DIRS = [] 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 # Append directory for compiled react files if debug server is running
if DEBUG and 'collectstatic' not in sys.argv: if DEBUG and 'collectstatic' not in sys.argv:
web_dir = BASE_DIR.joinpath('..', 'web', 'static').absolute() 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')) STATICFILES_DIRS.append(BASE_DIR.joinpath('plugin', 'samples', 'static'))
print('-', STATICFILES_DIRS[-1]) 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 # Database backup options
# Ref: https://django-dbbackup.readthedocs.io/en/master/configuration.html # Ref: https://django-dbbackup.readthedocs.io/en/master/configuration.html
@ -553,10 +537,6 @@ TEMPLATES = [
'django.template.context_processors.i18n', 'django.template.context_processors.i18n',
'django.contrib.auth.context_processors.auth', 'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages', 'django.contrib.messages.context_processors.messages',
# Custom InvenTree context processors
'InvenTree.context.health_status',
'InvenTree.context.status_codes',
'InvenTree.context.user_roles',
], ],
'loaders': [ 'loaders': [
( (

View File

@ -1,12 +1,10 @@
"""This module provides template tags for extra functionality, over and above the built-in Django tags.""" """This module provides template tags for extra functionality, over and above the built-in Django tags."""
import logging import logging
import os
from datetime import date, datetime from datetime import date, datetime
from django import template from django import template
from django.conf import settings as djangosettings from django.conf import settings as djangosettings
from django.templatetags.static import StaticNode
from django.urls import NoReverseMatch, reverse from django.urls import NoReverseMatch, reverse
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
@ -444,72 +442,6 @@ def inventree_customize(reference, *args, **kwargs):
return djangosettings.CUSTOMIZE.get(reference, '') 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() @register.simple_tag()
def admin_index(user): def admin_index(user):
"""Return a URL for the admin interface.""" """Return a URL for the admin interface."""