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 os
|
||||||
import logging
|
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.wrappers import Request
|
||||||
from werkzeug.exceptions import HTTPException, NotFound
|
from werkzeug.exceptions import HTTPException, NotFound
|
||||||
@ -93,10 +93,7 @@ class MediaGoblinApp(object):
|
|||||||
self.public_store, self.queue_store = setup_storage()
|
self.public_store, self.queue_store = setup_storage()
|
||||||
|
|
||||||
# set up routing
|
# set up routing
|
||||||
self.url_map = url_map
|
self.url_map = get_url_map()
|
||||||
|
|
||||||
for route in PluginManager().get_routes():
|
|
||||||
add_route(*route)
|
|
||||||
|
|
||||||
# set up staticdirector tool
|
# set up staticdirector tool
|
||||||
self.staticdirector = get_staticdirector(app_config)
|
self.staticdirector = get_staticdirector(app_config)
|
||||||
@ -194,18 +191,7 @@ class MediaGoblinApp(object):
|
|||||||
request, exc,
|
request, exc,
|
||||||
exc.get_description(environ))(environ, start_response)
|
exc.get_description(environ))(environ, start_response)
|
||||||
|
|
||||||
view_func = view_functions[endpoint]
|
controller = endpoint_to_controller(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
|
|
||||||
|
|
||||||
# pass the request through our meddleware classes
|
# pass the request through our meddleware classes
|
||||||
try:
|
try:
|
||||||
|
@ -14,12 +14,33 @@
|
|||||||
# You should have received a copy of the GNU Affero General Public License
|
# 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/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
from werkzeug.routing import Map, Rule
|
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()
|
url_map = Map()
|
||||||
|
|
||||||
view_functions = {}
|
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):
|
def add_route(endpoint, url, controller):
|
||||||
"""
|
"""
|
||||||
Add a route to the url mapping
|
Add a route to the url mapping
|
||||||
@ -33,6 +54,7 @@ def add_route(endpoint, url, controller):
|
|||||||
|
|
||||||
url_map.add(Rule(url, endpoint=endpoint))
|
url_map.add(Rule(url, endpoint=endpoint))
|
||||||
|
|
||||||
|
|
||||||
def mount(mountpoint, routes):
|
def mount(mountpoint, routes):
|
||||||
"""
|
"""
|
||||||
Mount a bunch of routes to this mountpoint
|
Mount a bunch of routes to this mountpoint
|
||||||
@ -41,6 +63,14 @@ def mount(mountpoint, routes):
|
|||||||
url = "%s/%s" % (mountpoint.rstrip('/'), url.lstrip('/'))
|
url = "%s/%s" % (mountpoint.rstrip('/'), url.lstrip('/'))
|
||||||
add_route(endpoint, url, controller)
|
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')
|
add_route('index', '/', 'mediagoblin.views:root_view')
|
||||||
|
|
||||||
from mediagoblin.admin.routing import admin_routes
|
from mediagoblin.admin.routing import admin_routes
|
||||||
|
Loading…
x
Reference in New Issue
Block a user