1 # GNU MediaGoblin -- federated, autonomous media hosting
2 # Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS.
4 # This program is free software: you can redistribute it and/or modify
5 # it under the terms of the GNU Affero General Public License as published by
6 # the Free Software Foundation, either version 3 of the License, or
7 # (at your option) any later version.
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU Affero General Public License for more details.
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
19 from werkzeug
.routing
import Map
, Rule
20 from mediagoblin
.tools
.common
import import_component
23 _log
= logging
.getLogger(__name__
)
29 def __init__(self
, endpoint
, url
, controller
):
30 Rule
.__init
__(self
, url
, endpoint
=endpoint
)
31 self
.gmg_controller
= controller
34 new_rule
= Rule
.empty(self
)
35 new_rule
.gmg_controller
= self
.gmg_controller
39 def endpoint_to_controller(rule
):
40 endpoint
= rule
.endpoint
41 view_func
= rule
.gmg_controller
43 _log
.debug('endpoint: {0} view_func: {1}'.format(endpoint
, view_func
))
45 # import the endpoint, or if it's already a callable, call that
46 if isinstance(view_func
, basestring
):
47 view_func
= import_component(view_func
)
48 rule
.gmg_controller
= view_func
53 def add_route(endpoint
, url
, controller
):
55 Add a route to the url mapping
57 url_map
.add(MGRoute(endpoint
, url
, controller
))
60 def mount(mountpoint
, routes
):
62 Mount a bunch of routes to this mountpoint
64 for endpoint
, url
, controller
in routes
:
65 url
= "%s/%s" % (mountpoint
.rstrip('/'), url
.lstrip('/'))
66 add_route(endpoint
, url
, controller
)