Source code for natch.core.registry
from natch.abstract import Registry as AbstractRegistry
from natch.hashers import QualnameHasher
[docs]class Registry(AbstractRegistry):
def __init__(self, *args, **kwargs):
super(Registry, self).__init__(*args, **kwargs)
[docs] def set_hasher(self, hasher):
if hasher is None:
hasher = QualnameHasher()
super(Registry, self).set_hasher(hasher)
[docs] def register(self, func, rule):
func_hash = self.hasher.hash(func)
if func_hash not in self.index:
self.index[func_hash] = []
path = (func, rule)
self.index[func_hash].append(path)
[docs] def unregister(self, func, rule):
func_hash = self.hasher.hash(func)
if func_hash not in self.index:
return
alternation = None
for (f, r) in self.index[func_hash]:
if r == rule:
alternation = (f, r)
break
if alternation is not None:
self.index[func_hash].remove(alternation)
[docs] def lookup(self, func, *args, **kwargs):
func_hash = self.hasher.hash(func)
if func_hash not in self.index:
return None
for (f, rule) in self.index[func_hash]:
does_match = rule.does_match(*args, **kwargs)
if does_match:
return f
return None