2024-05-09 14:28:24 +05:30
|
|
|
"""
|
|
|
|
|
horilla/config.py
|
|
|
|
|
|
|
|
|
|
Horilla app configurations
|
|
|
|
|
"""
|
|
|
|
|
|
2024-05-09 15:01:06 +05:30
|
|
|
import importlib
|
|
|
|
|
import logging
|
|
|
|
|
|
2024-08-05 14:22:44 +05:30
|
|
|
from django.apps import apps
|
2024-05-09 14:28:24 +05:30
|
|
|
from django.conf import settings
|
|
|
|
|
from django.contrib.auth.context_processors import PermWrapper
|
2024-05-09 15:01:06 +05:30
|
|
|
|
2024-05-09 14:28:24 +05:30
|
|
|
from horilla.horilla_apps import SIDEBARS
|
|
|
|
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_apps_in_base_dir():
|
|
|
|
|
return SIDEBARS
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def import_method(accessibility):
|
|
|
|
|
module_path, method_name = accessibility.rsplit(".", 1)
|
|
|
|
|
module = __import__(module_path, fromlist=[method_name])
|
|
|
|
|
accessibility_method = getattr(module, method_name)
|
|
|
|
|
return accessibility_method
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ALL_MENUS = {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def sidebar(request):
|
|
|
|
|
|
|
|
|
|
base_dir_apps = get_apps_in_base_dir()
|
|
|
|
|
|
|
|
|
|
if not request.user.is_anonymous:
|
|
|
|
|
request.MENUS = []
|
|
|
|
|
MENUS = request.MENUS
|
|
|
|
|
|
|
|
|
|
for app in base_dir_apps:
|
2024-08-05 14:22:44 +05:30
|
|
|
if apps.is_installed(app):
|
|
|
|
|
try:
|
|
|
|
|
sidebar = importlib.import_module(app + ".sidebar")
|
|
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(e)
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
if sidebar:
|
|
|
|
|
accessibility = None
|
|
|
|
|
if getattr(sidebar, "ACCESSIBILITY", None):
|
|
|
|
|
accessibility = import_method(sidebar.ACCESSIBILITY)
|
|
|
|
|
|
|
|
|
|
if not accessibility or accessibility(
|
|
|
|
|
request,
|
|
|
|
|
sidebar.MENU,
|
|
|
|
|
PermWrapper(request.user),
|
|
|
|
|
):
|
|
|
|
|
MENU = {}
|
|
|
|
|
MENU["menu"] = sidebar.MENU
|
|
|
|
|
MENU["app"] = app
|
|
|
|
|
MENU["img_src"] = sidebar.IMG_SRC
|
|
|
|
|
MENU["submenu"] = []
|
|
|
|
|
MENUS.append(MENU)
|
|
|
|
|
for submenu in sidebar.SUBMENUS:
|
|
|
|
|
|
|
|
|
|
accessibility = None
|
|
|
|
|
|
|
|
|
|
if submenu.get("accessibility"):
|
|
|
|
|
accessibility = import_method(submenu["accessibility"])
|
|
|
|
|
redirect: str = submenu["redirect"]
|
|
|
|
|
redirect = redirect.split("?")
|
|
|
|
|
submenu["redirect"] = redirect[0]
|
|
|
|
|
|
|
|
|
|
if not accessibility or accessibility(
|
|
|
|
|
request,
|
|
|
|
|
submenu,
|
|
|
|
|
PermWrapper(request.user),
|
|
|
|
|
):
|
|
|
|
|
MENU["submenu"].append(submenu)
|
2024-05-09 14:28:24 +05:30
|
|
|
ALL_MENUS[request.session.session_key] = MENUS
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_MENUS(request):
|
|
|
|
|
ALL_MENUS[request.session.session_key] = []
|
|
|
|
|
sidebar(request)
|
|
|
|
|
return {"sidebar": ALL_MENUS.get(request.session.session_key)}
|