mirror of
https://github.com/postgres/pgweb.git
synced 2025-08-01 15:54:53 +00:00

Sync up to the same version we have on the commitfest app, which will also be required for eventual django 1.11 support.
44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
from __future__ import unicode_literals
|
|
|
|
from django.utils.encoding import force_text
|
|
from django.utils.module_loading import autodiscover_modules
|
|
|
|
from selectable.base import LookupBase
|
|
from selectable.exceptions import (LookupAlreadyRegistered, LookupNotRegistered,
|
|
LookupInvalid)
|
|
|
|
|
|
class LookupRegistry(object):
|
|
|
|
def __init__(self):
|
|
self._registry = {}
|
|
|
|
def validate(self, lookup):
|
|
if not issubclass(lookup, LookupBase):
|
|
raise LookupInvalid('Registered lookups must inherit from the LookupBase class')
|
|
|
|
def register(self, lookup):
|
|
self.validate(lookup)
|
|
name = force_text(lookup.name())
|
|
if name in self._registry:
|
|
raise LookupAlreadyRegistered('The name %s is already registered' % name)
|
|
self._registry[name] = lookup
|
|
|
|
def unregister(self, lookup):
|
|
self.validate(lookup)
|
|
name = force_text(lookup.name())
|
|
if name not in self._registry:
|
|
raise LookupNotRegistered('The name %s is not registered' % name)
|
|
del self._registry[name]
|
|
|
|
def get(self, key):
|
|
return self._registry.get(key, None)
|
|
|
|
|
|
registry = LookupRegistry()
|
|
|
|
|
|
def autodiscover():
|
|
# Attempt to import the app's lookups module.
|
|
autodiscover_modules('lookups', register_to=registry)
|