kopia lustrzana https://github.com/wagtail/wagtail
Use ObjectTypeRegistry for AdminURLFinder
rodzic
983402d1ad
commit
37fe7ae035
|
@ -3,6 +3,7 @@ from django.core.exceptions import ImproperlyConfigured
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
|
||||||
from wagtail.core.hooks import search_for_hooks
|
from wagtail.core.hooks import search_for_hooks
|
||||||
|
from wagtail.utils.registry import ObjectTypeRegistry
|
||||||
|
|
||||||
"""
|
"""
|
||||||
A mechanism for finding the admin edit URL for an arbitrary object instance, optionally applying
|
A mechanism for finding the admin edit URL for an arbitrary object instance, optionally applying
|
||||||
|
@ -76,12 +77,11 @@ class NullAdminURLFinder:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
FINDER_CLASSES_BY_MODEL = {}
|
finder_classes = ObjectTypeRegistry()
|
||||||
|
|
||||||
|
|
||||||
def register_admin_url_finder(model, handler):
|
def register_admin_url_finder(model, handler):
|
||||||
global FINDER_CLASSES_BY_MODEL
|
finder_classes.register(model, value=handler)
|
||||||
FINDER_CLASSES_BY_MODEL[model] = handler
|
|
||||||
|
|
||||||
|
|
||||||
class AdminURLFinder:
|
class AdminURLFinder:
|
||||||
|
@ -100,15 +100,7 @@ class AdminURLFinder:
|
||||||
# do we already have a finder for this model and user?
|
# do we already have a finder for this model and user?
|
||||||
finder = self.finders_by_model[model]
|
finder = self.finders_by_model[model]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
finder_class = NullAdminURLFinder
|
finder_class = finder_classes.get(instance) or NullAdminURLFinder
|
||||||
# check all superclasses of model for a registered finder class
|
|
||||||
for cls in model.__mro__:
|
|
||||||
try:
|
|
||||||
finder_class = FINDER_CLASSES_BY_MODEL[cls]
|
|
||||||
break
|
|
||||||
except KeyError:
|
|
||||||
continue
|
|
||||||
|
|
||||||
finder = finder_class(self.user)
|
finder = finder_class(self.user)
|
||||||
self.finders_by_model[model] = finder
|
self.finders_by_model[model] = finder
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue