提交 082d02f0 authored 作者: Michael Osthege's avatar Michael Osthege 提交者: Brandon T. Willard

Pass instance when calling getter/setter

上级 755f385a
...@@ -103,6 +103,12 @@ def test_config_hash(): ...@@ -103,6 +103,12 @@ def test_config_hash():
assert h2 == h0 assert h2 == h0
def test_config_print():
root = configparser.config
result = str(root)
assert isinstance(result, str)
class TestConfigTypes: class TestConfigTypes:
def test_bool(self): def test_bool(self):
valids = { valids = {
......
...@@ -27,6 +27,7 @@ class _ChangeFlagsDecorator: ...@@ -27,6 +27,7 @@ class _ChangeFlagsDecorator:
args.update(kwargs) args.update(kwargs)
self.confs = {k: _root._config_var_dict[k] for k in args} self.confs = {k: _root._config_var_dict[k] for k in args}
self.new_vals = args self.new_vals = args
self._root = _root
def __call__(self, f): def __call__(self, f):
@wraps(f) @wraps(f)
...@@ -39,10 +40,10 @@ class _ChangeFlagsDecorator: ...@@ -39,10 +40,10 @@ class _ChangeFlagsDecorator:
def __enter__(self): def __enter__(self):
self.old_vals = {} self.old_vals = {}
for k, v in self.confs.items(): for k, v in self.confs.items():
self.old_vals[k] = v.__get__(True, None) self.old_vals[k] = v.__get__(self._root, self._root.__class__)
try: try:
for k, v in self.confs.items(): for k, v in self.confs.items():
v.__set__(None, self.new_vals[k]) v.__set__(self._root, self.new_vals[k])
except Exception: except Exception:
_logger.error(f"Failed to change flags for {self.confs}.") _logger.error(f"Failed to change flags for {self.confs}.")
self.__exit__() self.__exit__()
...@@ -50,7 +51,7 @@ class _ChangeFlagsDecorator: ...@@ -50,7 +51,7 @@ class _ChangeFlagsDecorator:
def __exit__(self, *args): def __exit__(self, *args):
for k, v in self.confs.items(): for k, v in self.confs.items():
v.__set__(None, self.old_vals[k]) v.__set__(self._root, self.old_vals[k])
def _hash_from_code(msg): def _hash_from_code(msg):
...@@ -84,7 +85,7 @@ class TheanoConfigParser: ...@@ -84,7 +85,7 @@ class TheanoConfigParser:
print(cv, file=buf) print(cv, file=buf)
if print_doc: if print_doc:
print(" Doc: ", cv.doc, file=buf) print(" Doc: ", cv.doc, file=buf)
print(" Value: ", cv.__get__(True, None), file=buf) print(" Value: ", cv.__get__(self, self.__class__), file=buf)
print("", file=buf) print("", file=buf)
def get_config_hash(self): def get_config_hash(self):
...@@ -104,7 +105,7 @@ class TheanoConfigParser: ...@@ -104,7 +105,7 @@ class TheanoConfigParser:
return _hash_from_code( return _hash_from_code(
"\n".join( "\n".join(
[ [
"{} = {}".format(cv.fullname, cv.__get__(True, None)) "{} = {}".format(cv.fullname, cv.__get__(self, self.__class__))
for cv in all_opts for cv in all_opts
] ]
) )
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论