This repository was archived by the owner on May 10, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path__init__.py
More file actions
90 lines (71 loc) · 1.89 KB
/
__init__.py
File metadata and controls
90 lines (71 loc) · 1.89 KB
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import collections
import contextdecorator as cd
from events import Events
import logging
import six
import threading
events = Events(("send_event"))
modules = {}
def _loggingHandler(name, data):
logging.getLogger("nstack.events").info("%s: %r", name, data)
events.send_event += _loggingHandler
def send_event(name, data):
events.send_event(name, data)
class LocalConfig(threading.local):
def __init__(self):
self.stack = collections.deque([{}])
def push(self, config):
self.stack.appendleft(config)
def pop(self):
self.stack.popleft()
def peek(self):
try:
return self.stack[0]
except LookupError:
raise LookupError("Empty config")
def __getitem__(self, name):
return self.peek()[name]
def get(self, name, default=None):
return self.peek().get(name, default)
def __contains__(self, name):
try:
self[name]
except LookupError:
return False
return True
config = LocalConfig()
@cd.contextmanager
def with_config(conf):
config.push(conf)
try:
yield config
finally:
config.pop()
def use_config(config):
config.push(config)
class Module_(object):
def __init__(self, name):
modules[name] = self
self.methods = {}
def expose(self, name=None, func=None):
def decorator(func):
if name is None:
name = func.__name__
self.methods[name] = func
if func is None:
return decorator
decorator(func)
class Registry(type):
modules = {}
def __init__(cls, name, bases, dict_):
try:
Module
except NameError:
pass
else:
print(dict_)
Registry.modules[name] = cls
@six.add_metaclass(Registry)
class Module(object):
def __init__(self):
self.args = config