Update django version in requirements.txt
[pgweb/local.git] / dep / django-selectable / selectable / registry.py
blob5a475af7e7ce45463606a61be242a6cbd513843a
1 from __future__ import unicode_literals
3 from django.utils.encoding import force_text
4 from django.utils.module_loading import autodiscover_modules
6 from selectable.base import LookupBase
7 from selectable.exceptions import (LookupAlreadyRegistered, LookupNotRegistered,
8 LookupInvalid)
11 class LookupRegistry(object):
13 def __init__(self):
14 self._registry = {}
16 def validate(self, lookup):
17 if not issubclass(lookup, LookupBase):
18 raise LookupInvalid('Registered lookups must inherit from the LookupBase class')
20 def register(self, lookup):
21 self.validate(lookup)
22 name = force_text(lookup.name())
23 if name in self._registry:
24 raise LookupAlreadyRegistered('The name %s is already registered' % name)
25 self._registry[name] = lookup
27 def unregister(self, lookup):
28 self.validate(lookup)
29 name = force_text(lookup.name())
30 if name not in self._registry:
31 raise LookupNotRegistered('The name %s is not registered' % name)
32 del self._registry[name]
34 def get(self, key):
35 return self._registry.get(key, None)
38 registry = LookupRegistry()
41 def autodiscover():
42 # Attempt to import the app's lookups module.
43 autodiscover_modules('lookups', register_to=registry)