Switch to side-by-side view

--- a/Allura/allura/lib/app_globals.py
+++ b/Allura/allura/lib/app_globals.py
@@ -5,7 +5,6 @@
 __all__ = ['Globals']
 import logging
 import socket
-import re
 import cgi
 import json
 import shlex
@@ -16,7 +15,6 @@
 
 import pkg_resources
 
-import mock
 import pysolr
 import oembed
 import markdown
@@ -27,7 +25,6 @@
 import pygments.util
 from tg import config, session
 from pylons import c, request
-from bson import ObjectId
 from paste.deploy.converters import asbool, asint
 
 import ew as ew_core
@@ -40,7 +37,7 @@
 from allura.lib import helpers as h
 from allura.lib.widgets import analytics
 from allura.lib.security import Credentials
-from allura.lib.async import Connection
+from allura.lib.async import Connection, MockAMQ
 
 log = logging.getLogger(__name__)
 
@@ -72,8 +69,8 @@
 
         # Setup RabbitMQ
         if asbool(config.get('amqp.mock')):
-            self.amq_conn = MockAMQ(self)
-            self._publish = self.mock_amq.publish
+            self.amq_conn = self.mock_amq = MockAMQ(self)
+            self._publish = self.amq_conn.publish
         else:
             self.amq_conn = Connection(
                 hostname=config.get('amqp.hostname', 'localhost'),
@@ -362,82 +359,6 @@
     def delete(self, *args, **kwargs):
         pass
 
-class MockAMQ(object):
-
-    def __init__(self, globals):
-        self.exchanges = defaultdict(list)
-        self.queue_bindings = defaultdict(list)
-        self.globals = globals
-
-    def clear(self):
-        for k in self.exchanges.keys():
-            self.exchanges[k][:] = []
-
-    def create_backend(self):
-        return mock.Mock()
-
-    def publish(self, xn, message, routing_key, **kw):
-        self.exchanges[xn].append(
-            dict(routing_key=routing_key, message=message, kw=kw))
-
-    def pop(self, xn):
-        return self.exchanges[xn].pop(0)
-
-    def setup_handlers(self, paste_registry=None):
-        from allura.command.reactor import tool_consumers, ReactorCommand
-        from allura.command import base
-        self.queue_bindings = defaultdict(list)
-        base.log = logging.getLogger('allura.command')
-        base.M = M
-        self.tools = []
-        for ep in pkg_resources.iter_entry_points('allura'):
-            try:
-                self.tools.append((ep.name, ep.load()))
-            except ImportError:
-                log.warning('Canot load entry point %s', ep)
-        self.reactor = ReactorCommand('reactor_setup')
-        if paste_registry:
-            self.reactor.registry = paste_registry
-        self.reactor.globals = self.globals
-        self.reactor.parse_args([])
-        for name, tool in self.tools:
-            for method, xn, qn, keys in tool_consumers(name, tool):
-                for k in keys:
-                    self.queue_bindings[xn].append(
-                        dict(key=k, tool_name=name, method=method))
-            # self.setup_tool(name, tool)
-
-    def handle(self, xn):
-        msg = self.pop(xn)
-        for handler in self.queue_bindings[xn]:
-            if self._route_matches(handler['key'], msg['routing_key']):
-                self._route(xn, msg, handler['tool_name'], handler['method'])
-
-    def handle_all(self):
-        for xn, messages in self.exchanges.items():
-            while messages:
-                self.handle(xn)
-
-    def _route(self, xn, msg, tool_name, method):
-        import mock
-        if xn == 'audit':
-            callback = self.reactor.route_audit(tool_name, method)
-        else:
-            callback = self.reactor.route_react(tool_name, method)
-        data = msg['message']
-        message = mock.Mock()
-        message.delivery_info = dict(
-            routing_key=msg['routing_key'])
-        message.ack = lambda:None
-        return callback(data, message)
-
-    def _route_matches(self, pattern, key):
-        re_pattern = (pattern
-                      .replace('.', r'\.')
-                      .replace('*', r'(?:\w+)')
-                      .replace('#', r'(?:\w+)(?:\.\w+)*'))
-        return re.match(re_pattern+'$', key)
-
 class Icon(object):
     def __init__(self, char, css):
         self.char = char