MCPcopy Create free account
hub / github.com/datapane/datapane / add

Method add

python-client/src/datapane/_vendor/bottle.py:355–426  ·  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

353 yield prefix + rule[offset:], None, None
354
355 def add(self, rule, method, target, name=None):
356 """ Add a new rule or replace the target for an existing rule. """
357 anons = 0 # Number of anonymous wildcards found
358 keys = [] # Names of keys
359 pattern = '' # Regular expression pattern with named groups
360 filters = [] # Lists of wildcard input filters
361 builder = [] # Data structure for the URL builder
362 is_static = True
363
364 for key, mode, conf in self._itertokens(rule):
365 if mode:
366 is_static = False
367 if mode == 'default': mode = self.default_filter
368 mask, in_filter, out_filter = self.filters[mode](conf)
369 if not key:
370 pattern += '(?:%s)' % mask
371 key = 'anon%d' % anons
372 anons += 1
373 else:
374 pattern += '(?P<%s>%s)' % (key, mask)
375 keys.append(key)
376 if in_filter: filters.append((key, in_filter))
377 builder.append((key, out_filter or str))
378 elif key:
379 pattern += re.escape(key)
380 builder.append((None, key))
381
382 self.builder[rule] = builder
383 if name: self.builder[name] = builder
384
385 if is_static and not self.strict_order:
386 self.static.setdefault(method, {})
387 self.static[method][self.build(rule)] = (target, None)
388 return
389
390 try:
391 re_pattern = re.compile('^(%s)$' % pattern)
392 re_match = re_pattern.match
393 except re.error as e:
394 raise RouteSyntaxError("Could not add Route: %s (%s)" % (rule, e))
395
396 if filters:
397
398 def getargs(path):
399 url_args = re_match(path).groupdict()
400 for name, wildcard_filter in filters:
401 try:
402 url_args[name] = wildcard_filter(url_args[name])
403 except ValueError:
404 raise HTTPError(400, 'Path has wrong format.')
405 return url_args
406 elif re_pattern.groupindex:
407
408 def getargs(path):
409 return re_match(path).groupdict()
410 else:
411 getargs = None
412

Callers 5

commands.jsFile · 0.80
matchMethod · 0.80
all_pluginsMethod · 0.80
add_routeMethod · 0.80
_set_virtualMethod · 0.80

Calls 7

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

Tested by

no test coverage detected