def __init__(self, key): self.key = key self.pkg_resources = None self._extension_classes = {} self._extension_instances = {} self._load_errors = {} # State synchronization self._gen_sync = GenerationSynchronizer('extensionmgr:%s:gen' % key) self._load_lock = threading.Lock() self._shutdown_lock = threading.Lock() self._block_sync_gen = False self.dynamic_urls = DynamicURLResolver() # Extension middleware instances, ordered by dependencies. self.middleware = [] # Wrap the INSTALLED_APPS and TEMPLATE_CONTEXT_PROCESSORS settings # to allow for ref-counted add/remove operations. self._installed_apps_setting = SettingListWrapper( 'INSTALLED_APPS', 'installed app') self._context_processors_setting = SettingListWrapper( 'TEMPLATE_CONTEXT_PROCESSORS', 'context processor') instance_id = id(self) _extension_managers[instance_id] = self
def __init__(self, key): self.key = key self.pkg_resources = None self._extension_classes = {} self._extension_instances = {} self._load_errors = {} # State synchronization self._sync_key = make_cache_key('extensionmgr:%s:gen' % key) self._last_sync_gen = None self.dynamic_urls = DynamicURLResolver() # Extension middleware instances, ordered by dependencies. self.middleware = [] # Wrap the INSTALLED_APPS and TEMPLATE_CONTEXT_PROCESSORS settings # to allow for ref-counted add/remove operations. self._installed_apps_setting = SettingListWrapper( 'INSTALLED_APPS', 'installed app') self._context_processors_setting = SettingListWrapper( 'TEMPLATE_CONTEXT_PROCESSORS', 'context processor') _extension_managers.append(self)
def test_dynamic_url_resolver(self): """Testing DynamicURLResolver""" self.dynamic_urls = DynamicURLResolver() settings.ROOT_URLCONF = patterns( '', url(r'^root/', include(patterns('', self.dynamic_urls))), url(r'^foo/', self._dummy_view, name='foo'), ) new_patterns = patterns( '', url(r'^bar/$', self._dummy_view, name='bar'), url(r'^baz/$', self._dummy_view, name='baz'), ) # The new patterns shouldn't reverse, just the original "foo". reverse('foo') self.assertRaises(NoReverseMatch, reverse, 'bar') self.assertRaises(NoReverseMatch, reverse, 'baz') # Add the new patterns. Now reversing should work. self.dynamic_urls.add_patterns(new_patterns) reverse('foo') reverse('bar') reverse('baz') # Get rid of the patterns again. We should be back in the original # state. self.dynamic_urls.remove_patterns(new_patterns) reverse('foo') self.assertRaises(NoReverseMatch, reverse, 'bar') self.assertRaises(NoReverseMatch, reverse, 'baz')
def __init__(self, extension_manager): super(ExtensionResource, self).__init__() self._extension_manager = extension_manager self._dynamic_patterns = DynamicURLResolver() self._resource_url_patterns_map = {} # We want ExtensionResource to notice when extensions are # initialized or uninitialized, so connect some methods to # those signals. from djblets.extensions.signals import (extension_initialized, extension_uninitialized) extension_initialized.connect(self._on_extension_initialized) extension_uninitialized.connect(self._on_extension_uninitialized)
def test_dynamic_url_resolver(self): """Testing DynamicURLResolver""" def dummy_view(self): pass dynamic_urls = DynamicURLResolver() root_urlconf = [ url(r'^root/', include([dynamic_urls])), url(r'^foo/', dummy_view, name='foo'), ] with self.settings(ROOT_URLCONF=root_urlconf): clear_url_caches() new_patterns = [ url(r'^bar/$', dummy_view, name='bar'), url(r'^baz/$', dummy_view, name='baz'), ] # The new patterns shouldn't reverse, just the original "foo". reverse('foo') self.assertRaises(NoReverseMatch, reverse, 'bar') self.assertRaises(NoReverseMatch, reverse, 'baz') # Add the new patterns. Now reversing should work. dynamic_urls.add_patterns(new_patterns) reverse('foo') reverse('bar') reverse('baz') # Get rid of the patterns again. We should be back in the original # state. dynamic_urls.remove_patterns(new_patterns) reverse('foo') self.assertRaises(NoReverseMatch, reverse, 'bar') self.assertRaises(NoReverseMatch, reverse, 'baz')
from __future__ import unicode_literals from django.conf.urls import include, url from djblets.urls.resolvers import DynamicURLResolver dynamic_urls = DynamicURLResolver() urlpatterns = [ url(r'^repos/(?P<repository_id>\d+)/', include([dynamic_urls])), ]