From 5c81ea7c44c9e48fcd243bdc57464eaf34a92650 Mon Sep 17 00:00:00 2001
From: Dominic Kempf <dominic.kempf@iwr.uni-heidelberg.de>
Date: Thu, 14 Apr 2016 10:42:36 +0200
Subject: [PATCH] Move cache_context into its own module

---
 python/dune/perftool/generation/__init__.py |  4 ++-
 python/dune/perftool/generation/cache.py    | 30 +++------------------
 python/dune/perftool/generation/context.py  | 26 ++++++++++++++++++
 3 files changed, 32 insertions(+), 28 deletions(-)
 create mode 100644 python/dune/perftool/generation/context.py

diff --git a/python/dune/perftool/generation/__init__.py b/python/dune/perftool/generation/__init__.py
index cdbcb77d..906183ac 100644
--- a/python/dune/perftool/generation/__init__.py
+++ b/python/dune/perftool/generation/__init__.py
@@ -1,7 +1,6 @@
 from __future__ import absolute_import
 
 from dune.perftool.generation.cache import (cached,
-                                            cache_context,
                                             generator_factory,
                                             retrieve_cache_items,
                                             delete_cache_items,
@@ -24,3 +23,6 @@ from dune.perftool.generation.loopy import (domain,
                                             temporary_variable,
                                             valuearg,
                                             )
+
+from dune.perftool.generation.context import (cache_context,
+                                              )
\ No newline at end of file
diff --git a/python/dune/perftool/generation/cache.py b/python/dune/perftool/generation/cache.py
index ac5dc155..3975dda9 100644
--- a/python/dune/perftool/generation/cache.py
+++ b/python/dune/perftool/generation/cache.py
@@ -11,31 +11,6 @@ from pytools import memoize
 # have one cache the module level. It is easier than handing around an instance of it.
 _cache = {}
 
-# Implement a context manager that allows to temporarily define tags globally.
-_cache_context_stack = []
-
-
-class _CacheContext(object):
-    def __init__(self, tags):
-        self.tags = tags
-
-    def __enter__(self):
-        _cache_context_stack.append(self.tags)
-
-    def __exit__(self, exc_type, exc_value, traceback):
-        _cache_context_stack.pop()
-
-
-def cache_context(*tags):
-    return _CacheContext(tags)
-
-
-def _get_context_tags():
-    result = tuple()
-    for items in _cache_context_stack:
-        result = result + items
-    return result
-
 
 def _freeze(data):
     """ A function that deterministically generates an
@@ -133,10 +108,11 @@ class _RegisteredFunction(object):
         self.cache_key_generator = cache_key_generator
 
         # Append the current context item tags to the given ones
+        from dune.perftool.generation.context import get_context_tags
         if 'item_tags' in kwargs:
-            kwargs['item_tags'] = tuple(kwargs['item_tags']) + _get_context_tags()
+            kwargs['item_tags'] = tuple(kwargs['item_tags']) + get_context_tags()
         else:
-            kwargs['item_tags'] = _get_context_tags()
+            kwargs['item_tags'] = get_context_tags()
 
         self.itemtype = _construct_cache_item_type("CacheItemType", **kwargs)
 
diff --git a/python/dune/perftool/generation/context.py b/python/dune/perftool/generation/context.py
new file mode 100644
index 00000000..d96e7e9c
--- /dev/null
+++ b/python/dune/perftool/generation/context.py
@@ -0,0 +1,26 @@
+""" Context managers for code generation. """
+
+# Implement a context manager that allows to temporarily define tags globally.
+_cache_context_stack = []
+
+
+class _CacheContext(object):
+    def __init__(self, tags):
+        self.tags = tags
+
+    def __enter__(self):
+        _cache_context_stack.append(self.tags)
+
+    def __exit__(self, exc_type, exc_value, traceback):
+        _cache_context_stack.pop()
+
+
+def cache_context(*tags):
+    return _CacheContext(tags)
+
+
+def get_context_tags():
+    result = tuple()
+    for items in _cache_context_stack:
+        result = result + items
+    return result
-- 
GitLab