[Checkins] SVN: Products.ZCatalog/trunk/ Added a new `load_from_path` class method to the `PriorityMap`, which allows one to load a plan from a file, instead of a module via an environment var.

Hanno Schlichting hannosch at hannosch.eu
Thu Nov 17 12:12:33 UTC 2011


Log message for revision 123406:
  Added a new `load_from_path` class method to the `PriorityMap`, which allows one to load a plan from a file, instead of a module via an environment var.
  

Changed:
  U   Products.ZCatalog/trunk/CHANGES.txt
  U   Products.ZCatalog/trunk/src/Products/ZCatalog/plan.py
  A   Products.ZCatalog/trunk/src/Products/ZCatalog/tests/queryplan.py
  U   Products.ZCatalog/trunk/src/Products/ZCatalog/tests/test_plan.py

-=-
Modified: Products.ZCatalog/trunk/CHANGES.txt
===================================================================
--- Products.ZCatalog/trunk/CHANGES.txt	2011-11-17 10:50:58 UTC (rev 123405)
+++ Products.ZCatalog/trunk/CHANGES.txt	2011-11-17 12:12:32 UTC (rev 123406)
@@ -4,6 +4,8 @@
 2.13.22 (unreleased)
 --------------------
 
+- Added a new `load_from_path` class method to the `PriorityMap`, which allows
+  one to load a plan from a file, instead of a module via an environment var.
 
 2.13.21 (2011-10-20)
 --------------------

Modified: Products.ZCatalog/trunk/src/Products/ZCatalog/plan.py
===================================================================
--- Products.ZCatalog/trunk/src/Products/ZCatalog/plan.py	2011-11-17 10:50:58 UTC (rev 123405)
+++ Products.ZCatalog/trunk/src/Products/ZCatalog/plan.py	2011-11-17 12:12:32 UTC (rev 123406)
@@ -11,6 +11,8 @@
 #
 ##############################################################################
 
+import os
+import os.path
 import time
 from collections import namedtuple
 from logging import getLogger
@@ -97,12 +99,21 @@
         if location:
             try:
                 pmap = resolve(location)
-                cls.load_from_path(location, pmap)
+                cls.load_pmap(location, pmap)
             except ImportError:
                 logger.warning('could not load priority map from %s', location)
 
     @classmethod
-    def load_from_path(cls, location, pmap):
+    def load_from_path(cls, path):
+        path = os.path.abspath(path)
+        _globals = {}
+        _locals = {}
+        execfile(path, _globals, _locals)
+        pmap = _locals['queryplan'].copy()
+        cls.load_pmap(path, pmap)
+
+    @classmethod
+    def load_pmap(cls, location, pmap):
         logger.info('loaded priority %d map(s) from %s',
             len(pmap), location)
         # Convert the simple benchmark tuples to namedtuples

Added: Products.ZCatalog/trunk/src/Products/ZCatalog/tests/queryplan.py
===================================================================
--- Products.ZCatalog/trunk/src/Products/ZCatalog/tests/queryplan.py	                        (rev 0)
+++ Products.ZCatalog/trunk/src/Products/ZCatalog/tests/queryplan.py	2011-11-17 12:12:32 UTC (rev 123406)
@@ -0,0 +1,11 @@
+# dumped at some point
+
+queryplan = {
+    '/folder/catalog': {
+        'VALUE_INDEXES': frozenset(['index1']),
+        'index1 index2': {
+            'index1': (2.0, 3, True),
+            'index2': (1.5, 2, False),
+        },
+    }
+}
\ No newline at end of file


Property changes on: Products.ZCatalog/trunk/src/Products/ZCatalog/tests/queryplan.py
___________________________________________________________________
Added: svn:eol-style
   + native

Modified: Products.ZCatalog/trunk/src/Products/ZCatalog/tests/test_plan.py
===================================================================
--- Products.ZCatalog/trunk/src/Products/ZCatalog/tests/test_plan.py	2011-11-17 10:50:58 UTC (rev 123405)
+++ Products.ZCatalog/trunk/src/Products/ZCatalog/tests/test_plan.py	2011-11-17 12:12:32 UTC (rev 123406)
@@ -12,12 +12,15 @@
 ##############################################################################
 
 import os
+import os.path
 import time
 import unittest
 
 from zope.testing import cleanup
 
+HERE = __file__
 
+
 class dummy(object):
 
     def __init__(self, num):
@@ -30,17 +33,6 @@
         return (self.num, self.num + 1)
 
 
-TESTMAP = {
-    '/folder/catalog': {
-        'VALUE_INDEXES': frozenset(['index1']),
-        'index1 index2': {
-            'index1': (2.0, 3, True),
-            'index2': (1.5, 2, False),
-        },
-    }
-}
-
-
 class TestNestedDict(unittest.TestCase):
 
     def setUp(self):
@@ -116,7 +108,6 @@
     def test_load_failure(self):
         try:
             os.environ['ZCATALOGQUERYPLAN'] = 'Products.ZCatalog.invalid'
-            # 'Products.ZCatalog.tests.test_plan.TESTMAP'
             self.pmap.load_default()
             self.assertEquals(self.pmap.get_value(), {})
         finally:
@@ -126,7 +117,7 @@
         from ..plan import Benchmark
         try:
             os.environ['ZCATALOGQUERYPLAN'] = \
-                'Products.ZCatalog.tests.test_plan.TESTMAP'
+                'Products.ZCatalog.tests.queryplan.queryplan'
             self.pmap.load_default()
             expected = {'/folder/catalog': {
                 'VALUE_INDEXES': frozenset(['index1']),
@@ -138,7 +129,19 @@
         finally:
             del os.environ['ZCATALOGQUERYPLAN']
 
+    def test_load_from_path(self):
+        from ..plan import Benchmark
+        path = os.path.join(os.path.dirname(HERE), 'queryplan.py')
+        self.pmap.load_from_path(path)
+        expected = {'/folder/catalog': {
+            'VALUE_INDEXES': frozenset(['index1']),
+            'index1 index2': {
+                'index1': Benchmark(duration=2.0, hits=3, limit=True),
+                'index2': Benchmark(duration=1.5, hits=2, limit=False),
+        }}}
+        self.assertEquals(self.pmap.get_value(), expected)
 
+
 class TestReports(unittest.TestCase):
 
     def setUp(self):



More information about the checkins mailing list