From 5f1420a0a9de7cd5b47cdf99bd9d86bee01a6ec7 Mon Sep 17 00:00:00 2001 From: Dirk Alders Date: Thu, 10 Oct 2024 22:38:00 +0200 Subject: [PATCH] Adaption to new libraries --- context.py | 96 +++++++++++++++++++++++++++++------------------ models.py | 18 ++++----- search.py | 6 +-- signals.py | 11 ++---- views/__init__.py | 39 +++++++++++-------- views/xnail.py | 7 +--- 6 files changed, 97 insertions(+), 80 deletions(-) diff --git a/context.py b/context.py index 1d9f6d8..b13c98e 100644 --- a/context.py +++ b/context.py @@ -1,5 +1,8 @@ +from django.conf import settings from django.utils.translation import gettext as _ from .help import actionbar as actionbar_add_help +import inspect +import logging import os from themes import gray_icon_url, color_icon_url from users.context import menubar as menubar_user @@ -7,6 +10,9 @@ from users.context import PROFILE_ENTRY_UID import pygal from pygal.models import get_item_by_rel_path +logger = logging.getLogger(settings.ROOT_LOGGER_NAME).getChild(__name__) + + MY_FAVOURITES_ENTRY_UID = 'my_favourites-main' HELP_UID = 'help-main' NAVIGATION_ENTRY_UID = 'navigation-main-%s' @@ -15,30 +21,57 @@ SEARCH_ENTRY_UID = 'search-main' BACK_ENTRY_UID = 'back-main' -def context_adaption(context, request, rel_path, wrapper_instance=None, title='', current_help_page=None): - context[context.MENUBAR].append_entry(HELP_UID, _('Help'), color_icon_url(request, 'help.png'), pygal.url_helpview(request, 'main'), True, False) - menubar_user(context[context.MENUBAR], request) - menubar(context[context.MENUBAR], request, rel_path) - navigationbar(context[context.NAVIGATIONBAR], request, rel_path) +def context_adaption(context, request, **kwargs): + caller_name = inspect.currentframe().f_back.f_code.co_name + wrapper_instance = kwargs.get("wrapper_instance") + # + menubar(context, request, **kwargs) + navigationbar(context, request, **kwargs) if wrapper_instance is None: # Pages without direct connection to an item (e.g. Helpview, ...) - context.set_additional_title(title) - context[context.ACTIONBAR].append_entry( - BACK_ENTRY_UID, # uid - _('Back'), # name - color_icon_url(request, 'back.png'), # icon - 'javascript:history.back()', # url - True, # left - False # active - ) + context.set_additional_title(kwargs.get("title", "")) + # + actionbar(context, request, caller_name) else: wrapper_instance.context_adaption(context) # HELP if pygal.is_helpview(request): - actionbar_add_help(context, request, current_help_page=current_help_page) + actionbar_add_help(context, request, current_help_page=kwargs.get("current_help_page")) + for key in kwargs: + context[key] = kwargs[key] + logger.debug("context adapted: %s", repr(context)) + +def navigationbar(context, request, **kwargs): + bar = context[context.NAVIGATIONBAR] + rel_path = kwargs.get("rel_path", '') + # + if pygal.is_favouriteview(request): + if rel_path: + bar.append_entry(*navigation_entry_parameters(request, rel_path, None)) + anchor = get_item_by_rel_path(rel_path).name + else: + anchor = None + elif pygal.is_searchview(request): + if rel_path: + bar.append_entry(*navigation_entry_parameters(request, rel_path, None)) + anchor = get_item_by_rel_path(rel_path).name + else: + anchor = None + else: + anchor = None + while len(rel_path) > 0 and rel_path != os.path.sep: + bar.append_entry(*navigation_entry_parameters(request, rel_path, anchor)) + anchor = get_item_by_rel_path(rel_path).name + rel_path = os.path.dirname(rel_path) + bar.append_entry(*home_entry_parameters(request, anchor)) -def menubar(bar, request, rel_path): +def menubar(context, request, **kwargs): + bar = context[context.MENUBAR] + rel_path = kwargs.get("rel_path", '') + # + bar.append_entry(HELP_UID, _('Help'), color_icon_url(request, 'help.png'), pygal.url_helpview(request, 'main'), True, False) + menubar_user(bar, request) if request.user.is_authenticated: bar.append_entry(*my_favourites_entry_parameters(request, rel_path)) try: @@ -47,27 +80,16 @@ def menubar(bar, request, rel_path): pass # Profile entry does not exist, so exchange is not needed (e.g. no user is logged in) -def navigationbar(bar, request, path): - if pygal.is_favouriteview(request): - if path: - bar.append_entry(*navigation_entry_parameters(request, path, None)) - anchor = get_item_by_rel_path(path).name - else: - anchor = None - elif pygal.is_searchview(request): - if path: - bar.append_entry(*navigation_entry_parameters(request, path, None)) - anchor = get_item_by_rel_path(path).name - else: - anchor = None - else: - anchor = None - while len(path) > 0 and path != os.path.sep: - bar.append_entry(*navigation_entry_parameters(request, path, anchor)) - anchor = get_item_by_rel_path(path).name - path = os.path.dirname(path) - bar.append_entry(*home_entry_parameters(request, anchor)) - +def actionbar(context, request, caller_name, **kwargs): + bar = context[context.ACTIONBAR] + bar.append_entry( + BACK_ENTRY_UID, # uid + _('Back'), # name + color_icon_url(request, 'back.png'), # icon + 'javascript:history.back()', # url + True, # left + False # active + ) def profile_entry_parameters(request): return ( diff --git a/models.py b/models.py index 9561994..b8c6985 100644 --- a/models.py +++ b/models.py @@ -1,4 +1,5 @@ import datetime +from django.conf import settings from django.contrib.auth.models import User from django.db import models from django.utils import formats, timezone @@ -11,6 +12,9 @@ import os import pygal import time +logger = logging.getLogger(settings.ROOT_LOGGER_NAME).getChild(__name__) + + DEBUG = False @@ -25,14 +29,6 @@ EXTENTIONS_AUDIO = ['.mp3', ] EXTENTIONS_VIDEO = ['.avi', '.mpg', '.mpeg', '.mpe', '.mov', '.qt', '.mp4', '.webm', '.ogv', '.flv', '.3gp', ] -# Get a logger instance -try: - from config import APP_NAME as ROOT_LOGGER_NAME -except ImportError: - ROOT_LOGGER_NAME = 'root' -logger = logging.getLogger(ROOT_LOGGER_NAME).getChild(__name__) - - def get_item_type(full_path): if os.path.isdir(full_path): return TYPE_FOLDER @@ -273,11 +269,11 @@ class Item(models.Model): return reverse('admin:%s_%s_change' % info, args=(self.pk,)) def suspended(self, user): - if pygal.suspend_public() and not user.is_authenticated: - return True + return pygal.suspend_public() and not user.is_authenticated def may_read(self, user): if self.suspended(user): + logger.info("Permiision denied to '%s' due to suspended not authenticated user.", self.name) return False elif self.type == TYPE_FOLDER: return True @@ -286,8 +282,10 @@ class Item(models.Model): if parent.public_access is True: return True if user is None: + logger.info("Permiision denied to %s due to user is None.", self.name) return False if not user.is_authenticated: + logger.info("Permiision denied to %s due to user is not authenticated.", self.name) return False if user.is_superuser: return True diff --git a/search.py b/search.py index 9b63556..12c150b 100644 --- a/search.py +++ b/search.py @@ -8,11 +8,7 @@ from whoosh.qparser.dateparse import DateParserPlugin from whoosh import index, qparser from pygal.models import TYPE_FOLDER -try: - from config import APP_NAME as ROOT_LOGGER_NAME -except ImportError: - ROOT_LOGGER_NAME = 'root' -logger = logging.getLogger(ROOT_LOGGER_NAME).getChild(__name__) +logger = logging.getLogger(settings.ROOT_LOGGER_NAME).getChild(__name__) SCHEMA = Schema( diff --git a/signals.py b/signals.py index d365798..f05d9c2 100644 --- a/signals.py +++ b/signals.py @@ -1,3 +1,4 @@ +from django.conf import settings from django.db.models.signals import post_save from django.db.models.signals import post_delete from django.dispatch import receiver @@ -7,12 +8,8 @@ from .search import load_index, delete_item, update_item import shutil from .views.xnail import base_item -# Get a logger instance -try: - from config import APP_NAME as ROOT_LOGGER_NAME -except ImportError: - ROOT_LOGGER_NAME = 'root' -logger = logging.getLogger(ROOT_LOGGER_NAME).getChild(__name__) +logger = logging.getLogger(settings.ROOT_LOGGER_NAME).getChild(__name__) + __pre_remove__ = None __pre_add__ = None @@ -21,7 +18,7 @@ __pre_add__ = None @receiver(post_delete, sender=Item) def item_delete(instance, **kwargs): # delete cached xnails - clogger.info('Deleting Xnails stored in "%s".', base_item.__cache_image_folder__(None, instance.rel_path)) + logger.info('Deleting Xnails stored in "%s".', base_item.__cache_image_folder__(None, instance.rel_path)) shutil.rmtree(base_item.__cache_image_folder__(None, instance.rel_path), True) # delete index entry ix = load_index() diff --git a/views/__init__.py b/views/__init__.py index 823ad86..3d5d0a7 100644 --- a/views/__init__.py +++ b/views/__init__.py @@ -73,7 +73,11 @@ def pygal_responses(request, responsetype=pygal.RESP_TYPE_USERVIEW, datatype=pyg def pygal_search(request, rel_path): context = Context(request) # needs to be executed first because of time mesurement w = query_view(request, search_result_query(request)) - context_adaption(context, request, '', wrapper_instance=w) + context_adaption( + context, + request, + wrapper_instance=w + ) context.set_additional_title(w.name) return w.render(context) @@ -128,17 +132,12 @@ def pygal_helpview(request, page='main'): context_adaption( context, # the base context request, # the request object to be used in context_adaption - rel_path='', # the current help_page to identify which taskbar entry has to be highlighted title=_('Help'), # the title for the page (template) current_help_page=page, ) context['help_content'] = help_content # the help content itself (template) return render(request, 'pygal/help.html', context=context) - context = Context(request) # needs to be executed first because of time mesurement - context_adaption(context, request, '', title=_('Help')) - return help_data(request, context) - def pygal_userview_infoview(request, responsetype, rel_path): context = Context(request) # needs to be executed first because of time mesurement @@ -149,9 +148,14 @@ def pygal_userview_infoview(request, responsetype, rel_path): else: w = get_userview_wrapper_instance(full_path, request) except LookupError: - context_adaption(context, request, '') + context_adaption(context, request) return pygal_item_does_not_exist(request, context) - context_adaption(context, request, rel_path, wrapper_instance=w) + context_adaption( + context, + request, + rel_path=rel_path, + wrapper_instance=w + ) # if w.may_read(): context.set_additional_title(w.name) @@ -194,11 +198,16 @@ def pygal_profile(request): current_thumbnail_size = pygal.get_thumbnail_size(request) current_webnail_size = pygal.get_webnail_size(request) profile_pre_actions(request, context, UserProfileFormLanguageOnly) - context_adaption(context, request, '', title=_('Profile for %(username)s') % {'username': request.user.username}) - context['THUMBNAIL_SIZES'] = settings.THUMBNAIL_SIZES - context['thumbnail_size'] = current_thumbnail_size - context['WEBNAIL_SIZES'] = settings.WEBNAIL_SIZES - context['webnail_size'] = current_webnail_size + context_adaption( + context, + request, + title=_('Profile for %(username)s') % {'username': request.user.username}, + # + THUMBNAIL_SIZES=settings.THUMBNAIL_SIZES, + thumbnail_size=current_thumbnail_size, + WEBNAIL_SIZES=settings.WEBNAIL_SIZES, + webnail_size=current_webnail_size + ) if request.POST: # store thumbnail size, if changed thumbnail_size = int(request.POST.get('thumbnail_size')) @@ -241,7 +250,7 @@ def pygal_addtag(request, rel_path): context_adaption( context, request, - rel_path, + rel_path=rel_path, title=_('Add Tag for %s') % w.name ) tag_context_adaption(context, w, request, get_item_type(full_path) in [TYPE_IMAGE]) @@ -273,7 +282,7 @@ def pygal_tagedit(request, tag_id): context_adaption( context, request, - t.item.rel_path, + rel_path=t.item.rel_path, title=_('Edit Tag %(tag_id)d for %(item_name)s') % {'tag_id': tag_id, 'item_name': w.name} ) tag_context_adaption(context, w, request, t.item.type in [TYPE_IMAGE]) diff --git a/views/xnail.py b/views/xnail.py index 113fccd..eda70df 100644 --- a/views/xnail.py +++ b/views/xnail.py @@ -7,12 +7,7 @@ from ..models import get_item_type, TYPE_IMAGE, TYPE_VIDEO import os import pygal -# Get a logger instance -try: - from config import APP_NAME as ROOT_LOGGER_NAME -except ImportError: - ROOT_LOGGER_NAME = 'root' -logger = logging.getLogger(ROOT_LOGGER_NAME).getChild(__name__) +logger = logging.getLogger(settings.ROOT_LOGGER_NAME).getChild(__name__) def get_image_class(full_path):