MCPcopy Index your code
hub / github.com/fluentpython/example-code-2e / add

Method add

21-async/mojifinder/bottle.py:324–392  ·  view source on GitHub ↗

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

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

Source from the content-addressed store, hash-verified

322 yield prefix+rule[offset:], None, None
323
324 def add(self, rule, method, target, name=None):
325 ''' Add a new rule or replace the target for an existing rule. '''
326 anons = 0 # Number of anonymous wildcards found
327 keys = [] # Names of keys
328 pattern = '' # Regular expression pattern with named groups
329 filters = [] # Lists of wildcard input filters
330 builder = [] # Data structure for the URL builder
331 is_static = True
332
333 for key, mode, conf in self._itertokens(rule):
334 if mode:
335 is_static = False
336 if mode == 'default': mode = self.default_filter
337 mask, in_filter, out_filter = self.filters[mode](conf)
338 if not key:
339 pattern += '(?:%s)' % mask
340 key = 'anon%d' % anons
341 anons += 1
342 else:
343 pattern += '(?P<%s>%s)' % (key, mask)
344 keys.append(key)
345 if in_filter: filters.append((key, in_filter))
346 builder.append((key, out_filter or str))
347 elif key:
348 pattern += re.escape(key)
349 builder.append((None, key))
350
351 self.builder[rule] = builder
352 if name: self.builder[name] = builder
353
354 if is_static and not self.strict_order:
355 self.static.setdefault(method, {})
356 self.static[method][self.build(rule)] = (target, None)
357 return
358
359 try:
360 re_pattern = re.compile('^(%s)$' % pattern)
361 re_match = re_pattern.match
362 except re.error:
363 raise RouteSyntaxError("Could not add Route: %s (%s)" % (rule, _e()))
364
365 if filters:
366 def getargs(path):
367 url_args = re_match(path).groupdict()
368 for name, wildcard_filter in filters:
369 try:
370 url_args[name] = wildcard_filter(url_args[name])
371 except ValueError:
372 raise HTTPError(400, 'Path has wrong format.')
373 return url_args
374 elif re_pattern.groupindex:
375 def getargs(path):
376 return re_match(path).groupdict()
377 else:
378 getargs = None
379
380 flatpat = _re_flatten(pattern)
381 whole_rule = (rule, flatpat, target, getargs)

Callers 11

__post_init__Method · 0.80
__post_init__Method · 0.80
expand_cc_argsFunction · 0.80
decorateFunction · 0.80
name_indexFunction · 0.80
__init__Method · 0.80
matchMethod · 0.80
all_pluginsMethod · 0.80
add_routeMethod · 0.80
write_jsonFunction · 0.80

Calls 8

_itertokensMethod · 0.95
buildMethod · 0.95
_compileMethod · 0.95
RouteSyntaxErrorClass · 0.85
_eFunction · 0.85
_re_flattenFunction · 0.85
setdefaultMethod · 0.80
appendMethod · 0.45

Tested by

no test coverage detected