Fix test failures caused by the performance patch.

It isn't safe to assume there is an environment or mode in any given
object. Only skip the extra work if the object explicitly has production
in it.
This commit is contained in:
Rob Crittenden 2011-02-09 17:02:10 -05:00
parent f34c0ab916
commit c187b276ad
3 changed files with 21 additions and 8 deletions

View File

@ -24,7 +24,7 @@ Base classes for all front-end plugins.
import re
import inspect
from base import lock, check_name, NameSpace
from plugable import Plugin
from plugable import Plugin, is_production_mode
from parameters import create_param, parse_param_spec, Param, Str, Flag, Password
from util import make_repr
from output import Output, Entry, ListOfEntries
@ -351,7 +351,7 @@ class HasParam(Plugin):
self._filter_param_by_context(name, env),
sort=False
)
if self.env.mode != 'production':
if not is_production_mode(self):
check = getattr(self, 'check_' + name, None)
if callable(check):
check(namespace)

View File

@ -44,6 +44,17 @@ from constants import DEFAULT_CONFIG, FORMAT_STDERR, FORMAT_FILE
# FIXME: Updated constants.TYPE_ERROR to use this clearer format from wehjit:
TYPE_ERROR = '%s: need a %r; got a %r: %r'
def is_production_mode(obj):
"""
If the object has self.env.mode defined and that mode is
production return True, otherwise return False.
"""
if getattr(obj, 'env', None) is None:
return False
if getattr(obj.env, 'mode', None) is None:
return False
return obj.env.mode == 'production'
class SetProxy(ReadOnly):
"""
@ -207,9 +218,8 @@ class Plugin(ReadOnly):
def finalize(self):
"""
"""
if self.env.mode == 'production':
return
lock(self)
if not is_production_mode(self):
lock(self)
def set_api(self, api):
"""
@ -597,13 +607,14 @@ class API(DictProxy):
p.bases.append(base)
yield p.instance
production_mode = is_production_mode(self)
for name in self.register:
base = self.register[name]
magic = getattr(self.register, name)
namespace = NameSpace(
plugin_iter(base, (magic[k] for k in magic))
)
if self.env.mode != 'production':
if not production_mode:
assert not (
name in self.__d or hasattr(self, name)
)
@ -612,12 +623,12 @@ class API(DictProxy):
for p in plugins.itervalues():
p.instance.set_api(self)
if self.env.mode != 'production':
if not production_mode:
assert p.instance.api is self
for p in plugins.itervalues():
p.instance.finalize()
if self.env.mode != 'production':
if not production_mode:
assert islocked(p.instance) is True
object.__setattr__(self, '_API__finalized', True)
tuple(PluginInfo(p) for p in plugins.itervalues())

View File

@ -568,6 +568,8 @@ class test_Env(ClassChecker):
for (key, value) in defaults.items():
if value is object:
continue
if key == 'mode':
continue
assert o[key] == value, '%r is %r; should be %r' % (key, o[key], value)
def test_finalize(self):