Modified: bloodhound/branches/bep_0011_batch_create_tickets/installer/tests.py URL: http://svn.apache.org/viewvc/bloodhound/branches/bep_0011_batch_create_tickets/installer/tests.py?rev=1763089&r1=1763088&r2=1763089&view=diff ============================================================================== --- bloodhound/branches/bep_0011_batch_create_tickets/installer/tests.py (original) +++ bloodhound/branches/bep_0011_batch_create_tickets/installer/tests.py Sun Oct 2 17:51:00 2016 @@ -23,7 +23,7 @@ import unittest import shutil import os from tempfile import mkdtemp, NamedTemporaryFile -from bloodhound_setup import backupfile, BloodhoundSetup +from bhsetup.bloodhound_setup import backupfile, BloodhoundSetup from functools import partial class BackupfileTest(unittest.TestCase):
Propchange: bloodhound/branches/bep_0011_batch_create_tickets/trac/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Sun Oct 2 17:51:00 2016 @@ -1,5 +1,6 @@ /bloodhound/branches/bep_0003_multiproduct/trac:1461360-1463488 /bloodhound/branches/bep_0010_ticket_numbering/trac:1506462-1517786 +/bloodhound/trunk/trac:1598681-1763083 /incubator/bloodhound/branches/bep_0003_multiproduct/trac:1420073-1461359 /incubator/bloodhound/vendor/trac/0.13dev_r11046:1340951 /incubator/bloodhound/vendor/trac/current:1300522-1444738 Modified: bloodhound/branches/bep_0011_batch_create_tickets/trac/trac/hooks.py URL: http://svn.apache.org/viewvc/bloodhound/branches/bep_0011_batch_create_tickets/trac/trac/hooks.py?rev=1763089&r1=1763088&r2=1763089&view=diff ============================================================================== --- bloodhound/branches/bep_0011_batch_create_tickets/trac/trac/hooks.py (original) +++ bloodhound/branches/bep_0011_batch_create_tickets/trac/trac/hooks.py Sun Oct 2 17:51:00 2016 @@ -15,12 +15,10 @@ # specific language governing permissions and limitations # under the License. -import imp -import inspect +import abc import os import pkg_resources -from trac.config import Configuration from trac.env import open_environment from trac.util import exception_to_unicode from trac.util.concurrency import threading @@ -32,39 +30,38 @@ __all__ = ['environment_factory', 'insta class EnvironmentFactoryBase(object): + __metaclass__ = abc.ABCMeta + + @abc.abstractmethod def open_environment(self, environ, env_path, global_env, use_cache=False): - raise NotImplementedError("Must override method 'open_environment'") + pass class RequestFactoryBase(object): - def create_request(self, env, environ, start_response): - raise NotImplementedError("Must override method 'create_request'") + __metaclass__ = abc.ABCMeta + @abc.abstractmethod + def create_request(self, env, environ, start_response): + pass -def _get_plugins_dir(env_path): - return os.path.normcase(os.path.realpath(os.path.join(env_path, 'plugins'))) +def load_class(fqn): + try: + pkg, resource = fqn.rsplit('.', 1) + except ValueError: + class_ = None + else: + try: + module = __import__(pkg, fromlist=[resource]) + except ImportError: + class_ = None + else: + try: + class_ = getattr(module, resource) + except AttributeError: + class_ = None + return class_ -def _get_config(env_path): - return Configuration(os.path.join(env_path, 'conf', 'trac.ini'), - {'envname': os.path.basename(env_path)}) - - -def _hook_load(env_path, hook_path): - hook_name = os.path.basename(hook_path[:-3]) - plugins_dir = _get_plugins_dir(env_path) - load_path = os.path.join(plugins_dir, hook_path) - module = imp.load_source(hook_name, load_path) - return module - - -def _get_hook_class(env_path, hook_path, class_type): - module = _hook_load(env_path, hook_path) - for (name, cls) in inspect.getmembers(module, inspect.isclass): - if issubclass(cls, class_type) and \ - not cls is class_type: - return cls - return None _global_hooks_installed = False _global_hooks_lock = threading.Lock() @@ -90,15 +87,11 @@ def install_global_hooks(): def environment_factory(env): - hook_path = env.config.get('trac', 'environment_factory', default=None) - return _get_hook_class(env.path, hook_path, EnvironmentFactoryBase) \ - if hook_path else None + return load_class(env.config.get('trac', 'environment_factory')) def request_factory(env): - hook_path = env.config.get('trac', 'request_factory', default=None) - return _get_hook_class(env.path, hook_path, RequestFactoryBase) \ - if hook_path else None + return load_class(env.config.get('trac', 'request_factory')) class BootstrapHandlerBase(object): @@ -265,19 +258,18 @@ class DefaultBootstrapHandler(BootstrapH 'environment(s).') run_once = environ['wsgi.run_once'] - env = None - self.global_env = global_env = None try: - self.global_env = global_env = \ - open_environment(env_path, use_cache=not run_once) + global_env = open_environment(env_path, use_cache=not run_once) factory = environment_factory(global_env) - factory_env = \ - factory().open_environment(environ, env_path, global_env, - use_cache=not run_once) \ - if factory else None - env = factory_env if factory_env else global_env + factory_env = factory().open_environment(environ, env_path, + global_env, + use_cache=not run_once) \ + if factory else None except Exception: raise + else: + self.global_env = global_env + env = factory_env if factory_env else global_env return env def create_request(self, env, environ, start_response):