##// END OF EJS Templates
cleanup: remove couple overlooked lines
dan -
r98:350fd2ba default
parent child Browse files
Show More
@@ -1,1151 +1,1149 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2010-2016 RhodeCode GmbH
3 # Copyright (C) 2010-2016 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
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/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21 """
21 """
22 Routes configuration
22 Routes configuration
23
23
24 The more specific and detailed routes should be defined first so they
24 The more specific and detailed routes should be defined first so they
25 may take precedent over the more generic routes. For more information
25 may take precedent over the more generic routes. For more information
26 refer to the routes manual at http://routes.groovie.org/docs/
26 refer to the routes manual at http://routes.groovie.org/docs/
27
27
28 IMPORTANT: if you change any routing here, make sure to take a look at lib/base.py
28 IMPORTANT: if you change any routing here, make sure to take a look at lib/base.py
29 and _route_name variable which uses some of stored naming here to do redirects.
29 and _route_name variable which uses some of stored naming here to do redirects.
30 """
30 """
31 import os
31 import os
32 import re
32 import re
33 from routes import Mapper
33 from routes import Mapper
34
34
35 from rhodecode.config import routing_links
35 from rhodecode.config import routing_links
36
36
37 # prefix for non repository related links needs to be prefixed with `/`
37 # prefix for non repository related links needs to be prefixed with `/`
38 ADMIN_PREFIX = '/_admin'
38 ADMIN_PREFIX = '/_admin'
39
39
40 # Default requirements for URL parts
40 # Default requirements for URL parts
41 URL_NAME_REQUIREMENTS = {
41 URL_NAME_REQUIREMENTS = {
42 # group name can have a slash in them, but they must not end with a slash
42 # group name can have a slash in them, but they must not end with a slash
43 'group_name': r'.*?[^/]',
43 'group_name': r'.*?[^/]',
44 # repo names can have a slash in them, but they must not end with a slash
44 # repo names can have a slash in them, but they must not end with a slash
45 'repo_name': r'.*?[^/]',
45 'repo_name': r'.*?[^/]',
46 # file path eats up everything at the end
46 # file path eats up everything at the end
47 'f_path': r'.*',
47 'f_path': r'.*',
48 # reference types
48 # reference types
49 'source_ref_type': '(branch|book|tag|rev|\%\(source_ref_type\)s)',
49 'source_ref_type': '(branch|book|tag|rev|\%\(source_ref_type\)s)',
50 'target_ref_type': '(branch|book|tag|rev|\%\(target_ref_type\)s)',
50 'target_ref_type': '(branch|book|tag|rev|\%\(target_ref_type\)s)',
51 }
51 }
52
52
53
53
54 class JSRoutesMapper(Mapper):
54 class JSRoutesMapper(Mapper):
55 """
55 """
56 Wrapper for routes.Mapper to make pyroutes compatible url definitions
56 Wrapper for routes.Mapper to make pyroutes compatible url definitions
57 """
57 """
58 _named_route_regex = re.compile(r'^[a-z-_0-9A-Z]+$')
58 _named_route_regex = re.compile(r'^[a-z-_0-9A-Z]+$')
59 _argument_prog = re.compile('\{(.*?)\}|:\((.*)\)')
59 _argument_prog = re.compile('\{(.*?)\}|:\((.*)\)')
60 def __init__(self, *args, **kw):
60 def __init__(self, *args, **kw):
61 super(JSRoutesMapper, self).__init__(*args, **kw)
61 super(JSRoutesMapper, self).__init__(*args, **kw)
62 self._jsroutes = []
62 self._jsroutes = []
63
63
64 def connect(self, *args, **kw):
64 def connect(self, *args, **kw):
65 """
65 """
66 Wrapper for connect to take an extra argument jsroute=True
66 Wrapper for connect to take an extra argument jsroute=True
67
67
68 :param jsroute: boolean, if True will add the route to the pyroutes list
68 :param jsroute: boolean, if True will add the route to the pyroutes list
69 """
69 """
70 if kw.pop('jsroute', False):
70 if kw.pop('jsroute', False):
71 if not self._named_route_regex.match(args[0]):
71 if not self._named_route_regex.match(args[0]):
72 # import pdb;pdb.set_trace()
73 raise Exception('only named routes can be added to pyroutes')
72 raise Exception('only named routes can be added to pyroutes')
74 self._jsroutes.append(args[0])
73 self._jsroutes.append(args[0])
75
74
76 super(JSRoutesMapper, self).connect(*args, **kw)
75 super(JSRoutesMapper, self).connect(*args, **kw)
77
76
78 def _extract_route_information(self, route):
77 def _extract_route_information(self, route):
79 """
78 """
80 Convert a route into tuple(name, path, args), eg:
79 Convert a route into tuple(name, path, args), eg:
81 ('user_profile', '/profile/%(username)s', ['username'])
80 ('user_profile', '/profile/%(username)s', ['username'])
82 """
81 """
83 routepath = route.routepath
82 routepath = route.routepath
84 def replace(matchobj):
83 def replace(matchobj):
85 if matchobj.group(1):
84 if matchobj.group(1):
86 return "%%(%s)s" % matchobj.group(1).split(':')[0]
85 return "%%(%s)s" % matchobj.group(1).split(':')[0]
87 else:
86 else:
88 return "%%(%s)s" % matchobj.group(2)
87 return "%%(%s)s" % matchobj.group(2)
89
88
90 routepath = self._argument_prog.sub(replace, routepath)
89 routepath = self._argument_prog.sub(replace, routepath)
91 return (
90 return (
92 route.name,
91 route.name,
93 routepath,
92 routepath,
94 [(arg[0].split(':')[0] if arg[0] != '' else arg[1])
93 [(arg[0].split(':')[0] if arg[0] != '' else arg[1])
95 for arg in self._argument_prog.findall(route.routepath)]
94 for arg in self._argument_prog.findall(route.routepath)]
96 )
95 )
97
96
98 def jsroutes(self):
97 def jsroutes(self):
99 """
98 """
100 Return a list of pyroutes.js compatible routes
99 Return a list of pyroutes.js compatible routes
101 """
100 """
102 for route_name in self._jsroutes:
101 for route_name in self._jsroutes:
103 yield self._extract_route_information(self._routenames[route_name])
102 yield self._extract_route_information(self._routenames[route_name])
104
103
105
104
106 def make_map(config):
105 def make_map(config):
107 """Create, configure and return the routes Mapper"""
106 """Create, configure and return the routes Mapper"""
108 rmap = JSRoutesMapper(directory=config['pylons.paths']['controllers'],
107 rmap = JSRoutesMapper(directory=config['pylons.paths']['controllers'],
109 always_scan=config['debug'])
108 always_scan=config['debug'])
110 rmap.minimization = False
109 rmap.minimization = False
111 rmap.explicit = False
110 rmap.explicit = False
112
111
113 from rhodecode.lib.utils2 import str2bool
112 from rhodecode.lib.utils2 import str2bool
114 from rhodecode.model import repo, repo_group
113 from rhodecode.model import repo, repo_group
115
114
116 def check_repo(environ, match_dict):
115 def check_repo(environ, match_dict):
117 """
116 """
118 check for valid repository for proper 404 handling
117 check for valid repository for proper 404 handling
119
118
120 :param environ:
119 :param environ:
121 :param match_dict:
120 :param match_dict:
122 """
121 """
123 repo_name = match_dict.get('repo_name')
122 repo_name = match_dict.get('repo_name')
124
123
125 if match_dict.get('f_path'):
124 if match_dict.get('f_path'):
126 # fix for multiple initial slashes that causes errors
125 # fix for multiple initial slashes that causes errors
127 match_dict['f_path'] = match_dict['f_path'].lstrip('/')
126 match_dict['f_path'] = match_dict['f_path'].lstrip('/')
128 repo_model = repo.RepoModel()
127 repo_model = repo.RepoModel()
129 by_name_match = repo_model.get_by_repo_name(repo_name)
128 by_name_match = repo_model.get_by_repo_name(repo_name)
130 # if we match quickly from database, short circuit the operation,
129 # if we match quickly from database, short circuit the operation,
131 # and validate repo based on the type.
130 # and validate repo based on the type.
132 if by_name_match:
131 if by_name_match:
133 return True
132 return True
134
133
135 by_id_match = repo_model.get_repo_by_id(repo_name)
134 by_id_match = repo_model.get_repo_by_id(repo_name)
136 if by_id_match:
135 if by_id_match:
137 repo_name = by_id_match.repo_name
136 repo_name = by_id_match.repo_name
138 match_dict['repo_name'] = repo_name
137 match_dict['repo_name'] = repo_name
139 return True
138 return True
140
139
141 return False
140 return False
142
141
143 def check_group(environ, match_dict):
142 def check_group(environ, match_dict):
144 """
143 """
145 check for valid repository group path for proper 404 handling
144 check for valid repository group path for proper 404 handling
146
145
147 :param environ:
146 :param environ:
148 :param match_dict:
147 :param match_dict:
149 """
148 """
150 repo_group_name = match_dict.get('group_name')
149 repo_group_name = match_dict.get('group_name')
151 repo_group_model = repo_group.RepoGroupModel()
150 repo_group_model = repo_group.RepoGroupModel()
152 by_name_match = repo_group_model.get_by_group_name(repo_group_name)
151 by_name_match = repo_group_model.get_by_group_name(repo_group_name)
153 if by_name_match:
152 if by_name_match:
154 return True
153 return True
155
154
156 return False
155 return False
157
156
158 def check_user_group(environ, match_dict):
157 def check_user_group(environ, match_dict):
159 """
158 """
160 check for valid user group for proper 404 handling
159 check for valid user group for proper 404 handling
161
160
162 :param environ:
161 :param environ:
163 :param match_dict:
162 :param match_dict:
164 """
163 """
165 return True
164 return True
166
165
167 def check_int(environ, match_dict):
166 def check_int(environ, match_dict):
168 return match_dict.get('id').isdigit()
167 return match_dict.get('id').isdigit()
169
168
170 # The ErrorController route (handles 404/500 error pages); it should
169 # The ErrorController route (handles 404/500 error pages); it should
171 # likely stay at the top, ensuring it can always be resolved
170 # likely stay at the top, ensuring it can always be resolved
172 rmap.connect('/error/{action}', controller='error')
171 rmap.connect('/error/{action}', controller='error')
173 rmap.connect('/error/{action}/{id}', controller='error')
172 rmap.connect('/error/{action}/{id}', controller='error')
174
173
175 #==========================================================================
174 #==========================================================================
176 # CUSTOM ROUTES HERE
175 # CUSTOM ROUTES HERE
177 #==========================================================================
176 #==========================================================================
178
177
179 # MAIN PAGE
178 # MAIN PAGE
180 rmap.connect('home', '/', controller='home', action='index', jsroute=True)
179 rmap.connect('home', '/', controller='home', action='index', jsroute=True)
181 rmap.connect('goto_switcher_data', '/_goto_data', controller='home',
180 rmap.connect('goto_switcher_data', '/_goto_data', controller='home',
182 action='goto_switcher_data')
181 action='goto_switcher_data')
183 rmap.connect('repo_list_data', '/_repos', controller='home',
182 rmap.connect('repo_list_data', '/_repos', controller='home',
184 action='repo_list_data')
183 action='repo_list_data')
185
184
186 rmap.connect('user_autocomplete_data', '/_users', controller='home',
185 rmap.connect('user_autocomplete_data', '/_users', controller='home',
187 action='user_autocomplete_data', jsroute=True)
186 action='user_autocomplete_data', jsroute=True)
188 rmap.connect('user_group_autocomplete_data', '/_user_groups', controller='home',
187 rmap.connect('user_group_autocomplete_data', '/_user_groups', controller='home',
189 action='user_group_autocomplete_data')
188 action='user_group_autocomplete_data')
190
189
191 rmap.connect(
190 rmap.connect(
192 'user_profile', '/_profiles/{username}', controller='users',
191 'user_profile', '/_profiles/{username}', controller='users',
193 action='user_profile')
192 action='user_profile')
194
193
195 # TODO: johbo: Static links, to be replaced by our redirection mechanism
194 # TODO: johbo: Static links, to be replaced by our redirection mechanism
196 rmap.connect('rst_help',
195 rmap.connect('rst_help',
197 'http://docutils.sourceforge.net/docs/user/rst/quickref.html',
196 'http://docutils.sourceforge.net/docs/user/rst/quickref.html',
198 _static=True)
197 _static=True)
199 rmap.connect('markdown_help',
198 rmap.connect('markdown_help',
200 'http://daringfireball.net/projects/markdown/syntax',
199 'http://daringfireball.net/projects/markdown/syntax',
201 _static=True)
200 _static=True)
202 rmap.connect('rhodecode_official', 'https://rhodecode.com', _static=True)
201 rmap.connect('rhodecode_official', 'https://rhodecode.com', _static=True)
203 rmap.connect('rhodecode_support', 'https://rhodecode.com/help/', _static=True)
202 rmap.connect('rhodecode_support', 'https://rhodecode.com/help/', _static=True)
204 rmap.connect('rhodecode_translations', 'https://rhodecode.com/translate/enterprise', _static=True)
203 rmap.connect('rhodecode_translations', 'https://rhodecode.com/translate/enterprise', _static=True)
205 # TODO: anderson - making this a static link since redirect won't play
204 # TODO: anderson - making this a static link since redirect won't play
206 # nice with POST requests
205 # nice with POST requests
207 rmap.connect('enterprise_license_convert_from_old',
206 rmap.connect('enterprise_license_convert_from_old',
208 'https://rhodecode.com/u/license-upgrade',
207 'https://rhodecode.com/u/license-upgrade',
209 _static=True)
208 _static=True)
210
209
211 routing_links.connect_redirection_links(rmap)
210 routing_links.connect_redirection_links(rmap)
212
211
213 rmap.connect('ping', '%s/ping' % (ADMIN_PREFIX,), controller='home', action='ping')
212 rmap.connect('ping', '%s/ping' % (ADMIN_PREFIX,), controller='home', action='ping')
214 rmap.connect('error_test', '%s/error_test' % (ADMIN_PREFIX,), controller='home', action='error_test')
213 rmap.connect('error_test', '%s/error_test' % (ADMIN_PREFIX,), controller='home', action='error_test')
215
214
216 # ADMIN REPOSITORY ROUTES
215 # ADMIN REPOSITORY ROUTES
217 with rmap.submapper(path_prefix=ADMIN_PREFIX,
216 with rmap.submapper(path_prefix=ADMIN_PREFIX,
218 controller='admin/repos') as m:
217 controller='admin/repos') as m:
219 m.connect('repos', '/repos',
218 m.connect('repos', '/repos',
220 action='create', conditions={'method': ['POST']})
219 action='create', conditions={'method': ['POST']})
221 m.connect('repos', '/repos',
220 m.connect('repos', '/repos',
222 action='index', conditions={'method': ['GET']})
221 action='index', conditions={'method': ['GET']})
223 m.connect('new_repo', '/create_repository', jsroute=True,
222 m.connect('new_repo', '/create_repository', jsroute=True,
224 action='create_repository', conditions={'method': ['GET']})
223 action='create_repository', conditions={'method': ['GET']})
225 m.connect('/repos/{repo_name}',
224 m.connect('/repos/{repo_name}',
226 action='update', conditions={'method': ['PUT'],
225 action='update', conditions={'method': ['PUT'],
227 'function': check_repo},
226 'function': check_repo},
228 requirements=URL_NAME_REQUIREMENTS)
227 requirements=URL_NAME_REQUIREMENTS)
229 m.connect('delete_repo', '/repos/{repo_name}',
228 m.connect('delete_repo', '/repos/{repo_name}',
230 action='delete', conditions={'method': ['DELETE']},
229 action='delete', conditions={'method': ['DELETE']},
231 requirements=URL_NAME_REQUIREMENTS)
230 requirements=URL_NAME_REQUIREMENTS)
232 m.connect('repo', '/repos/{repo_name}',
231 m.connect('repo', '/repos/{repo_name}',
233 action='show', conditions={'method': ['GET'],
232 action='show', conditions={'method': ['GET'],
234 'function': check_repo},
233 'function': check_repo},
235 requirements=URL_NAME_REQUIREMENTS)
234 requirements=URL_NAME_REQUIREMENTS)
236
235
237 # ADMIN REPOSITORY GROUPS ROUTES
236 # ADMIN REPOSITORY GROUPS ROUTES
238 with rmap.submapper(path_prefix=ADMIN_PREFIX,
237 with rmap.submapper(path_prefix=ADMIN_PREFIX,
239 controller='admin/repo_groups') as m:
238 controller='admin/repo_groups') as m:
240 m.connect('repo_groups', '/repo_groups',
239 m.connect('repo_groups', '/repo_groups',
241 action='create', conditions={'method': ['POST']})
240 action='create', conditions={'method': ['POST']})
242 m.connect('repo_groups', '/repo_groups',
241 m.connect('repo_groups', '/repo_groups',
243 action='index', conditions={'method': ['GET']})
242 action='index', conditions={'method': ['GET']})
244 m.connect('new_repo_group', '/repo_groups/new',
243 m.connect('new_repo_group', '/repo_groups/new',
245 action='new', conditions={'method': ['GET']})
244 action='new', conditions={'method': ['GET']})
246 m.connect('update_repo_group', '/repo_groups/{group_name}',
245 m.connect('update_repo_group', '/repo_groups/{group_name}',
247 action='update', conditions={'method': ['PUT'],
246 action='update', conditions={'method': ['PUT'],
248 'function': check_group},
247 'function': check_group},
249 requirements=URL_NAME_REQUIREMENTS)
248 requirements=URL_NAME_REQUIREMENTS)
250
249
251 # EXTRAS REPO GROUP ROUTES
250 # EXTRAS REPO GROUP ROUTES
252 m.connect('edit_repo_group', '/repo_groups/{group_name}/edit',
251 m.connect('edit_repo_group', '/repo_groups/{group_name}/edit',
253 action='edit',
252 action='edit',
254 conditions={'method': ['GET'], 'function': check_group},
253 conditions={'method': ['GET'], 'function': check_group},
255 requirements=URL_NAME_REQUIREMENTS)
254 requirements=URL_NAME_REQUIREMENTS)
256 m.connect('edit_repo_group', '/repo_groups/{group_name}/edit',
255 m.connect('edit_repo_group', '/repo_groups/{group_name}/edit',
257 action='edit',
256 action='edit',
258 conditions={'method': ['PUT'], 'function': check_group},
257 conditions={'method': ['PUT'], 'function': check_group},
259 requirements=URL_NAME_REQUIREMENTS)
258 requirements=URL_NAME_REQUIREMENTS)
260
259
261 m.connect('edit_repo_group_advanced', '/repo_groups/{group_name}/edit/advanced',
260 m.connect('edit_repo_group_advanced', '/repo_groups/{group_name}/edit/advanced',
262 action='edit_repo_group_advanced',
261 action='edit_repo_group_advanced',
263 conditions={'method': ['GET'], 'function': check_group},
262 conditions={'method': ['GET'], 'function': check_group},
264 requirements=URL_NAME_REQUIREMENTS)
263 requirements=URL_NAME_REQUIREMENTS)
265 m.connect('edit_repo_group_advanced', '/repo_groups/{group_name}/edit/advanced',
264 m.connect('edit_repo_group_advanced', '/repo_groups/{group_name}/edit/advanced',
266 action='edit_repo_group_advanced',
265 action='edit_repo_group_advanced',
267 conditions={'method': ['PUT'], 'function': check_group},
266 conditions={'method': ['PUT'], 'function': check_group},
268 requirements=URL_NAME_REQUIREMENTS)
267 requirements=URL_NAME_REQUIREMENTS)
269
268
270 m.connect('edit_repo_group_perms', '/repo_groups/{group_name}/edit/permissions',
269 m.connect('edit_repo_group_perms', '/repo_groups/{group_name}/edit/permissions',
271 action='edit_repo_group_perms',
270 action='edit_repo_group_perms',
272 conditions={'method': ['GET'], 'function': check_group},
271 conditions={'method': ['GET'], 'function': check_group},
273 requirements=URL_NAME_REQUIREMENTS)
272 requirements=URL_NAME_REQUIREMENTS)
274 m.connect('edit_repo_group_perms', '/repo_groups/{group_name}/edit/permissions',
273 m.connect('edit_repo_group_perms', '/repo_groups/{group_name}/edit/permissions',
275 action='update_perms',
274 action='update_perms',
276 conditions={'method': ['PUT'], 'function': check_group},
275 conditions={'method': ['PUT'], 'function': check_group},
277 requirements=URL_NAME_REQUIREMENTS)
276 requirements=URL_NAME_REQUIREMENTS)
278
277
279 m.connect('delete_repo_group', '/repo_groups/{group_name}',
278 m.connect('delete_repo_group', '/repo_groups/{group_name}',
280 action='delete', conditions={'method': ['DELETE'],
279 action='delete', conditions={'method': ['DELETE'],
281 'function': check_group},
280 'function': check_group},
282 requirements=URL_NAME_REQUIREMENTS)
281 requirements=URL_NAME_REQUIREMENTS)
283
282
284 # ADMIN USER ROUTES
283 # ADMIN USER ROUTES
285 with rmap.submapper(path_prefix=ADMIN_PREFIX,
284 with rmap.submapper(path_prefix=ADMIN_PREFIX,
286 controller='admin/users') as m:
285 controller='admin/users') as m:
287 m.connect('users', '/users',
286 m.connect('users', '/users',
288 action='create', conditions={'method': ['POST']})
287 action='create', conditions={'method': ['POST']})
289 m.connect('users', '/users',
288 m.connect('users', '/users',
290 action='index', conditions={'method': ['GET']})
289 action='index', conditions={'method': ['GET']})
291 m.connect('new_user', '/users/new',
290 m.connect('new_user', '/users/new',
292 action='new', conditions={'method': ['GET']})
291 action='new', conditions={'method': ['GET']})
293 m.connect('update_user', '/users/{user_id}',
292 m.connect('update_user', '/users/{user_id}',
294 action='update', conditions={'method': ['PUT']})
293 action='update', conditions={'method': ['PUT']})
295 m.connect('delete_user', '/users/{user_id}',
294 m.connect('delete_user', '/users/{user_id}',
296 action='delete', conditions={'method': ['DELETE']})
295 action='delete', conditions={'method': ['DELETE']})
297 m.connect('edit_user', '/users/{user_id}/edit',
296 m.connect('edit_user', '/users/{user_id}/edit',
298 action='edit', conditions={'method': ['GET']})
297 action='edit', conditions={'method': ['GET']})
299 m.connect('user', '/users/{user_id}',
298 m.connect('user', '/users/{user_id}',
300 action='show', conditions={'method': ['GET']})
299 action='show', conditions={'method': ['GET']})
301 m.connect('force_password_reset_user', '/users/{user_id}/password_reset',
300 m.connect('force_password_reset_user', '/users/{user_id}/password_reset',
302 action='reset_password', conditions={'method': ['POST']})
301 action='reset_password', conditions={'method': ['POST']})
303 m.connect('create_personal_repo_group', '/users/{user_id}/create_repo_group',
302 m.connect('create_personal_repo_group', '/users/{user_id}/create_repo_group',
304 action='create_personal_repo_group', conditions={'method': ['POST']})
303 action='create_personal_repo_group', conditions={'method': ['POST']})
305
304
306 # EXTRAS USER ROUTES
305 # EXTRAS USER ROUTES
307 m.connect('edit_user_advanced', '/users/{user_id}/edit/advanced',
306 m.connect('edit_user_advanced', '/users/{user_id}/edit/advanced',
308 action='edit_advanced', conditions={'method': ['GET']})
307 action='edit_advanced', conditions={'method': ['GET']})
309 m.connect('edit_user_advanced', '/users/{user_id}/edit/advanced',
308 m.connect('edit_user_advanced', '/users/{user_id}/edit/advanced',
310 action='update_advanced', conditions={'method': ['PUT']})
309 action='update_advanced', conditions={'method': ['PUT']})
311
310
312 m.connect('edit_user_auth_tokens', '/users/{user_id}/edit/auth_tokens',
311 m.connect('edit_user_auth_tokens', '/users/{user_id}/edit/auth_tokens',
313 action='edit_auth_tokens', conditions={'method': ['GET']})
312 action='edit_auth_tokens', conditions={'method': ['GET']})
314 m.connect('edit_user_auth_tokens', '/users/{user_id}/edit/auth_tokens',
313 m.connect('edit_user_auth_tokens', '/users/{user_id}/edit/auth_tokens',
315 action='add_auth_token', conditions={'method': ['PUT']})
314 action='add_auth_token', conditions={'method': ['PUT']})
316 m.connect('edit_user_auth_tokens', '/users/{user_id}/edit/auth_tokens',
315 m.connect('edit_user_auth_tokens', '/users/{user_id}/edit/auth_tokens',
317 action='delete_auth_token', conditions={'method': ['DELETE']})
316 action='delete_auth_token', conditions={'method': ['DELETE']})
318
317
319 m.connect('edit_user_global_perms', '/users/{user_id}/edit/global_permissions',
318 m.connect('edit_user_global_perms', '/users/{user_id}/edit/global_permissions',
320 action='edit_global_perms', conditions={'method': ['GET']})
319 action='edit_global_perms', conditions={'method': ['GET']})
321 m.connect('edit_user_global_perms', '/users/{user_id}/edit/global_permissions',
320 m.connect('edit_user_global_perms', '/users/{user_id}/edit/global_permissions',
322 action='update_global_perms', conditions={'method': ['PUT']})
321 action='update_global_perms', conditions={'method': ['PUT']})
323
322
324 m.connect('edit_user_perms_summary', '/users/{user_id}/edit/permissions_summary',
323 m.connect('edit_user_perms_summary', '/users/{user_id}/edit/permissions_summary',
325 action='edit_perms_summary', conditions={'method': ['GET']})
324 action='edit_perms_summary', conditions={'method': ['GET']})
326
325
327 m.connect('edit_user_emails', '/users/{user_id}/edit/emails',
326 m.connect('edit_user_emails', '/users/{user_id}/edit/emails',
328 action='edit_emails', conditions={'method': ['GET']})
327 action='edit_emails', conditions={'method': ['GET']})
329 m.connect('edit_user_emails', '/users/{user_id}/edit/emails',
328 m.connect('edit_user_emails', '/users/{user_id}/edit/emails',
330 action='add_email', conditions={'method': ['PUT']})
329 action='add_email', conditions={'method': ['PUT']})
331 m.connect('edit_user_emails', '/users/{user_id}/edit/emails',
330 m.connect('edit_user_emails', '/users/{user_id}/edit/emails',
332 action='delete_email', conditions={'method': ['DELETE']})
331 action='delete_email', conditions={'method': ['DELETE']})
333
332
334 m.connect('edit_user_ips', '/users/{user_id}/edit/ips',
333 m.connect('edit_user_ips', '/users/{user_id}/edit/ips',
335 action='edit_ips', conditions={'method': ['GET']})
334 action='edit_ips', conditions={'method': ['GET']})
336 m.connect('edit_user_ips', '/users/{user_id}/edit/ips',
335 m.connect('edit_user_ips', '/users/{user_id}/edit/ips',
337 action='add_ip', conditions={'method': ['PUT']})
336 action='add_ip', conditions={'method': ['PUT']})
338 m.connect('edit_user_ips', '/users/{user_id}/edit/ips',
337 m.connect('edit_user_ips', '/users/{user_id}/edit/ips',
339 action='delete_ip', conditions={'method': ['DELETE']})
338 action='delete_ip', conditions={'method': ['DELETE']})
340
339
341 # ADMIN USER GROUPS REST ROUTES
340 # ADMIN USER GROUPS REST ROUTES
342 with rmap.submapper(path_prefix=ADMIN_PREFIX,
341 with rmap.submapper(path_prefix=ADMIN_PREFIX,
343 controller='admin/user_groups') as m:
342 controller='admin/user_groups') as m:
344 m.connect('users_groups', '/user_groups',
343 m.connect('users_groups', '/user_groups',
345 action='create', conditions={'method': ['POST']})
344 action='create', conditions={'method': ['POST']})
346 m.connect('users_groups', '/user_groups',
345 m.connect('users_groups', '/user_groups',
347 action='index', conditions={'method': ['GET']})
346 action='index', conditions={'method': ['GET']})
348 m.connect('new_users_group', '/user_groups/new',
347 m.connect('new_users_group', '/user_groups/new',
349 action='new', conditions={'method': ['GET']})
348 action='new', conditions={'method': ['GET']})
350 m.connect('update_users_group', '/user_groups/{user_group_id}',
349 m.connect('update_users_group', '/user_groups/{user_group_id}',
351 action='update', conditions={'method': ['PUT']})
350 action='update', conditions={'method': ['PUT']})
352 m.connect('delete_users_group', '/user_groups/{user_group_id}',
351 m.connect('delete_users_group', '/user_groups/{user_group_id}',
353 action='delete', conditions={'method': ['DELETE']})
352 action='delete', conditions={'method': ['DELETE']})
354 m.connect('edit_users_group', '/user_groups/{user_group_id}/edit',
353 m.connect('edit_users_group', '/user_groups/{user_group_id}/edit',
355 action='edit', conditions={'method': ['GET']},
354 action='edit', conditions={'method': ['GET']},
356 function=check_user_group)
355 function=check_user_group)
357
356
358 # EXTRAS USER GROUP ROUTES
357 # EXTRAS USER GROUP ROUTES
359 m.connect('edit_user_group_global_perms',
358 m.connect('edit_user_group_global_perms',
360 '/user_groups/{user_group_id}/edit/global_permissions',
359 '/user_groups/{user_group_id}/edit/global_permissions',
361 action='edit_global_perms', conditions={'method': ['GET']})
360 action='edit_global_perms', conditions={'method': ['GET']})
362 m.connect('edit_user_group_global_perms',
361 m.connect('edit_user_group_global_perms',
363 '/user_groups/{user_group_id}/edit/global_permissions',
362 '/user_groups/{user_group_id}/edit/global_permissions',
364 action='update_global_perms', conditions={'method': ['PUT']})
363 action='update_global_perms', conditions={'method': ['PUT']})
365 m.connect('edit_user_group_perms_summary',
364 m.connect('edit_user_group_perms_summary',
366 '/user_groups/{user_group_id}/edit/permissions_summary',
365 '/user_groups/{user_group_id}/edit/permissions_summary',
367 action='edit_perms_summary', conditions={'method': ['GET']})
366 action='edit_perms_summary', conditions={'method': ['GET']})
368
367
369 m.connect('edit_user_group_perms',
368 m.connect('edit_user_group_perms',
370 '/user_groups/{user_group_id}/edit/permissions',
369 '/user_groups/{user_group_id}/edit/permissions',
371 action='edit_perms', conditions={'method': ['GET']})
370 action='edit_perms', conditions={'method': ['GET']})
372 m.connect('edit_user_group_perms',
371 m.connect('edit_user_group_perms',
373 '/user_groups/{user_group_id}/edit/permissions',
372 '/user_groups/{user_group_id}/edit/permissions',
374 action='update_perms', conditions={'method': ['PUT']})
373 action='update_perms', conditions={'method': ['PUT']})
375
374
376 m.connect('edit_user_group_advanced',
375 m.connect('edit_user_group_advanced',
377 '/user_groups/{user_group_id}/edit/advanced',
376 '/user_groups/{user_group_id}/edit/advanced',
378 action='edit_advanced', conditions={'method': ['GET']})
377 action='edit_advanced', conditions={'method': ['GET']})
379
378
380 m.connect('edit_user_group_members',
379 m.connect('edit_user_group_members',
381 '/user_groups/{user_group_id}/edit/members', jsroute=True,
380 '/user_groups/{user_group_id}/edit/members', jsroute=True,
382 action='edit_members', conditions={'method': ['GET']})
381 action='edit_members', conditions={'method': ['GET']})
383
382
384 # ADMIN PERMISSIONS ROUTES
383 # ADMIN PERMISSIONS ROUTES
385 with rmap.submapper(path_prefix=ADMIN_PREFIX,
384 with rmap.submapper(path_prefix=ADMIN_PREFIX,
386 controller='admin/permissions') as m:
385 controller='admin/permissions') as m:
387 m.connect('admin_permissions_application', '/permissions/application',
386 m.connect('admin_permissions_application', '/permissions/application',
388 action='permission_application_update', conditions={'method': ['POST']})
387 action='permission_application_update', conditions={'method': ['POST']})
389 m.connect('admin_permissions_application', '/permissions/application',
388 m.connect('admin_permissions_application', '/permissions/application',
390 action='permission_application', conditions={'method': ['GET']})
389 action='permission_application', conditions={'method': ['GET']})
391
390
392 m.connect('admin_permissions_global', '/permissions/global',
391 m.connect('admin_permissions_global', '/permissions/global',
393 action='permission_global_update', conditions={'method': ['POST']})
392 action='permission_global_update', conditions={'method': ['POST']})
394 m.connect('admin_permissions_global', '/permissions/global',
393 m.connect('admin_permissions_global', '/permissions/global',
395 action='permission_global', conditions={'method': ['GET']})
394 action='permission_global', conditions={'method': ['GET']})
396
395
397 m.connect('admin_permissions_object', '/permissions/object',
396 m.connect('admin_permissions_object', '/permissions/object',
398 action='permission_objects_update', conditions={'method': ['POST']})
397 action='permission_objects_update', conditions={'method': ['POST']})
399 m.connect('admin_permissions_object', '/permissions/object',
398 m.connect('admin_permissions_object', '/permissions/object',
400 action='permission_objects', conditions={'method': ['GET']})
399 action='permission_objects', conditions={'method': ['GET']})
401
400
402 m.connect('admin_permissions_ips', '/permissions/ips',
401 m.connect('admin_permissions_ips', '/permissions/ips',
403 action='permission_ips', conditions={'method': ['POST']})
402 action='permission_ips', conditions={'method': ['POST']})
404 m.connect('admin_permissions_ips', '/permissions/ips',
403 m.connect('admin_permissions_ips', '/permissions/ips',
405 action='permission_ips', conditions={'method': ['GET']})
404 action='permission_ips', conditions={'method': ['GET']})
406
405
407 m.connect('admin_permissions_overview', '/permissions/overview',
406 m.connect('admin_permissions_overview', '/permissions/overview',
408 action='permission_perms', conditions={'method': ['GET']})
407 action='permission_perms', conditions={'method': ['GET']})
409
408
410 # ADMIN DEFAULTS REST ROUTES
409 # ADMIN DEFAULTS REST ROUTES
411 with rmap.submapper(path_prefix=ADMIN_PREFIX,
410 with rmap.submapper(path_prefix=ADMIN_PREFIX,
412 controller='admin/defaults') as m:
411 controller='admin/defaults') as m:
413 m.connect('admin_defaults_repositories', '/defaults/repositories',
412 m.connect('admin_defaults_repositories', '/defaults/repositories',
414 action='update_repository_defaults', conditions={'method': ['POST']})
413 action='update_repository_defaults', conditions={'method': ['POST']})
415 m.connect('admin_defaults_repositories', '/defaults/repositories',
414 m.connect('admin_defaults_repositories', '/defaults/repositories',
416 action='index', conditions={'method': ['GET']})
415 action='index', conditions={'method': ['GET']})
417
416
418 # ADMIN DEBUG STYLE ROUTES
417 # ADMIN DEBUG STYLE ROUTES
419 if str2bool(config.get('debug_style')):
418 if str2bool(config.get('debug_style')):
420 with rmap.submapper(path_prefix=ADMIN_PREFIX + '/debug_style',
419 with rmap.submapper(path_prefix=ADMIN_PREFIX + '/debug_style',
421 controller='debug_style') as m:
420 controller='debug_style') as m:
422 m.connect('debug_style_home', '',
421 m.connect('debug_style_home', '',
423 action='index', conditions={'method': ['GET']})
422 action='index', conditions={'method': ['GET']})
424 m.connect('debug_style_template', '/t/{t_path}',
423 m.connect('debug_style_template', '/t/{t_path}',
425 action='template', conditions={'method': ['GET']})
424 action='template', conditions={'method': ['GET']})
426
425
427 # ADMIN SETTINGS ROUTES
426 # ADMIN SETTINGS ROUTES
428 with rmap.submapper(path_prefix=ADMIN_PREFIX,
427 with rmap.submapper(path_prefix=ADMIN_PREFIX,
429 controller='admin/settings') as m:
428 controller='admin/settings') as m:
430
429
431 # default
430 # default
432 m.connect('admin_settings', '/settings',
431 m.connect('admin_settings', '/settings',
433 action='settings_global_update',
432 action='settings_global_update',
434 conditions={'method': ['POST']})
433 conditions={'method': ['POST']})
435 m.connect('admin_settings', '/settings',
434 m.connect('admin_settings', '/settings',
436 action='settings_global', conditions={'method': ['GET']})
435 action='settings_global', conditions={'method': ['GET']})
437
436
438 m.connect('admin_settings_vcs', '/settings/vcs',
437 m.connect('admin_settings_vcs', '/settings/vcs',
439 action='settings_vcs_update',
438 action='settings_vcs_update',
440 conditions={'method': ['POST']})
439 conditions={'method': ['POST']})
441 m.connect('admin_settings_vcs', '/settings/vcs',
440 m.connect('admin_settings_vcs', '/settings/vcs',
442 action='settings_vcs',
441 action='settings_vcs',
443 conditions={'method': ['GET']})
442 conditions={'method': ['GET']})
444 m.connect('admin_settings_vcs', '/settings/vcs',
443 m.connect('admin_settings_vcs', '/settings/vcs',
445 action='delete_svn_pattern',
444 action='delete_svn_pattern',
446 conditions={'method': ['DELETE']})
445 conditions={'method': ['DELETE']})
447
446
448 m.connect('admin_settings_mapping', '/settings/mapping',
447 m.connect('admin_settings_mapping', '/settings/mapping',
449 action='settings_mapping_update',
448 action='settings_mapping_update',
450 conditions={'method': ['POST']})
449 conditions={'method': ['POST']})
451 m.connect('admin_settings_mapping', '/settings/mapping',
450 m.connect('admin_settings_mapping', '/settings/mapping',
452 action='settings_mapping', conditions={'method': ['GET']})
451 action='settings_mapping', conditions={'method': ['GET']})
453
452
454 m.connect('admin_settings_global', '/settings/global',
453 m.connect('admin_settings_global', '/settings/global',
455 action='settings_global_update',
454 action='settings_global_update',
456 conditions={'method': ['POST']})
455 conditions={'method': ['POST']})
457 m.connect('admin_settings_global', '/settings/global',
456 m.connect('admin_settings_global', '/settings/global',
458 action='settings_global', conditions={'method': ['GET']})
457 action='settings_global', conditions={'method': ['GET']})
459
458
460 m.connect('admin_settings_visual', '/settings/visual',
459 m.connect('admin_settings_visual', '/settings/visual',
461 action='settings_visual_update',
460 action='settings_visual_update',
462 conditions={'method': ['POST']})
461 conditions={'method': ['POST']})
463 m.connect('admin_settings_visual', '/settings/visual',
462 m.connect('admin_settings_visual', '/settings/visual',
464 action='settings_visual', conditions={'method': ['GET']})
463 action='settings_visual', conditions={'method': ['GET']})
465
464
466 m.connect('admin_settings_issuetracker',
465 m.connect('admin_settings_issuetracker',
467 '/settings/issue-tracker', action='settings_issuetracker',
466 '/settings/issue-tracker', action='settings_issuetracker',
468 conditions={'method': ['GET']})
467 conditions={'method': ['GET']})
469 m.connect('admin_settings_issuetracker_save',
468 m.connect('admin_settings_issuetracker_save',
470 '/settings/issue-tracker/save',
469 '/settings/issue-tracker/save',
471 action='settings_issuetracker_save',
470 action='settings_issuetracker_save',
472 conditions={'method': ['POST']})
471 conditions={'method': ['POST']})
473 m.connect('admin_issuetracker_test', '/settings/issue-tracker/test',
472 m.connect('admin_issuetracker_test', '/settings/issue-tracker/test',
474 action='settings_issuetracker_test',
473 action='settings_issuetracker_test',
475 conditions={'method': ['POST']})
474 conditions={'method': ['POST']})
476 m.connect('admin_issuetracker_delete',
475 m.connect('admin_issuetracker_delete',
477 '/settings/issue-tracker/delete',
476 '/settings/issue-tracker/delete',
478 action='settings_issuetracker_delete',
477 action='settings_issuetracker_delete',
479 conditions={'method': ['DELETE']})
478 conditions={'method': ['DELETE']})
480
479
481 m.connect('admin_settings_email', '/settings/email',
480 m.connect('admin_settings_email', '/settings/email',
482 action='settings_email_update',
481 action='settings_email_update',
483 conditions={'method': ['POST']})
482 conditions={'method': ['POST']})
484 m.connect('admin_settings_email', '/settings/email',
483 m.connect('admin_settings_email', '/settings/email',
485 action='settings_email', conditions={'method': ['GET']})
484 action='settings_email', conditions={'method': ['GET']})
486
485
487 m.connect('admin_settings_hooks', '/settings/hooks',
486 m.connect('admin_settings_hooks', '/settings/hooks',
488 action='settings_hooks_update',
487 action='settings_hooks_update',
489 conditions={'method': ['POST', 'DELETE']})
488 conditions={'method': ['POST', 'DELETE']})
490 m.connect('admin_settings_hooks', '/settings/hooks',
489 m.connect('admin_settings_hooks', '/settings/hooks',
491 action='settings_hooks', conditions={'method': ['GET']})
490 action='settings_hooks', conditions={'method': ['GET']})
492
491
493 m.connect('admin_settings_search', '/settings/search',
492 m.connect('admin_settings_search', '/settings/search',
494 action='settings_search', conditions={'method': ['GET']})
493 action='settings_search', conditions={'method': ['GET']})
495
494
496 m.connect('admin_settings_system', '/settings/system',
495 m.connect('admin_settings_system', '/settings/system',
497 action='settings_system', conditions={'method': ['GET']})
496 action='settings_system', conditions={'method': ['GET']})
498
497
499 m.connect('admin_settings_system_update', '/settings/system/updates',
498 m.connect('admin_settings_system_update', '/settings/system/updates',
500 action='settings_system_update', conditions={'method': ['GET']})
499 action='settings_system_update', conditions={'method': ['GET']})
501
500
502 m.connect('admin_settings_supervisor', '/settings/supervisor',
501 m.connect('admin_settings_supervisor', '/settings/supervisor',
503 action='settings_supervisor', conditions={'method': ['GET']})
502 action='settings_supervisor', conditions={'method': ['GET']})
504 m.connect('admin_settings_supervisor_log', '/settings/supervisor/{procid}/log',
503 m.connect('admin_settings_supervisor_log', '/settings/supervisor/{procid}/log',
505 action='settings_supervisor_log', conditions={'method': ['GET']})
504 action='settings_supervisor_log', conditions={'method': ['GET']})
506
505
507 m.connect('admin_settings_labs', '/settings/labs',
506 m.connect('admin_settings_labs', '/settings/labs',
508 action='settings_labs_update',
507 action='settings_labs_update',
509 conditions={'method': ['POST']})
508 conditions={'method': ['POST']})
510 m.connect('admin_settings_labs', '/settings/labs',
509 m.connect('admin_settings_labs', '/settings/labs',
511 action='settings_labs', conditions={'method': ['GET']})
510 action='settings_labs', conditions={'method': ['GET']})
512
511
513 m.connect('admin_settings_open_source', '/settings/open_source',
512 m.connect('admin_settings_open_source', '/settings/open_source',
514 action='settings_open_source',
513 action='settings_open_source',
515 conditions={'method': ['GET']})
514 conditions={'method': ['GET']})
516
515
517 # ADMIN MY ACCOUNT
516 # ADMIN MY ACCOUNT
518 with rmap.submapper(path_prefix=ADMIN_PREFIX,
517 with rmap.submapper(path_prefix=ADMIN_PREFIX,
519 controller='admin/my_account') as m:
518 controller='admin/my_account') as m:
520
519
521 m.connect('my_account', '/my_account',
520 m.connect('my_account', '/my_account',
522 action='my_account', conditions={'method': ['GET']})
521 action='my_account', conditions={'method': ['GET']})
523 m.connect('my_account_edit', '/my_account/edit',
522 m.connect('my_account_edit', '/my_account/edit',
524 action='my_account_edit', conditions={'method': ['GET']})
523 action='my_account_edit', conditions={'method': ['GET']})
525 m.connect('my_account', '/my_account',
524 m.connect('my_account', '/my_account',
526 action='my_account_update', conditions={'method': ['POST']})
525 action='my_account_update', conditions={'method': ['POST']})
527
526
528 m.connect('my_account_password', '/my_account/password',
527 m.connect('my_account_password', '/my_account/password',
529 action='my_account_password', conditions={'method': ['GET']})
528 action='my_account_password', conditions={'method': ['GET']})
530 m.connect('my_account_password', '/my_account/password',
529 m.connect('my_account_password', '/my_account/password',
531 action='my_account_password_update', conditions={'method': ['POST']})
530 action='my_account_password_update', conditions={'method': ['POST']})
532
531
533 m.connect('my_account_repos', '/my_account/repos',
532 m.connect('my_account_repos', '/my_account/repos',
534 action='my_account_repos', conditions={'method': ['GET']})
533 action='my_account_repos', conditions={'method': ['GET']})
535
534
536 m.connect('my_account_watched', '/my_account/watched',
535 m.connect('my_account_watched', '/my_account/watched',
537 action='my_account_watched', conditions={'method': ['GET']})
536 action='my_account_watched', conditions={'method': ['GET']})
538
537
539 m.connect('my_account_pullrequests', '/my_account/pull_requests',
538 m.connect('my_account_pullrequests', '/my_account/pull_requests',
540 action='my_account_pullrequests', conditions={'method': ['GET']})
539 action='my_account_pullrequests', conditions={'method': ['GET']})
541
540
542 m.connect('my_account_perms', '/my_account/perms',
541 m.connect('my_account_perms', '/my_account/perms',
543 action='my_account_perms', conditions={'method': ['GET']})
542 action='my_account_perms', conditions={'method': ['GET']})
544
543
545 m.connect('my_account_emails', '/my_account/emails',
544 m.connect('my_account_emails', '/my_account/emails',
546 action='my_account_emails', conditions={'method': ['GET']})
545 action='my_account_emails', conditions={'method': ['GET']})
547 m.connect('my_account_emails', '/my_account/emails',
546 m.connect('my_account_emails', '/my_account/emails',
548 action='my_account_emails_add', conditions={'method': ['POST']})
547 action='my_account_emails_add', conditions={'method': ['POST']})
549 m.connect('my_account_emails', '/my_account/emails',
548 m.connect('my_account_emails', '/my_account/emails',
550 action='my_account_emails_delete', conditions={'method': ['DELETE']})
549 action='my_account_emails_delete', conditions={'method': ['DELETE']})
551
550
552 m.connect('my_account_auth_tokens', '/my_account/auth_tokens',
551 m.connect('my_account_auth_tokens', '/my_account/auth_tokens',
553 action='my_account_auth_tokens', conditions={'method': ['GET']})
552 action='my_account_auth_tokens', conditions={'method': ['GET']})
554 m.connect('my_account_auth_tokens', '/my_account/auth_tokens',
553 m.connect('my_account_auth_tokens', '/my_account/auth_tokens',
555 action='my_account_auth_tokens_add', conditions={'method': ['POST']})
554 action='my_account_auth_tokens_add', conditions={'method': ['POST']})
556 m.connect('my_account_auth_tokens', '/my_account/auth_tokens',
555 m.connect('my_account_auth_tokens', '/my_account/auth_tokens',
557 action='my_account_auth_tokens_delete', conditions={'method': ['DELETE']})
556 action='my_account_auth_tokens_delete', conditions={'method': ['DELETE']})
558
557
559 # NOTIFICATION REST ROUTES
558 # NOTIFICATION REST ROUTES
560 with rmap.submapper(path_prefix=ADMIN_PREFIX,
559 with rmap.submapper(path_prefix=ADMIN_PREFIX,
561 controller='admin/notifications') as m:
560 controller='admin/notifications') as m:
562 m.connect('notifications', '/notifications',
561 m.connect('notifications', '/notifications',
563 action='index', conditions={'method': ['GET']})
562 action='index', conditions={'method': ['GET']})
564 m.connect('notifications_mark_all_read', '/notifications/mark_all_read',
563 m.connect('notifications_mark_all_read', '/notifications/mark_all_read',
565 action='mark_all_read', conditions={'method': ['POST']})
564 action='mark_all_read', conditions={'method': ['POST']})
566
565
567 m.connect('/notifications/{notification_id}',
566 m.connect('/notifications/{notification_id}',
568 action='update', conditions={'method': ['PUT']})
567 action='update', conditions={'method': ['PUT']})
569 m.connect('/notifications/{notification_id}',
568 m.connect('/notifications/{notification_id}',
570 action='delete', conditions={'method': ['DELETE']})
569 action='delete', conditions={'method': ['DELETE']})
571 m.connect('notification', '/notifications/{notification_id}',
570 m.connect('notification', '/notifications/{notification_id}',
572 action='show', conditions={'method': ['GET']})
571 action='show', conditions={'method': ['GET']})
573
572
574 # ADMIN GIST
573 # ADMIN GIST
575 with rmap.submapper(path_prefix=ADMIN_PREFIX,
574 with rmap.submapper(path_prefix=ADMIN_PREFIX,
576 controller='admin/gists') as m:
575 controller='admin/gists') as m:
577 m.connect('gists', '/gists',
576 m.connect('gists', '/gists',
578 action='create', conditions={'method': ['POST']})
577 action='create', conditions={'method': ['POST']})
579 m.connect('gists', '/gists', jsroute=True,
578 m.connect('gists', '/gists', jsroute=True,
580 action='index', conditions={'method': ['GET']})
579 action='index', conditions={'method': ['GET']})
581 m.connect('new_gist', '/gists/new', jsroute=True,
580 m.connect('new_gist', '/gists/new', jsroute=True,
582 action='new', conditions={'method': ['GET']})
581 action='new', conditions={'method': ['GET']})
583
582
584 m.connect('/gists/{gist_id}',
583 m.connect('/gists/{gist_id}',
585 action='delete', conditions={'method': ['DELETE']})
584 action='delete', conditions={'method': ['DELETE']})
586 m.connect('edit_gist', '/gists/{gist_id}/edit',
585 m.connect('edit_gist', '/gists/{gist_id}/edit',
587 action='edit_form', conditions={'method': ['GET']})
586 action='edit_form', conditions={'method': ['GET']})
588 m.connect('edit_gist', '/gists/{gist_id}/edit',
587 m.connect('edit_gist', '/gists/{gist_id}/edit',
589 action='edit', conditions={'method': ['POST']})
588 action='edit', conditions={'method': ['POST']})
590 m.connect(
589 m.connect(
591 'edit_gist_check_revision', '/gists/{gist_id}/edit/check_revision',
590 'edit_gist_check_revision', '/gists/{gist_id}/edit/check_revision',
592 action='check_revision', conditions={'method': ['GET']})
591 action='check_revision', conditions={'method': ['GET']})
593
592
594 m.connect('gist', '/gists/{gist_id}',
593 m.connect('gist', '/gists/{gist_id}',
595 action='show', conditions={'method': ['GET']})
594 action='show', conditions={'method': ['GET']})
596 m.connect('gist_rev', '/gists/{gist_id}/{revision}',
595 m.connect('gist_rev', '/gists/{gist_id}/{revision}',
597 revision='tip',
596 revision='tip',
598 action='show', conditions={'method': ['GET']})
597 action='show', conditions={'method': ['GET']})
599 m.connect('formatted_gist', '/gists/{gist_id}/{revision}/{format}',
598 m.connect('formatted_gist', '/gists/{gist_id}/{revision}/{format}',
600 revision='tip',
599 revision='tip',
601 action='show', conditions={'method': ['GET']})
600 action='show', conditions={'method': ['GET']})
602 m.connect('formatted_gist_file', '/gists/{gist_id}/{revision}/{format}/{f_path}',
601 m.connect('formatted_gist_file', '/gists/{gist_id}/{revision}/{format}/{f_path}',
603 revision='tip',
602 revision='tip',
604 action='show', conditions={'method': ['GET']},
603 action='show', conditions={'method': ['GET']},
605 requirements=URL_NAME_REQUIREMENTS)
604 requirements=URL_NAME_REQUIREMENTS)
606
605
607 # ADMIN MAIN PAGES
606 # ADMIN MAIN PAGES
608 with rmap.submapper(path_prefix=ADMIN_PREFIX,
607 with rmap.submapper(path_prefix=ADMIN_PREFIX,
609 controller='admin/admin') as m:
608 controller='admin/admin') as m:
610 m.connect('admin_home', '', action='index')
609 m.connect('admin_home', '', action='index')
611 m.connect('admin_add_repo', '/add_repo/{new_repo:[a-z0-9\. _-]*}',
610 m.connect('admin_add_repo', '/add_repo/{new_repo:[a-z0-9\. _-]*}',
612 action='add_repo')
611 action='add_repo')
613 m.connect(
612 m.connect(
614 'pull_requests_global_0', '/pull_requests/{pull_request_id:[0-9]+}',
613 'pull_requests_global_0', '/pull_requests/{pull_request_id:[0-9]+}',
615 action='pull_requests')
614 action='pull_requests')
616 m.connect(
615 m.connect(
617 'pull_requests_global', '/pull-requests/{pull_request_id:[0-9]+}',
616 'pull_requests_global', '/pull-requests/{pull_request_id:[0-9]+}',
618 action='pull_requests')
617 action='pull_requests')
619
618
620
619
621 # USER JOURNAL
620 # USER JOURNAL
622 rmap.connect('journal', '%s/journal' % (ADMIN_PREFIX,),
621 rmap.connect('journal', '%s/journal' % (ADMIN_PREFIX,),
623 controller='journal', action='index')
622 controller='journal', action='index')
624 rmap.connect('journal_rss', '%s/journal/rss' % (ADMIN_PREFIX,),
623 rmap.connect('journal_rss', '%s/journal/rss' % (ADMIN_PREFIX,),
625 controller='journal', action='journal_rss')
624 controller='journal', action='journal_rss')
626 rmap.connect('journal_atom', '%s/journal/atom' % (ADMIN_PREFIX,),
625 rmap.connect('journal_atom', '%s/journal/atom' % (ADMIN_PREFIX,),
627 controller='journal', action='journal_atom')
626 controller='journal', action='journal_atom')
628
627
629 rmap.connect('public_journal', '%s/public_journal' % (ADMIN_PREFIX,),
628 rmap.connect('public_journal', '%s/public_journal' % (ADMIN_PREFIX,),
630 controller='journal', action='public_journal')
629 controller='journal', action='public_journal')
631
630
632 rmap.connect('public_journal_rss', '%s/public_journal/rss' % (ADMIN_PREFIX,),
631 rmap.connect('public_journal_rss', '%s/public_journal/rss' % (ADMIN_PREFIX,),
633 controller='journal', action='public_journal_rss')
632 controller='journal', action='public_journal_rss')
634
633
635 rmap.connect('public_journal_rss_old', '%s/public_journal_rss' % (ADMIN_PREFIX,),
634 rmap.connect('public_journal_rss_old', '%s/public_journal_rss' % (ADMIN_PREFIX,),
636 controller='journal', action='public_journal_rss')
635 controller='journal', action='public_journal_rss')
637
636
638 rmap.connect('public_journal_atom',
637 rmap.connect('public_journal_atom',
639 '%s/public_journal/atom' % (ADMIN_PREFIX,), controller='journal',
638 '%s/public_journal/atom' % (ADMIN_PREFIX,), controller='journal',
640 action='public_journal_atom')
639 action='public_journal_atom')
641
640
642 rmap.connect('public_journal_atom_old',
641 rmap.connect('public_journal_atom_old',
643 '%s/public_journal_atom' % (ADMIN_PREFIX,), controller='journal',
642 '%s/public_journal_atom' % (ADMIN_PREFIX,), controller='journal',
644 action='public_journal_atom')
643 action='public_journal_atom')
645
644
646 rmap.connect('toggle_following', '%s/toggle_following' % (ADMIN_PREFIX,),
645 rmap.connect('toggle_following', '%s/toggle_following' % (ADMIN_PREFIX,),
647 controller='journal', action='toggle_following', jsroute=True,
646 controller='journal', action='toggle_following', jsroute=True,
648 conditions={'method': ['POST']})
647 conditions={'method': ['POST']})
649
648
650 # FULL TEXT SEARCH
649 # FULL TEXT SEARCH
651 rmap.connect('search', '%s/search' % (ADMIN_PREFIX,),
650 rmap.connect('search', '%s/search' % (ADMIN_PREFIX,),
652 controller='search')
651 controller='search')
653 rmap.connect('search_repo_home', '/{repo_name}/search',
652 rmap.connect('search_repo_home', '/{repo_name}/search',
654 controller='search',
653 controller='search',
655 action='index',
654 action='index',
656 conditions={'function': check_repo},
655 conditions={'function': check_repo},
657 requirements=URL_NAME_REQUIREMENTS)
656 requirements=URL_NAME_REQUIREMENTS)
658
657
659 # FEEDS
658 # FEEDS
660 rmap.connect('rss_feed_home', '/{repo_name}/feed/rss',
659 rmap.connect('rss_feed_home', '/{repo_name}/feed/rss',
661 controller='feed', action='rss',
660 controller='feed', action='rss',
662 conditions={'function': check_repo},
661 conditions={'function': check_repo},
663 requirements=URL_NAME_REQUIREMENTS)
662 requirements=URL_NAME_REQUIREMENTS)
664
663
665 rmap.connect('atom_feed_home', '/{repo_name}/feed/atom',
664 rmap.connect('atom_feed_home', '/{repo_name}/feed/atom',
666 controller='feed', action='atom',
665 controller='feed', action='atom',
667 conditions={'function': check_repo},
666 conditions={'function': check_repo},
668 requirements=URL_NAME_REQUIREMENTS)
667 requirements=URL_NAME_REQUIREMENTS)
669
668
670 #==========================================================================
669 #==========================================================================
671 # REPOSITORY ROUTES
670 # REPOSITORY ROUTES
672 #==========================================================================
671 #==========================================================================
673
672
674 rmap.connect('repo_creating_home', '/{repo_name}/repo_creating',
673 rmap.connect('repo_creating_home', '/{repo_name}/repo_creating',
675 controller='admin/repos', action='repo_creating',
674 controller='admin/repos', action='repo_creating',
676 requirements=URL_NAME_REQUIREMENTS)
675 requirements=URL_NAME_REQUIREMENTS)
677 rmap.connect('repo_check_home', '/{repo_name}/crepo_check',
676 rmap.connect('repo_check_home', '/{repo_name}/crepo_check',
678 controller='admin/repos', action='repo_check',
677 controller='admin/repos', action='repo_check',
679 requirements=URL_NAME_REQUIREMENTS)
678 requirements=URL_NAME_REQUIREMENTS)
680
679
681 rmap.connect('repo_stats', '/{repo_name}/repo_stats/{commit_id}',
680 rmap.connect('repo_stats', '/{repo_name}/repo_stats/{commit_id}',
682 controller='summary', action='repo_stats',
681 controller='summary', action='repo_stats',
683 conditions={'function': check_repo},
682 conditions={'function': check_repo},
684 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
683 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
685
684
686 rmap.connect('repo_refs_data', '/{repo_name}/refs-data',
685 rmap.connect('repo_refs_data', '/{repo_name}/refs-data',
687 controller='summary', action='repo_refs_data', jsroute=True,
686 controller='summary', action='repo_refs_data', jsroute=True,
688 requirements=URL_NAME_REQUIREMENTS)
687 requirements=URL_NAME_REQUIREMENTS)
689 rmap.connect('repo_refs_changelog_data', '/{repo_name}/refs-data-changelog',
688 rmap.connect('repo_refs_changelog_data', '/{repo_name}/refs-data-changelog',
690 controller='summary', action='repo_refs_changelog_data',
689 controller='summary', action='repo_refs_changelog_data',
691 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
690 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
692
691
693 rmap.connect('changeset_home', '/{repo_name}/changeset/{revision}',
692 rmap.connect('changeset_home', '/{repo_name}/changeset/{revision}',
694 controller='changeset', revision='tip', jsroute=True,
693 controller='changeset', revision='tip', jsroute=True,
695 conditions={'function': check_repo},
694 conditions={'function': check_repo},
696 requirements=URL_NAME_REQUIREMENTS)
695 requirements=URL_NAME_REQUIREMENTS)
697 rmap.connect('changeset_children', '/{repo_name}/changeset_children/{revision}',
696 rmap.connect('changeset_children', '/{repo_name}/changeset_children/{revision}',
698 controller='changeset', revision='tip', action='changeset_children',
697 controller='changeset', revision='tip', action='changeset_children',
699 conditions={'function': check_repo},
698 conditions={'function': check_repo},
700 requirements=URL_NAME_REQUIREMENTS)
699 requirements=URL_NAME_REQUIREMENTS)
701 rmap.connect('changeset_parents', '/{repo_name}/changeset_parents/{revision}',
700 rmap.connect('changeset_parents', '/{repo_name}/changeset_parents/{revision}',
702 controller='changeset', revision='tip', action='changeset_parents',
701 controller='changeset', revision='tip', action='changeset_parents',
703 conditions={'function': check_repo},
702 conditions={'function': check_repo},
704 requirements=URL_NAME_REQUIREMENTS)
703 requirements=URL_NAME_REQUIREMENTS)
705
704
706 # repo edit options
705 # repo edit options
707 rmap.connect('edit_repo', '/{repo_name}/settings', jsroute=True,
706 rmap.connect('edit_repo', '/{repo_name}/settings', jsroute=True,
708 controller='admin/repos', action='edit',
707 controller='admin/repos', action='edit',
709 conditions={'method': ['GET'], 'function': check_repo},
708 conditions={'method': ['GET'], 'function': check_repo},
710 requirements=URL_NAME_REQUIREMENTS)
709 requirements=URL_NAME_REQUIREMENTS)
711
710
712 rmap.connect('edit_repo_perms', '/{repo_name}/settings/permissions',
711 rmap.connect('edit_repo_perms', '/{repo_name}/settings/permissions',
713 jsroute=True,
712 jsroute=True,
714 controller='admin/repos', action='edit_permissions',
713 controller='admin/repos', action='edit_permissions',
715 conditions={'method': ['GET'], 'function': check_repo},
714 conditions={'method': ['GET'], 'function': check_repo},
716 requirements=URL_NAME_REQUIREMENTS)
715 requirements=URL_NAME_REQUIREMENTS)
717 rmap.connect('edit_repo_perms_update', '/{repo_name}/settings/permissions',
716 rmap.connect('edit_repo_perms_update', '/{repo_name}/settings/permissions',
718 controller='admin/repos', action='edit_permissions_update',
717 controller='admin/repos', action='edit_permissions_update',
719 conditions={'method': ['PUT'], 'function': check_repo},
718 conditions={'method': ['PUT'], 'function': check_repo},
720 requirements=URL_NAME_REQUIREMENTS)
719 requirements=URL_NAME_REQUIREMENTS)
721
720
722 rmap.connect('edit_repo_fields', '/{repo_name}/settings/fields',
721 rmap.connect('edit_repo_fields', '/{repo_name}/settings/fields',
723 controller='admin/repos', action='edit_fields',
722 controller='admin/repos', action='edit_fields',
724 conditions={'method': ['GET'], 'function': check_repo},
723 conditions={'method': ['GET'], 'function': check_repo},
725 requirements=URL_NAME_REQUIREMENTS)
724 requirements=URL_NAME_REQUIREMENTS)
726 rmap.connect('create_repo_fields', '/{repo_name}/settings/fields/new',
725 rmap.connect('create_repo_fields', '/{repo_name}/settings/fields/new',
727 controller='admin/repos', action='create_repo_field',
726 controller='admin/repos', action='create_repo_field',
728 conditions={'method': ['PUT'], 'function': check_repo},
727 conditions={'method': ['PUT'], 'function': check_repo},
729 requirements=URL_NAME_REQUIREMENTS)
728 requirements=URL_NAME_REQUIREMENTS)
730 rmap.connect('delete_repo_fields', '/{repo_name}/settings/fields/{field_id}',
729 rmap.connect('delete_repo_fields', '/{repo_name}/settings/fields/{field_id}',
731 controller='admin/repos', action='delete_repo_field',
730 controller='admin/repos', action='delete_repo_field',
732 conditions={'method': ['DELETE'], 'function': check_repo},
731 conditions={'method': ['DELETE'], 'function': check_repo},
733 requirements=URL_NAME_REQUIREMENTS)
732 requirements=URL_NAME_REQUIREMENTS)
734
733
735 rmap.connect('edit_repo_advanced', '/{repo_name}/settings/advanced',
734 rmap.connect('edit_repo_advanced', '/{repo_name}/settings/advanced',
736 controller='admin/repos', action='edit_advanced',
735 controller='admin/repos', action='edit_advanced',
737 conditions={'method': ['GET'], 'function': check_repo},
736 conditions={'method': ['GET'], 'function': check_repo},
738 requirements=URL_NAME_REQUIREMENTS)
737 requirements=URL_NAME_REQUIREMENTS)
739
738
740 rmap.connect('edit_repo_advanced_locking', '/{repo_name}/settings/advanced/locking',
739 rmap.connect('edit_repo_advanced_locking', '/{repo_name}/settings/advanced/locking',
741 controller='admin/repos', action='edit_advanced_locking',
740 controller='admin/repos', action='edit_advanced_locking',
742 conditions={'method': ['PUT'], 'function': check_repo},
741 conditions={'method': ['PUT'], 'function': check_repo},
743 requirements=URL_NAME_REQUIREMENTS)
742 requirements=URL_NAME_REQUIREMENTS)
744 rmap.connect('toggle_locking', '/{repo_name}/settings/advanced/locking_toggle',
743 rmap.connect('toggle_locking', '/{repo_name}/settings/advanced/locking_toggle',
745 controller='admin/repos', action='toggle_locking',
744 controller='admin/repos', action='toggle_locking',
746 conditions={'method': ['GET'], 'function': check_repo},
745 conditions={'method': ['GET'], 'function': check_repo},
747 requirements=URL_NAME_REQUIREMENTS)
746 requirements=URL_NAME_REQUIREMENTS)
748
747
749 rmap.connect('edit_repo_advanced_journal', '/{repo_name}/settings/advanced/journal',
748 rmap.connect('edit_repo_advanced_journal', '/{repo_name}/settings/advanced/journal',
750 controller='admin/repos', action='edit_advanced_journal',
749 controller='admin/repos', action='edit_advanced_journal',
751 conditions={'method': ['PUT'], 'function': check_repo},
750 conditions={'method': ['PUT'], 'function': check_repo},
752 requirements=URL_NAME_REQUIREMENTS)
751 requirements=URL_NAME_REQUIREMENTS)
753
752
754 rmap.connect('edit_repo_advanced_fork', '/{repo_name}/settings/advanced/fork',
753 rmap.connect('edit_repo_advanced_fork', '/{repo_name}/settings/advanced/fork',
755 controller='admin/repos', action='edit_advanced_fork',
754 controller='admin/repos', action='edit_advanced_fork',
756 conditions={'method': ['PUT'], 'function': check_repo},
755 conditions={'method': ['PUT'], 'function': check_repo},
757 requirements=URL_NAME_REQUIREMENTS)
756 requirements=URL_NAME_REQUIREMENTS)
758
757
759 rmap.connect('edit_repo_caches', '/{repo_name}/settings/caches',
758 rmap.connect('edit_repo_caches', '/{repo_name}/settings/caches',
760 controller='admin/repos', action='edit_caches_form',
759 controller='admin/repos', action='edit_caches_form',
761 conditions={'method': ['GET'], 'function': check_repo},
760 conditions={'method': ['GET'], 'function': check_repo},
762 requirements=URL_NAME_REQUIREMENTS)
761 requirements=URL_NAME_REQUIREMENTS)
763 rmap.connect('edit_repo_caches', '/{repo_name}/settings/caches',
762 rmap.connect('edit_repo_caches', '/{repo_name}/settings/caches',
764 controller='admin/repos', action='edit_caches',
763 controller='admin/repos', action='edit_caches',
765 conditions={'method': ['PUT'], 'function': check_repo},
764 conditions={'method': ['PUT'], 'function': check_repo},
766 requirements=URL_NAME_REQUIREMENTS)
765 requirements=URL_NAME_REQUIREMENTS)
767
766
768 rmap.connect('edit_repo_remote', '/{repo_name}/settings/remote',
767 rmap.connect('edit_repo_remote', '/{repo_name}/settings/remote',
769 controller='admin/repos', action='edit_remote_form',
768 controller='admin/repos', action='edit_remote_form',
770 conditions={'method': ['GET'], 'function': check_repo},
769 conditions={'method': ['GET'], 'function': check_repo},
771 requirements=URL_NAME_REQUIREMENTS)
770 requirements=URL_NAME_REQUIREMENTS)
772 rmap.connect('edit_repo_remote', '/{repo_name}/settings/remote',
771 rmap.connect('edit_repo_remote', '/{repo_name}/settings/remote',
773 controller='admin/repos', action='edit_remote',
772 controller='admin/repos', action='edit_remote',
774 conditions={'method': ['PUT'], 'function': check_repo},
773 conditions={'method': ['PUT'], 'function': check_repo},
775 requirements=URL_NAME_REQUIREMENTS)
774 requirements=URL_NAME_REQUIREMENTS)
776
775
777 rmap.connect('edit_repo_statistics', '/{repo_name}/settings/statistics',
776 rmap.connect('edit_repo_statistics', '/{repo_name}/settings/statistics',
778 controller='admin/repos', action='edit_statistics_form',
777 controller='admin/repos', action='edit_statistics_form',
779 conditions={'method': ['GET'], 'function': check_repo},
778 conditions={'method': ['GET'], 'function': check_repo},
780 requirements=URL_NAME_REQUIREMENTS)
779 requirements=URL_NAME_REQUIREMENTS)
781 rmap.connect('edit_repo_statistics', '/{repo_name}/settings/statistics',
780 rmap.connect('edit_repo_statistics', '/{repo_name}/settings/statistics',
782 controller='admin/repos', action='edit_statistics',
781 controller='admin/repos', action='edit_statistics',
783 conditions={'method': ['PUT'], 'function': check_repo},
782 conditions={'method': ['PUT'], 'function': check_repo},
784 requirements=URL_NAME_REQUIREMENTS)
783 requirements=URL_NAME_REQUIREMENTS)
785 rmap.connect('repo_settings_issuetracker',
784 rmap.connect('repo_settings_issuetracker',
786 '/{repo_name}/settings/issue-tracker',
785 '/{repo_name}/settings/issue-tracker',
787 controller='admin/repos', action='repo_issuetracker',
786 controller='admin/repos', action='repo_issuetracker',
788 conditions={'method': ['GET'], 'function': check_repo},
787 conditions={'method': ['GET'], 'function': check_repo},
789 requirements=URL_NAME_REQUIREMENTS)
788 requirements=URL_NAME_REQUIREMENTS)
790 rmap.connect('repo_issuetracker_test',
789 rmap.connect('repo_issuetracker_test',
791 '/{repo_name}/settings/issue-tracker/test',
790 '/{repo_name}/settings/issue-tracker/test',
792 controller='admin/repos', action='repo_issuetracker_test',
791 controller='admin/repos', action='repo_issuetracker_test',
793 conditions={'method': ['POST'], 'function': check_repo},
792 conditions={'method': ['POST'], 'function': check_repo},
794 requirements=URL_NAME_REQUIREMENTS)
793 requirements=URL_NAME_REQUIREMENTS)
795 rmap.connect('repo_issuetracker_delete',
794 rmap.connect('repo_issuetracker_delete',
796 '/{repo_name}/settings/issue-tracker/delete',
795 '/{repo_name}/settings/issue-tracker/delete',
797 controller='admin/repos', action='repo_issuetracker_delete',
796 controller='admin/repos', action='repo_issuetracker_delete',
798 conditions={'method': ['DELETE'], 'function': check_repo},
797 conditions={'method': ['DELETE'], 'function': check_repo},
799 requirements=URL_NAME_REQUIREMENTS)
798 requirements=URL_NAME_REQUIREMENTS)
800 rmap.connect('repo_issuetracker_save',
799 rmap.connect('repo_issuetracker_save',
801 '/{repo_name}/settings/issue-tracker/save',
800 '/{repo_name}/settings/issue-tracker/save',
802 controller='admin/repos', action='repo_issuetracker_save',
801 controller='admin/repos', action='repo_issuetracker_save',
803 conditions={'method': ['POST'], 'function': check_repo},
802 conditions={'method': ['POST'], 'function': check_repo},
804 requirements=URL_NAME_REQUIREMENTS)
803 requirements=URL_NAME_REQUIREMENTS)
805 rmap.connect('repo_vcs_settings', '/{repo_name}/settings/vcs',
804 rmap.connect('repo_vcs_settings', '/{repo_name}/settings/vcs',
806 controller='admin/repos', action='repo_settings_vcs_update',
805 controller='admin/repos', action='repo_settings_vcs_update',
807 conditions={'method': ['POST'], 'function': check_repo},
806 conditions={'method': ['POST'], 'function': check_repo},
808 requirements=URL_NAME_REQUIREMENTS)
807 requirements=URL_NAME_REQUIREMENTS)
809 rmap.connect('repo_vcs_settings', '/{repo_name}/settings/vcs',
808 rmap.connect('repo_vcs_settings', '/{repo_name}/settings/vcs',
810 controller='admin/repos', action='repo_settings_vcs',
809 controller='admin/repos', action='repo_settings_vcs',
811 conditions={'method': ['GET'], 'function': check_repo},
810 conditions={'method': ['GET'], 'function': check_repo},
812 requirements=URL_NAME_REQUIREMENTS)
811 requirements=URL_NAME_REQUIREMENTS)
813 rmap.connect('repo_vcs_settings', '/{repo_name}/settings/vcs',
812 rmap.connect('repo_vcs_settings', '/{repo_name}/settings/vcs',
814 controller='admin/repos', action='repo_delete_svn_pattern',
813 controller='admin/repos', action='repo_delete_svn_pattern',
815 conditions={'method': ['DELETE'], 'function': check_repo},
814 conditions={'method': ['DELETE'], 'function': check_repo},
816 requirements=URL_NAME_REQUIREMENTS)
815 requirements=URL_NAME_REQUIREMENTS)
817
816
818 # still working url for backward compat.
817 # still working url for backward compat.
819 rmap.connect('raw_changeset_home_depraced',
818 rmap.connect('raw_changeset_home_depraced',
820 '/{repo_name}/raw-changeset/{revision}',
819 '/{repo_name}/raw-changeset/{revision}',
821 controller='changeset', action='changeset_raw',
820 controller='changeset', action='changeset_raw',
822 revision='tip', conditions={'function': check_repo},
821 revision='tip', conditions={'function': check_repo},
823 requirements=URL_NAME_REQUIREMENTS)
822 requirements=URL_NAME_REQUIREMENTS)
824
823
825 # new URLs
824 # new URLs
826 rmap.connect('changeset_raw_home',
825 rmap.connect('changeset_raw_home',
827 '/{repo_name}/changeset-diff/{revision}',
826 '/{repo_name}/changeset-diff/{revision}',
828 controller='changeset', action='changeset_raw',
827 controller='changeset', action='changeset_raw',
829 revision='tip', conditions={'function': check_repo},
828 revision='tip', conditions={'function': check_repo},
830 requirements=URL_NAME_REQUIREMENTS)
829 requirements=URL_NAME_REQUIREMENTS)
831
830
832 rmap.connect('changeset_patch_home',
831 rmap.connect('changeset_patch_home',
833 '/{repo_name}/changeset-patch/{revision}',
832 '/{repo_name}/changeset-patch/{revision}',
834 controller='changeset', action='changeset_patch',
833 controller='changeset', action='changeset_patch',
835 revision='tip', conditions={'function': check_repo},
834 revision='tip', conditions={'function': check_repo},
836 requirements=URL_NAME_REQUIREMENTS)
835 requirements=URL_NAME_REQUIREMENTS)
837
836
838 rmap.connect('changeset_download_home',
837 rmap.connect('changeset_download_home',
839 '/{repo_name}/changeset-download/{revision}',
838 '/{repo_name}/changeset-download/{revision}',
840 controller='changeset', action='changeset_download',
839 controller='changeset', action='changeset_download',
841 revision='tip', conditions={'function': check_repo},
840 revision='tip', conditions={'function': check_repo},
842 requirements=URL_NAME_REQUIREMENTS)
841 requirements=URL_NAME_REQUIREMENTS)
843
842
844 rmap.connect('changeset_comment',
843 rmap.connect('changeset_comment',
845 '/{repo_name}/changeset/{revision}/comment', jsroute=True,
844 '/{repo_name}/changeset/{revision}/comment', jsroute=True,
846 controller='changeset', revision='tip', action='comment',
845 controller='changeset', revision='tip', action='comment',
847 conditions={'function': check_repo},
846 conditions={'function': check_repo},
848 requirements=URL_NAME_REQUIREMENTS)
847 requirements=URL_NAME_REQUIREMENTS)
849
848
850 rmap.connect('changeset_comment_preview',
849 rmap.connect('changeset_comment_preview',
851 '/{repo_name}/changeset/comment/preview', jsroute=True,
850 '/{repo_name}/changeset/comment/preview', jsroute=True,
852 controller='changeset', action='preview_comment',
851 controller='changeset', action='preview_comment',
853 conditions={'function': check_repo, 'method': ['POST']},
852 conditions={'function': check_repo, 'method': ['POST']},
854 requirements=URL_NAME_REQUIREMENTS)
853 requirements=URL_NAME_REQUIREMENTS)
855
854
856 rmap.connect('changeset_comment_delete',
855 rmap.connect('changeset_comment_delete',
857 '/{repo_name}/changeset/comment/{comment_id}/delete',
856 '/{repo_name}/changeset/comment/{comment_id}/delete',
858 controller='changeset', action='delete_comment',
857 controller='changeset', action='delete_comment',
859 conditions={'function': check_repo, 'method': ['DELETE']},
858 conditions={'function': check_repo, 'method': ['DELETE']},
860 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
859 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
861
860
862 rmap.connect('changeset_info', '/changeset_info/{repo_name}/{revision}',
861 rmap.connect('changeset_info', '/changeset_info/{repo_name}/{revision}',
863 controller='changeset', action='changeset_info',
862 controller='changeset', action='changeset_info',
864 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
863 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
865
864
866 rmap.connect('compare_home',
865 rmap.connect('compare_home',
867 '/{repo_name}/compare',
866 '/{repo_name}/compare',
868 controller='compare', action='index',
867 controller='compare', action='index',
869 conditions={'function': check_repo},
868 conditions={'function': check_repo},
870 requirements=URL_NAME_REQUIREMENTS)
869 requirements=URL_NAME_REQUIREMENTS)
871
870
872 rmap.connect('compare_url',
871 rmap.connect('compare_url',
873 '/{repo_name}/compare/{source_ref_type}@{source_ref:.*?}...{target_ref_type}@{target_ref:.*?}',
872 '/{repo_name}/compare/{source_ref_type}@{source_ref:.*?}...{target_ref_type}@{target_ref:.*?}',
874 controller='compare', action='compare',
873 controller='compare', action='compare',
875 conditions={'function': check_repo},
874 conditions={'function': check_repo},
876 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
875 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
877
876
878 rmap.connect('pullrequest_home',
877 rmap.connect('pullrequest_home',
879 '/{repo_name}/pull-request/new', controller='pullrequests',
878 '/{repo_name}/pull-request/new', controller='pullrequests',
880 action='index', conditions={'function': check_repo,
879 action='index', conditions={'function': check_repo,
881 'method': ['GET']},
880 'method': ['GET']},
882 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
881 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
883
882
884 rmap.connect('pullrequest',
883 rmap.connect('pullrequest',
885 '/{repo_name}/pull-request/new', controller='pullrequests',
884 '/{repo_name}/pull-request/new', controller='pullrequests',
886 action='create', conditions={'function': check_repo,
885 action='create', conditions={'function': check_repo,
887 'method': ['POST']},
886 'method': ['POST']},
888 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
887 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
889
888
890 rmap.connect('pullrequest_repo_refs',
889 rmap.connect('pullrequest_repo_refs',
891 '/{repo_name}/pull-request/refs/{target_repo_name:.*?[^/]}',
890 '/{repo_name}/pull-request/refs/{target_repo_name:.*?[^/]}',
892 controller='pullrequests',
891 controller='pullrequests',
893 action='get_repo_refs',
892 action='get_repo_refs',
894 conditions={'function': check_repo, 'method': ['GET']},
893 conditions={'function': check_repo, 'method': ['GET']},
895 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
894 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
896
895
897 rmap.connect('pullrequest_repo_destinations',
896 rmap.connect('pullrequest_repo_destinations',
898 '/{repo_name}/pull-request/repo-destinations',
897 '/{repo_name}/pull-request/repo-destinations',
899 controller='pullrequests',
898 controller='pullrequests',
900 action='get_repo_destinations',
899 action='get_repo_destinations',
901 conditions={'function': check_repo, 'method': ['GET']},
900 conditions={'function': check_repo, 'method': ['GET']},
902 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
901 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
903
902
904 rmap.connect('pullrequest_show',
903 rmap.connect('pullrequest_show',
905 '/{repo_name}/pull-request/{pull_request_id}',
904 '/{repo_name}/pull-request/{pull_request_id}',
906 controller='pullrequests',
905 controller='pullrequests',
907 action='show', conditions={'function': check_repo,
906 action='show', conditions={'function': check_repo,
908 'method': ['GET']},
907 'method': ['GET']},
909 requirements=URL_NAME_REQUIREMENTS)
908 requirements=URL_NAME_REQUIREMENTS)
910
909
911 rmap.connect('pullrequest_update',
910 rmap.connect('pullrequest_update',
912 '/{repo_name}/pull-request/{pull_request_id}',
911 '/{repo_name}/pull-request/{pull_request_id}',
913 controller='pullrequests',
912 controller='pullrequests',
914 action='update', conditions={'function': check_repo,
913 action='update', conditions={'function': check_repo,
915 'method': ['PUT']},
914 'method': ['PUT']},
916 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
915 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
917
916
918 rmap.connect('pullrequest_merge',
917 rmap.connect('pullrequest_merge',
919 '/{repo_name}/pull-request/{pull_request_id}',
918 '/{repo_name}/pull-request/{pull_request_id}',
920 controller='pullrequests',
919 controller='pullrequests',
921 action='merge', conditions={'function': check_repo,
920 action='merge', conditions={'function': check_repo,
922 'method': ['POST']},
921 'method': ['POST']},
923 requirements=URL_NAME_REQUIREMENTS)
922 requirements=URL_NAME_REQUIREMENTS)
924
923
925 rmap.connect('pullrequest_delete',
924 rmap.connect('pullrequest_delete',
926 '/{repo_name}/pull-request/{pull_request_id}',
925 '/{repo_name}/pull-request/{pull_request_id}',
927 controller='pullrequests',
926 controller='pullrequests',
928 action='delete', conditions={'function': check_repo,
927 action='delete', conditions={'function': check_repo,
929 'method': ['DELETE']},
928 'method': ['DELETE']},
930 requirements=URL_NAME_REQUIREMENTS)
929 requirements=URL_NAME_REQUIREMENTS)
931
930
932 rmap.connect('pullrequest_show_all',
931 rmap.connect('pullrequest_show_all',
933 '/{repo_name}/pull-request',
932 '/{repo_name}/pull-request',
934 controller='pullrequests',
933 controller='pullrequests',
935 action='show_all', conditions={'function': check_repo,
934 action='show_all', conditions={'function': check_repo,
936 'method': ['GET']},
935 'method': ['GET']},
937 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
936 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
938
937
939 rmap.connect('pullrequest_comment',
938 rmap.connect('pullrequest_comment',
940 '/{repo_name}/pull-request-comment/{pull_request_id}',
939 '/{repo_name}/pull-request-comment/{pull_request_id}',
941 controller='pullrequests',
940 controller='pullrequests',
942 action='comment', conditions={'function': check_repo,
941 action='comment', conditions={'function': check_repo,
943 'method': ['POST']},
942 'method': ['POST']},
944 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
943 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
945
944
946 rmap.connect('pullrequest_comment_delete',
945 rmap.connect('pullrequest_comment_delete',
947 '/{repo_name}/pull-request-comment/{comment_id}/delete',
946 '/{repo_name}/pull-request-comment/{comment_id}/delete',
948 controller='pullrequests', action='delete_comment',
947 controller='pullrequests', action='delete_comment',
949 conditions={'function': check_repo, 'method': ['DELETE']},
948 conditions={'function': check_repo, 'method': ['DELETE']},
950 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
949 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
951
950
952 rmap.connect('summary_home_explicit', '/{repo_name}/summary',
951 rmap.connect('summary_home_explicit', '/{repo_name}/summary',
953 controller='summary', conditions={'function': check_repo},
952 controller='summary', conditions={'function': check_repo},
954 requirements=URL_NAME_REQUIREMENTS)
953 requirements=URL_NAME_REQUIREMENTS)
955
954
956 rmap.connect('branches_home', '/{repo_name}/branches',
955 rmap.connect('branches_home', '/{repo_name}/branches',
957 controller='branches', conditions={'function': check_repo},
956 controller='branches', conditions={'function': check_repo},
958 requirements=URL_NAME_REQUIREMENTS)
957 requirements=URL_NAME_REQUIREMENTS)
959
958
960 rmap.connect('tags_home', '/{repo_name}/tags',
959 rmap.connect('tags_home', '/{repo_name}/tags',
961 controller='tags', conditions={'function': check_repo},
960 controller='tags', conditions={'function': check_repo},
962 requirements=URL_NAME_REQUIREMENTS)
961 requirements=URL_NAME_REQUIREMENTS)
963
962
964 rmap.connect('bookmarks_home', '/{repo_name}/bookmarks',
963 rmap.connect('bookmarks_home', '/{repo_name}/bookmarks',
965 controller='bookmarks', conditions={'function': check_repo},
964 controller='bookmarks', conditions={'function': check_repo},
966 requirements=URL_NAME_REQUIREMENTS)
965 requirements=URL_NAME_REQUIREMENTS)
967
966
968 rmap.connect('changelog_home', '/{repo_name}/changelog', jsroute=True,
967 rmap.connect('changelog_home', '/{repo_name}/changelog', jsroute=True,
969 controller='changelog', conditions={'function': check_repo},
968 controller='changelog', conditions={'function': check_repo},
970 requirements=URL_NAME_REQUIREMENTS)
969 requirements=URL_NAME_REQUIREMENTS)
971
970
972 rmap.connect('changelog_summary_home', '/{repo_name}/changelog_summary',
971 rmap.connect('changelog_summary_home', '/{repo_name}/changelog_summary',
973 controller='changelog', action='changelog_summary',
972 controller='changelog', action='changelog_summary',
974 conditions={'function': check_repo},
973 conditions={'function': check_repo},
975 requirements=URL_NAME_REQUIREMENTS)
974 requirements=URL_NAME_REQUIREMENTS)
976
975
977 rmap.connect('changelog_file_home',
976 rmap.connect('changelog_file_home',
978 '/{repo_name}/changelog/{revision}/{f_path}',
977 '/{repo_name}/changelog/{revision}/{f_path}',
979 controller='changelog', f_path=None,
978 controller='changelog', f_path=None,
980 conditions={'function': check_repo},
979 conditions={'function': check_repo},
981 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
980 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
982
981
983 rmap.connect('changelog_details', '/{repo_name}/changelog_details/{cs}',
982 rmap.connect('changelog_details', '/{repo_name}/changelog_details/{cs}',
984 controller='changelog', action='changelog_details',
983 controller='changelog', action='changelog_details',
985 conditions={'function': check_repo},
984 conditions={'function': check_repo},
986 requirements=URL_NAME_REQUIREMENTS)
985 requirements=URL_NAME_REQUIREMENTS)
987
986
988 rmap.connect('files_home', '/{repo_name}/files/{revision}/{f_path}',
987 rmap.connect('files_home', '/{repo_name}/files/{revision}/{f_path}',
989 controller='files', revision='tip', f_path='',
988 controller='files', revision='tip', f_path='',
990 conditions={'function': check_repo},
989 conditions={'function': check_repo},
991 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
990 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
992
991
993 rmap.connect('files_home_simple_catchrev',
992 rmap.connect('files_home_simple_catchrev',
994 '/{repo_name}/files/{revision}',
993 '/{repo_name}/files/{revision}',
995 controller='files', revision='tip', f_path='',
994 controller='files', revision='tip', f_path='',
996 conditions={'function': check_repo},
995 conditions={'function': check_repo},
997 requirements=URL_NAME_REQUIREMENTS)
996 requirements=URL_NAME_REQUIREMENTS)
998
997
999 rmap.connect('files_home_simple_catchall',
998 rmap.connect('files_home_simple_catchall',
1000 '/{repo_name}/files',
999 '/{repo_name}/files',
1001 controller='files', revision='tip', f_path='',
1000 controller='files', revision='tip', f_path='',
1002 conditions={'function': check_repo},
1001 conditions={'function': check_repo},
1003 requirements=URL_NAME_REQUIREMENTS)
1002 requirements=URL_NAME_REQUIREMENTS)
1004
1003
1005 rmap.connect('files_history_home',
1004 rmap.connect('files_history_home',
1006 '/{repo_name}/history/{revision}/{f_path}',
1005 '/{repo_name}/history/{revision}/{f_path}',
1007 controller='files', action='history', revision='tip', f_path='',
1006 controller='files', action='history', revision='tip', f_path='',
1008 conditions={'function': check_repo},
1007 conditions={'function': check_repo},
1009 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
1008 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
1010
1009
1011 rmap.connect('files_authors_home',
1010 rmap.connect('files_authors_home',
1012 '/{repo_name}/authors/{revision}/{f_path}',
1011 '/{repo_name}/authors/{revision}/{f_path}',
1013 controller='files', action='authors', revision='tip', f_path='',
1012 controller='files', action='authors', revision='tip', f_path='',
1014 conditions={'function': check_repo},
1013 conditions={'function': check_repo},
1015 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
1014 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
1016
1015
1017 rmap.connect('files_diff_home', '/{repo_name}/diff/{f_path}',
1016 rmap.connect('files_diff_home', '/{repo_name}/diff/{f_path}',
1018 controller='files', action='diff', f_path='',
1017 controller='files', action='diff', f_path='',
1019 conditions={'function': check_repo},
1018 conditions={'function': check_repo},
1020 requirements=URL_NAME_REQUIREMENTS)
1019 requirements=URL_NAME_REQUIREMENTS)
1021
1020
1022 rmap.connect('files_diff_2way_home',
1021 rmap.connect('files_diff_2way_home',
1023 '/{repo_name}/diff-2way/{f_path}',
1022 '/{repo_name}/diff-2way/{f_path}',
1024 controller='files', action='diff_2way', f_path='',
1023 controller='files', action='diff_2way', f_path='',
1025 conditions={'function': check_repo},
1024 conditions={'function': check_repo},
1026 requirements=URL_NAME_REQUIREMENTS)
1025 requirements=URL_NAME_REQUIREMENTS)
1027
1026
1028 rmap.connect('files_rawfile_home',
1027 rmap.connect('files_rawfile_home',
1029 '/{repo_name}/rawfile/{revision}/{f_path}',
1028 '/{repo_name}/rawfile/{revision}/{f_path}',
1030 controller='files', action='rawfile', revision='tip',
1029 controller='files', action='rawfile', revision='tip',
1031 f_path='', conditions={'function': check_repo},
1030 f_path='', conditions={'function': check_repo},
1032 requirements=URL_NAME_REQUIREMENTS)
1031 requirements=URL_NAME_REQUIREMENTS)
1033
1032
1034 rmap.connect('files_raw_home',
1033 rmap.connect('files_raw_home',
1035 '/{repo_name}/raw/{revision}/{f_path}',
1034 '/{repo_name}/raw/{revision}/{f_path}',
1036 controller='files', action='raw', revision='tip', f_path='',
1035 controller='files', action='raw', revision='tip', f_path='',
1037 conditions={'function': check_repo},
1036 conditions={'function': check_repo},
1038 requirements=URL_NAME_REQUIREMENTS)
1037 requirements=URL_NAME_REQUIREMENTS)
1039
1038
1040 rmap.connect('files_render_home',
1039 rmap.connect('files_render_home',
1041 '/{repo_name}/render/{revision}/{f_path}',
1040 '/{repo_name}/render/{revision}/{f_path}',
1042 controller='files', action='index', revision='tip', f_path='',
1041 controller='files', action='index', revision='tip', f_path='',
1043 rendered=True, conditions={'function': check_repo},
1042 rendered=True, conditions={'function': check_repo},
1044 requirements=URL_NAME_REQUIREMENTS)
1043 requirements=URL_NAME_REQUIREMENTS)
1045
1044
1046 rmap.connect('files_annotate_home',
1045 rmap.connect('files_annotate_home',
1047 '/{repo_name}/annotate/{revision}/{f_path}',
1046 '/{repo_name}/annotate/{revision}/{f_path}',
1048 controller='files', action='index', revision='tip',
1047 controller='files', action='index', revision='tip',
1049 f_path='', annotate=True, conditions={'function': check_repo},
1048 f_path='', annotate=True, conditions={'function': check_repo},
1050 requirements=URL_NAME_REQUIREMENTS)
1049 requirements=URL_NAME_REQUIREMENTS)
1051
1050
1052 rmap.connect('files_edit',
1051 rmap.connect('files_edit',
1053 '/{repo_name}/edit/{revision}/{f_path}',
1052 '/{repo_name}/edit/{revision}/{f_path}',
1054 controller='files', action='edit', revision='tip',
1053 controller='files', action='edit', revision='tip',
1055 f_path='',
1054 f_path='',
1056 conditions={'function': check_repo, 'method': ['POST']},
1055 conditions={'function': check_repo, 'method': ['POST']},
1057 requirements=URL_NAME_REQUIREMENTS)
1056 requirements=URL_NAME_REQUIREMENTS)
1058
1057
1059 rmap.connect('files_edit_home',
1058 rmap.connect('files_edit_home',
1060 '/{repo_name}/edit/{revision}/{f_path}',
1059 '/{repo_name}/edit/{revision}/{f_path}',
1061 controller='files', action='edit_home', revision='tip',
1060 controller='files', action='edit_home', revision='tip',
1062 f_path='', conditions={'function': check_repo},
1061 f_path='', conditions={'function': check_repo},
1063 requirements=URL_NAME_REQUIREMENTS)
1062 requirements=URL_NAME_REQUIREMENTS)
1064
1063
1065 rmap.connect('files_add',
1064 rmap.connect('files_add',
1066 '/{repo_name}/add/{revision}/{f_path}',
1065 '/{repo_name}/add/{revision}/{f_path}',
1067 controller='files', action='add', revision='tip',
1066 controller='files', action='add', revision='tip',
1068 f_path='',
1067 f_path='',
1069 conditions={'function': check_repo, 'method': ['POST']},
1068 conditions={'function': check_repo, 'method': ['POST']},
1070 requirements=URL_NAME_REQUIREMENTS)
1069 requirements=URL_NAME_REQUIREMENTS)
1071
1070
1072 rmap.connect('files_add_home',
1071 rmap.connect('files_add_home',
1073 '/{repo_name}/add/{revision}/{f_path}',
1072 '/{repo_name}/add/{revision}/{f_path}',
1074 controller='files', action='add_home', revision='tip',
1073 controller='files', action='add_home', revision='tip',
1075 f_path='', conditions={'function': check_repo},
1074 f_path='', conditions={'function': check_repo},
1076 requirements=URL_NAME_REQUIREMENTS)
1075 requirements=URL_NAME_REQUIREMENTS)
1077
1076
1078 rmap.connect('files_delete',
1077 rmap.connect('files_delete',
1079 '/{repo_name}/delete/{revision}/{f_path}',
1078 '/{repo_name}/delete/{revision}/{f_path}',
1080 controller='files', action='delete', revision='tip',
1079 controller='files', action='delete', revision='tip',
1081 f_path='',
1080 f_path='',
1082 conditions={'function': check_repo, 'method': ['POST']},
1081 conditions={'function': check_repo, 'method': ['POST']},
1083 requirements=URL_NAME_REQUIREMENTS)
1082 requirements=URL_NAME_REQUIREMENTS)
1084
1083
1085 rmap.connect('files_delete_home',
1084 rmap.connect('files_delete_home',
1086 '/{repo_name}/delete/{revision}/{f_path}',
1085 '/{repo_name}/delete/{revision}/{f_path}',
1087 controller='files', action='delete_home', revision='tip',
1086 controller='files', action='delete_home', revision='tip',
1088 f_path='', conditions={'function': check_repo},
1087 f_path='', conditions={'function': check_repo},
1089 requirements=URL_NAME_REQUIREMENTS)
1088 requirements=URL_NAME_REQUIREMENTS)
1090
1089
1091 rmap.connect('files_archive_home', '/{repo_name}/archive/{fname}',
1090 rmap.connect('files_archive_home', '/{repo_name}/archive/{fname}',
1092 controller='files', action='archivefile',
1091 controller='files', action='archivefile',
1093 conditions={'function': check_repo},
1092 conditions={'function': check_repo},
1094 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
1093 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
1095
1094
1096 rmap.connect('files_nodelist_home',
1095 rmap.connect('files_nodelist_home',
1097 '/{repo_name}/nodelist/{revision}/{f_path}',
1096 '/{repo_name}/nodelist/{revision}/{f_path}',
1098 controller='files', action='nodelist',
1097 controller='files', action='nodelist',
1099 conditions={'function': check_repo},
1098 conditions={'function': check_repo},
1100 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
1099 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
1101
1100
1102 rmap.connect('files_metadata_list_home',
1101 rmap.connect('files_metadata_list_home',
1103 '/{repo_name}/metadata_list/{revision}/{f_path}',
1102 '/{repo_name}/metadata_list/{revision}/{f_path}',
1104 controller='files', action='metadata_list',
1103 controller='files', action='metadata_list',
1105 conditions={'function': check_repo},
1104 conditions={'function': check_repo},
1106 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
1105 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
1107
1106
1108 rmap.connect('repo_fork_create_home', '/{repo_name}/fork',
1107 rmap.connect('repo_fork_create_home', '/{repo_name}/fork',
1109 controller='forks', action='fork_create',
1108 controller='forks', action='fork_create',
1110 conditions={'function': check_repo, 'method': ['POST']},
1109 conditions={'function': check_repo, 'method': ['POST']},
1111 requirements=URL_NAME_REQUIREMENTS)
1110 requirements=URL_NAME_REQUIREMENTS)
1112
1111
1113 rmap.connect('repo_fork_home', '/{repo_name}/fork',
1112 rmap.connect('repo_fork_home', '/{repo_name}/fork',
1114 controller='forks', action='fork',
1113 controller='forks', action='fork',
1115 conditions={'function': check_repo},
1114 conditions={'function': check_repo},
1116 requirements=URL_NAME_REQUIREMENTS)
1115 requirements=URL_NAME_REQUIREMENTS)
1117
1116
1118 rmap.connect('repo_forks_home', '/{repo_name}/forks',
1117 rmap.connect('repo_forks_home', '/{repo_name}/forks',
1119 controller='forks', action='forks',
1118 controller='forks', action='forks',
1120 conditions={'function': check_repo},
1119 conditions={'function': check_repo},
1121 requirements=URL_NAME_REQUIREMENTS)
1120 requirements=URL_NAME_REQUIREMENTS)
1122
1121
1123 rmap.connect('repo_followers_home', '/{repo_name}/followers',
1122 rmap.connect('repo_followers_home', '/{repo_name}/followers',
1124 controller='followers', action='followers',
1123 controller='followers', action='followers',
1125 conditions={'function': check_repo},
1124 conditions={'function': check_repo},
1126 requirements=URL_NAME_REQUIREMENTS)
1125 requirements=URL_NAME_REQUIREMENTS)
1127
1126
1128 # must be here for proper group/repo catching pattern
1127 # must be here for proper group/repo catching pattern
1129 _connect_with_slash(
1128 _connect_with_slash(
1130 rmap, 'repo_group_home', '/{group_name}',
1129 rmap, 'repo_group_home', '/{group_name}',
1131 controller='home', action='index_repo_group',
1130 controller='home', action='index_repo_group',
1132 conditions={'function': check_group},
1131 conditions={'function': check_group},
1133 requirements=URL_NAME_REQUIREMENTS)
1132 requirements=URL_NAME_REQUIREMENTS)
1134
1133
1135 # catch all, at the end
1134 # catch all, at the end
1136 _connect_with_slash(
1135 _connect_with_slash(
1137 rmap, 'summary_home', '/{repo_name}', jsroute=True,
1136 rmap, 'summary_home', '/{repo_name}', jsroute=True,
1138 controller='summary', action='index',
1137 controller='summary', action='index',
1139 conditions={'function': check_repo},
1138 conditions={'function': check_repo},
1140 requirements=URL_NAME_REQUIREMENTS)
1139 requirements=URL_NAME_REQUIREMENTS)
1141
1140
1142 rmap.jsroutes()
1143 return rmap
1141 return rmap
1144
1142
1145
1143
1146 def _connect_with_slash(mapper, name, path, *args, **kwargs):
1144 def _connect_with_slash(mapper, name, path, *args, **kwargs):
1147 """
1145 """
1148 Connect a route with an optional trailing slash in `path`.
1146 Connect a route with an optional trailing slash in `path`.
1149 """
1147 """
1150 mapper.connect(name + '_slash', path + '/', *args, **kwargs)
1148 mapper.connect(name + '_slash', path + '/', *args, **kwargs)
1151 mapper.connect(name, path, *args, **kwargs)
1149 mapper.connect(name, path, *args, **kwargs)
General Comments 0
You need to be logged in to leave comments. Login now