"""
Admin Kit Sites module
"""
from weakref import WeakSet
all_sites = WeakSet()
__all__ = ['AdminKitSite', 'site']
[docs]class AdminKitSite:
"""
The main AdminKitSite that routes and process url requests.
"""
def __init__(self, name='admin_kit'):
self._registry = {}
self.name = name
all_sites.add(self)
[docs] def ping(self, request):
"""
Ping method is used to ping admin_kit ajax
"""
from django.shortcuts import render
return render(request, 'admin_kit/ping.html')
[docs] def js_config(self, request):
"""
Renders the config.js file which configures global variables
"""
from django.shortcuts import render
base_index = request.path.rfind('js_config')
app_url = request.path[:base_index-1]
enable_dup = True
try:
from django.conf import settings
enable_dup = not settings.KIT_DISABLE_DUPLICATE
except AttributeError:
enable_dup = True
return render(request, 'admin_kit/config.js',
context={"app": app_url, "duplicate": enable_dup},
content_type="text/javascript")
[docs] def register(self, key, ajax_class):
"""
Registers the ``ajax_class`` for ajax behaviour
key :: str
This is the *key* that will be used in models for binding
ajax_class :: class
The ajax class that inherits :class:`admin_kit.ajax.Ajax`
"""
key = ajax_class.generate_key(key)
self._registry[key] = ajax_class()
[docs] def ajax(self, request, key):
"""
Calls route method
"""
response = self._registry[key].route(request)
return response
[docs] def get_urls(self):
"""
Returns the list of urls of admin_kit
"""
from django.conf.urls import url
from django.conf import settings
urlpatterns = [
url(r'^ajax/(?P<key>.*)/', self.ajax, name='ajax'),
url(r'js_config/', self.js_config, name='js_config')
]
if settings.DEBUG or hasattr(settings, 'TEST_MODE'):
urlpatterns += [url(r'^ping', self.ping, name='ping')]
return urlpatterns
@property
def urls(self):
"""
The actual property used by django for routing requests
"""
return self.get_urls(), 'admin_kit', self.name
site = AdminKitSite()