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
,
11 class LookupRegistry(object):
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
):
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
):
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
]
35 return self
._registry
.get(key
, None)
38 registry
= LookupRegistry()
42 # Attempt to import the app's lookups module.
43 autodiscover_modules('lookups', register_to
=registry
)