Source code for jivago.config.router.filtering.filtering_rule

import re
from typing import List, Union, Type

from jivago.config.router.router_config_rule import RouterConfigRule
from jivago.inject.service_locator import ServiceLocator
from jivago.lang.stream import Stream
from jivago.wsgi.filter.filter import Filter


[docs] class FilteringRule(RouterConfigRule): def __init__(self, url_pattern: str, filters: List[Union[Filter, Type[Filter]]], regex_pattern: str = None): self.filters = filters self.regex_matcher = re.compile("^" + url_pattern.replace(".", "\.").replace("*", ".*") + "$") \ if regex_pattern is None else re.compile(regex_pattern)
[docs] def matches(self, path: str) -> bool: return self.regex_matcher.search(path) is not None
[docs] def get_filters(self, service_locator: ServiceLocator) -> List[Filter]: return Stream(self.filters).map(lambda f: f if isinstance(f, Filter) else service_locator.get(f)).toList()