| 407 | |
| 408 | |
| 409 | class DynamicRoute(Route): |
| 410 | |
| 411 | def __init__(self, method, handler, name, pattern, formatter, *, |
| 412 | expect_handler=None): |
| 413 | super().__init__(method, handler, name, expect_handler=expect_handler) |
| 414 | self._pattern = pattern |
| 415 | self._formatter = formatter |
| 416 | |
| 417 | def match(self, path): |
| 418 | match = self._pattern.match(path) |
| 419 | if match is None: |
| 420 | return None |
| 421 | else: |
| 422 | return match.groupdict() |
| 423 | |
| 424 | def url(self, *, parts, query=None): |
| 425 | url = self._formatter.format_map(parts) |
| 426 | return self._append_query(url, query) |
| 427 | |
| 428 | def get_info(self): |
| 429 | return {'formatter': self._formatter, |
| 430 | 'pattern': self._pattern} |
| 431 | |
| 432 | def __repr__(self): |
| 433 | name = "'" + self.name + "' " if self.name is not None else "" |
| 434 | return ("<DynamicRoute {name}[{method}] {formatter} -> {handler!r}" |
| 435 | .format(name=name, method=self.method, |
| 436 | formatter=self._formatter, handler=self.handler)) |
| 437 | |
| 438 | |
| 439 | class StaticRoute(Route): |
no outgoing calls