Parses a rule into a (name, filter, conf) token stream. If mode is None, name contains a static rule part.
(self, rule)
| 306 | self.filters[name] = func |
| 307 | |
| 308 | def parse_rule(self, rule): |
| 309 | ''' Parses a rule into a (name, filter, conf) token stream. If mode is |
| 310 | None, name contains a static rule part. ''' |
| 311 | offset, prefix = 0, '' |
| 312 | for match in self.rule_syntax.finditer(rule): |
| 313 | prefix += rule[offset:match.start()] |
| 314 | g = match.groups() |
| 315 | if len(g[0])%2: # Escaped wildcard |
| 316 | prefix += match.group(0)[len(g[0]):] |
| 317 | offset = match.end() |
| 318 | continue |
| 319 | if prefix: yield prefix, None, None |
| 320 | name, filtr, conf = g[1:4] if not g[2] is None else g[4:7] |
| 321 | if not filtr: filtr = self.default_filter |
| 322 | yield name, filtr, conf or None |
| 323 | offset, prefix = match.end(), '' |
| 324 | if offset <= len(rule) or prefix: |
| 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. ''' |