Allow resolving using a request or a context

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2019-05-17 00:44:32 -04:00
parent a1fa6aadfb
commit c9809becba

View File

@@ -11,7 +11,7 @@ from django.core.exceptions import (
FieldDoesNotExist, ImproperlyConfigured, PermissionDenied FieldDoesNotExist, ImproperlyConfigured, PermissionDenied
) )
from django.db.models.constants import LOOKUP_SEP from django.db.models.constants import LOOKUP_SEP
from django.template import VariableDoesNotExist, Variable from django.template import RequestContext, VariableDoesNotExist, Variable
from django.template.defaulttags import URLNode from django.template.defaulttags import URLNode
from django.urls import resolve, reverse from django.urls import resolve, reverse
from django.utils.encoding import force_str, force_text from django.utils.encoding import force_str, force_text
@@ -87,11 +87,22 @@ class Link(object):
if name: if name:
self.__class__._registry[name] = self self.__class__._registry[name] = self
def resolve(self, context, resolved_object=None):
def resolve(self, context=None, request=None, resolved_object=None):
if not context and not request:
raise ImproperlyConfigured(
'Must provide a context or a request in order to resolve the '
'link.'
)
AccessControlList = apps.get_model( AccessControlList = apps.get_model(
app_label='acls', model_name='AccessControlList' app_label='acls', model_name='AccessControlList'
) )
if not context:
context = RequestContext(request=request)
if not request:
# Try to get the request object the faster way and fallback to the # Try to get the request object the faster way and fallback to the
# slower method. # slower method.
try: try:
@@ -319,12 +330,22 @@ class Menu(object):
else: else:
return item.label return item.label
def resolve(self, context, source=None, sort_results=False): def resolve(self, context=None, request=None, source=None, sort_results=False):
if not context and not request:
raise ImproperlyConfigured(
'Must provide a context or a request in order to resolve the '
'menu.'
)
if not context:
context = RequestContext(request=request)
if not self.check_condition(context=context): if not self.check_condition(context=context):
return [] return []
result = [] result = []
if not request:
try: try:
request = context.request request = context.request
except AttributeError: except AttributeError: