Refactor routing in app.py.
Move some things out of app.py into functions in routing.py. This makes app.py a bit more readable and allows us to rewrite routing.
This commit is contained in:
parent
dfc23dd1e1
commit
48cf435d71
@ -17,7 +17,7 @@
|
||||
import os
|
||||
import logging
|
||||
|
||||
from mediagoblin.routing import url_map, view_functions, add_route
|
||||
from mediagoblin.routing import get_url_map, endpoint_to_controller
|
||||
|
||||
from werkzeug.wrappers import Request
|
||||
from werkzeug.exceptions import HTTPException, NotFound
|
||||
@ -93,10 +93,7 @@ class MediaGoblinApp(object):
|
||||
self.public_store, self.queue_store = setup_storage()
|
||||
|
||||
# set up routing
|
||||
self.url_map = url_map
|
||||
|
||||
for route in PluginManager().get_routes():
|
||||
add_route(*route)
|
||||
self.url_map = get_url_map()
|
||||
|
||||
# set up staticdirector tool
|
||||
self.staticdirector = get_staticdirector(app_config)
|
||||
@ -194,18 +191,7 @@ class MediaGoblinApp(object):
|
||||
request, exc,
|
||||
exc.get_description(environ))(environ, start_response)
|
||||
|
||||
view_func = view_functions[endpoint]
|
||||
|
||||
_log.debug('endpoint: {0} view_func: {1}'.format(
|
||||
endpoint,
|
||||
view_func))
|
||||
|
||||
# import the endpoint, or if it's already a callable, call that
|
||||
if isinstance(view_func, unicode) \
|
||||
or isinstance(view_func, str):
|
||||
controller = common.import_component(view_func)
|
||||
else:
|
||||
controller = view_func
|
||||
controller = endpoint_to_controller(endpoint)
|
||||
|
||||
# pass the request through our meddleware classes
|
||||
try:
|
||||
|
@ -14,12 +14,33 @@
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import logging
|
||||
|
||||
from werkzeug.routing import Map, Rule
|
||||
from mediagoblin.tools.common import import_component
|
||||
from mediagoblin.tools.pluginapi import PluginManager
|
||||
|
||||
|
||||
_log = logging.getLogger(__name__)
|
||||
|
||||
url_map = Map()
|
||||
|
||||
view_functions = {}
|
||||
|
||||
|
||||
def endpoint_to_controller(endpoint):
|
||||
view_func = view_functions[endpoint]
|
||||
|
||||
_log.debug('endpoint: {0} view_func: {1}'.format(endpoint, view_func))
|
||||
|
||||
# import the endpoint, or if it's already a callable, call that
|
||||
if isinstance(view_func, basestring):
|
||||
view_func = import_component(view_func)
|
||||
view_functions[endpoint] = view_func
|
||||
|
||||
return view_func
|
||||
|
||||
|
||||
def add_route(endpoint, url, controller):
|
||||
"""
|
||||
Add a route to the url mapping
|
||||
@ -33,6 +54,7 @@ def add_route(endpoint, url, controller):
|
||||
|
||||
url_map.add(Rule(url, endpoint=endpoint))
|
||||
|
||||
|
||||
def mount(mountpoint, routes):
|
||||
"""
|
||||
Mount a bunch of routes to this mountpoint
|
||||
@ -41,6 +63,14 @@ def mount(mountpoint, routes):
|
||||
url = "%s/%s" % (mountpoint.rstrip('/'), url.lstrip('/'))
|
||||
add_route(endpoint, url, controller)
|
||||
|
||||
|
||||
def get_url_map():
|
||||
for route in PluginManager().get_routes():
|
||||
add_route(*route)
|
||||
|
||||
return url_map
|
||||
|
||||
|
||||
add_route('index', '/', 'mediagoblin.views:root_view')
|
||||
|
||||
from mediagoblin.admin.routing import admin_routes
|
||||
|
Loading…
x
Reference in New Issue
Block a user