mirror of
https://github.com/datafolklabs/cement.git
synced 2026-02-06 14:16:46 +00:00
better support for reloading apps
This commit is contained in:
parent
ecd5308d72
commit
366f45e8f9
@ -1,7 +1,11 @@
|
||||
"""Cement core extensions module."""
|
||||
|
||||
import sys
|
||||
from ..core import backend, exc, interface, handler
|
||||
|
||||
if sys.version_info[0] >= 3:
|
||||
from imp import reload # pragma: no cover
|
||||
|
||||
Log = backend.minimal_logger(__name__)
|
||||
|
||||
def extension_validator(klass, obj):
|
||||
@ -133,8 +137,13 @@ class CementExtensionHandler(handler.CementBaseHandler):
|
||||
|
||||
Log.debug("loading the '%s' framework extension" % ext_module)
|
||||
try:
|
||||
__import__(ext_module, globals(), locals(), [])
|
||||
self.loaded_extensions.append(ext_module)
|
||||
if ext_module in sys.modules:
|
||||
reload(sys.modules[ext_module])
|
||||
else:
|
||||
__import__(ext_module, globals(), locals(), [])
|
||||
|
||||
if ext_module not in self.loaded_extensions:
|
||||
self.loaded_extensions.append(ext_module)
|
||||
|
||||
except ImportError as e:
|
||||
raise exc.CementRuntimeError(e.args[0])
|
||||
|
||||
@ -343,10 +343,6 @@ class CementApp(meta.MetaMixin):
|
||||
def argv(self):
|
||||
return self._meta.argv
|
||||
|
||||
@property
|
||||
def argv(self):
|
||||
return self._meta.argv
|
||||
|
||||
def extend(self, member_name, member_object):
|
||||
"""
|
||||
Extend the CementApp() object with additional functions/classes such
|
||||
|
||||
@ -6,25 +6,6 @@ class TestApp(foundation.CementApp):
|
||||
class Meta:
|
||||
config_files = []
|
||||
argv = []
|
||||
|
||||
def __init__(self, *args, **kw):
|
||||
super(TestApp, self).__init__(*args, **kw)
|
||||
from cement.ext import ext_argparse
|
||||
from cement.ext import ext_nulloutput
|
||||
from cement.ext import ext_plugin
|
||||
from cement.ext import ext_configparser
|
||||
from cement.ext import ext_logging
|
||||
from cement.ext import ext_json
|
||||
if not 'configparser' in backend.handlers['config']:
|
||||
handler.register(ext_configparser.ConfigParserConfigHandler)
|
||||
if not 'argparse' in backend.handlers['argument']:
|
||||
handler.register(ext_argparse.ArgParseArgumentHandler)
|
||||
if not 'null' in backend.handlers['output']:
|
||||
handler.register(ext_nulloutput.NullOutputHandler)
|
||||
if not 'cement' in backend.handlers['plugin']:
|
||||
handler.register(ext_plugin.CementPluginHandler)
|
||||
if not 'logging' in backend.handlers['log']:
|
||||
handler.register(ext_logging.LoggingLogHandler)
|
||||
|
||||
def setup(self):
|
||||
super(TestApp, self).setup()
|
||||
|
||||
@ -27,7 +27,6 @@ class ConfigTestCase(unittest.TestCase):
|
||||
def test_has_key(self):
|
||||
self.app.setup()
|
||||
ok_(self.app.config.has_section(self.app._meta.config_section))
|
||||
self.app.setup()
|
||||
|
||||
def test_config_override(self):
|
||||
defaults = dict()
|
||||
|
||||
@ -41,6 +41,10 @@ class FoundationTestCase(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.app = _t.prep('my_app')
|
||||
|
||||
def test_argv(self):
|
||||
app = _t.prep('my_app', argv=['bogus', 'args'])
|
||||
eq_(app.argv, ['bogus', 'args'])
|
||||
|
||||
def test_old_app(self):
|
||||
defaults = backend.defaults()
|
||||
defaults['test'] = dict()
|
||||
|
||||
@ -90,6 +90,7 @@ class HandlerTestCase(unittest.TestCase):
|
||||
raise
|
||||
|
||||
def test_verify_handler(self):
|
||||
self.app.setup()
|
||||
ok_(handler.registered('output', 'null'))
|
||||
eq_(handler.registered('output', 'bogus_handler'), False)
|
||||
eq_(handler.registered('bogus_type', 'bogus_handler'), False)
|
||||
@ -148,8 +149,10 @@ class HandlerTestCase(unittest.TestCase):
|
||||
eq_(handler.defined('bogus'), False)
|
||||
|
||||
def test_handler_registered(self):
|
||||
self.app.setup()
|
||||
eq_(handler.registered('output', 'null'), True)
|
||||
|
||||
def test_handler_enabled(self):
|
||||
self.app.setup()
|
||||
eq_(handler.enabled('output', 'null'), True)
|
||||
|
||||
|
||||
@ -10,11 +10,11 @@ from cement.utils import test_helper as _t
|
||||
_t.prep()
|
||||
from cement.ext import ext_json
|
||||
|
||||
def import_json():
|
||||
from cement.ext import ext_json
|
||||
handler.register(ext_json.JsonOutputHandler)
|
||||
hook.register()(ext_json.cement_post_setup_hook)
|
||||
hook.register()(ext_json.cement_pre_run_hook)
|
||||
#def import_json():
|
||||
# from cement.ext import ext_json
|
||||
# handler.register(ext_json.JsonOutputHandler)
|
||||
# hook.register()(ext_json.cement_post_setup_hook)
|
||||
# hook.register()(ext_json.cement_pre_run_hook)
|
||||
|
||||
class JsonExtTestCase(unittest.TestCase):
|
||||
def setUp(self):
|
||||
@ -23,7 +23,6 @@ class JsonExtTestCase(unittest.TestCase):
|
||||
output_handler='json',
|
||||
argv=['--json']
|
||||
)
|
||||
import_json()
|
||||
|
||||
def test_json(self):
|
||||
self.app.setup()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user