summaryrefslogtreecommitdiff
path: root/testenv/conf/__init__.py
blob: 55433c98cb850edbf322a54ee2f8727ce4896aae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import os

# this file implements the mechanism of conf class auto-registration,
# don't modify this file if you have no idea what you're doing


def gen_hook():
    hook_table = {}

    class Wrapper:
        """
        Decorator class which implements the conf class registration.
        """
        def __init__(self, alias=None):
            self.alias = alias

        def __call__(self, cls):
            # register the class object with the name of the class
            hook_table[cls.__name__] = cls
            if self.alias:
                # also register the alias of the class
                hook_table[self.alias] = cls

            return cls

    def find_hook(name):
        try:
            return hook_table[name]
        except:
            raise AttributeError

    return Wrapper, find_hook

_register, find_conf = gen_hook()
hook = rule = _register

__all__ = ['hook', 'rule']

for module in os.listdir(os.path.dirname(__file__)):
    # import every module under this package except __init__.py,
    # so that the decorator `register` applies
    # (nothing happens if the script is not loaded)
    if module != '__init__.py' and module.endswith('.py'):
        module_name = module[:-3]
        mod = __import__('%s.%s' % (__name__, module_name),
                         globals(),
                         locals())
        __all__.append(module_name)