From ae7af94110a189aacc314bc25e8f390d090320ca Mon Sep 17 00:00:00 2001 From: Dominic Kempf <dominic.kempf@iwr.uni-heidelberg.de> Date: Thu, 14 Apr 2016 11:08:01 +0200 Subject: [PATCH] Implement a generic context manager that globally defines some value --- python/dune/perftool/generation/__init__.py | 4 +++- python/dune/perftool/generation/context.py | 24 +++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/python/dune/perftool/generation/__init__.py b/python/dune/perftool/generation/__init__.py index 906183ac..79480b15 100644 --- a/python/dune/perftool/generation/__init__.py +++ b/python/dune/perftool/generation/__init__.py @@ -25,4 +25,6 @@ from dune.perftool.generation.loopy import (domain, ) from dune.perftool.generation.context import (cache_context, - ) \ No newline at end of file + generic_context, + get_generic_context_value, + ) diff --git a/python/dune/perftool/generation/context.py b/python/dune/perftool/generation/context.py index 85ea60a9..13099e01 100644 --- a/python/dune/perftool/generation/context.py +++ b/python/dune/perftool/generation/context.py @@ -29,3 +29,27 @@ def get_context_tags(): for items in _cache_context_stack: result = result + items return result + + +_generic_context_cache = {} + + +class _GenericContext(object): + def __init__(self, key, value): + self.key = key + self.value = value + assert key not in _generic_context_cache + + def __enter__(self): + _generic_context_cache[self.key] = self.value + + def __exit__(self, exc_type, exc_value, traceback): + del _generic_context_cache[self.key] + + +def generic_context(key, value): + return _GenericContext(key, value) + + +def get_generic_context_value(key): + return _generic_context_cache[key] -- GitLab