[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