MCPcopy Index your code
hub / github.com/pyload/pyload / add

Method add

module/lib/bottle.py:327–389  ·  view source on GitHub ↗

Add a new route or replace the target for an existing route.

(self, rule, method, target, name=None)

Source from the content-addressed store, hash-verified

325 yield prefix+rule[offset:], None, None
326
327 def add(self, rule, method, target, name=None):
328 ''' Add a new route or replace the target for an existing route. '''
329 if rule in self.rules:
330 self.rules[rule][method] = target
331 if name: self.builder[name] = self.builder[rule]
332 return
333
334 target = self.rules[rule] = {method: target}
335
336 # Build pattern and other structures for dynamic routes
337 anons = 0 # Number of anonymous wildcards
338 pattern = '' # Regular expression pattern
339 filters = [] # Lists of wildcard input filters
340 builder = [] # Data structure for the URL builder
341 is_static = True
342 for key, mode, conf in self.parse_rule(rule):
343 if mode:
344 is_static = False
345 mask, in_filter, out_filter = self.filters[mode](conf)
346 if key:
347 pattern += '(?P<%s>%s)' % (key, mask)
348 else:
349 pattern += '(?:%s)' % mask
350 key = 'anon%d' % anons; anons += 1
351 if in_filter: filters.append((key, in_filter))
352 builder.append((key, out_filter or str))
353 elif key:
354 pattern += re.escape(key)
355 builder.append((None, key))
356 self.builder[rule] = builder
357 if name: self.builder[name] = builder
358
359 if is_static and not self.strict_order:
360 self.static[self.build(rule)] = target
361 return
362
363 def fpat_sub(m):
364 return m.group(0) if len(m.group(1)) % 2 else m.group(1) + '(?:'
365 flat_pattern = re.sub(r'(\\*)(\(\?P<[^>]*>|\((?!\?))', fpat_sub, pattern)
366
367 try:
368 re_match = re.compile('^(%s)$' % pattern).match
369 except re.error, e:
370 raise RouteSyntaxError("Could not add Route: %s (%s)" % (rule, e))
371
372 def match(path):
373 """ Return an url-argument dictionary. """
374 url_args = re_match(path).groupdict()
375 for name, wildcard_filter in filters:
376 try:
377 url_args[name] = wildcard_filter(url_args[name])
378 except ValueError:
379 raise HTTPError(400, 'Path has wrong format.')
380 return url_args
381
382 try:
383 combined = '%s|(^%s$)' % (self.dynamic[-1][0].pattern, flat_pattern)
384 self.dynamic[-1] = (re.compile(combined), self.dynamic[-1][1])

Callers 15

_downloadMethod · 0.45
all_pluginsMethod · 0.45
decoratorMethod · 0.45
wrapperMethod · 0.45
readContainerSetMethod · 0.45
list_templatesMethod · 0.45
babel_extractFunction · 0.45
internalcodeFunction · 0.45
add_specialMethod · 0.45
visit_FilterMethod · 0.45
visit_TestMethod · 0.45
visit_NameMethod · 0.45

Calls 6

parse_ruleMethod · 0.95
buildMethod · 0.95
RouteSyntaxErrorClass · 0.85
escapeMethod · 0.80
compileMethod · 0.80
appendMethod · 0.45

Tested by 1

test_markup_leaksMethod · 0.36