mirror of
https://github.com/boostorg/website-v2.git
synced 2026-02-22 16:02:09 +00:00
43 lines
1.4 KiB
Python
43 lines
1.4 KiB
Python
from libraries.path_matcher.base_path_matcher import PathMatchResult
|
|
from libraries.path_matcher.matchers import (
|
|
DirectMatcher,
|
|
LibsPathToLatestDirectMatcher,
|
|
LibsPathToLatestFallbackMatcher,
|
|
LibsToAntoraPathDirectMatcher,
|
|
DocHtmlBoostPathToFallbackMatcher,
|
|
DocHtmlPathToDirectMatcher,
|
|
DocHtmlBoostHtmlFallbackPathMatcher,
|
|
ToLibsLatestRootFallbackMatcher,
|
|
)
|
|
from libraries.utils import get_s3_client
|
|
from versions.models import Version
|
|
|
|
|
|
def get_path_match_from_chain(url: str, latest_version: Version) -> PathMatchResult:
|
|
s3_client = get_s3_client()
|
|
|
|
# matcher chain in order
|
|
matcher_classes = [
|
|
DirectMatcher,
|
|
LibsPathToLatestDirectMatcher,
|
|
LibsToAntoraPathDirectMatcher,
|
|
LibsPathToLatestFallbackMatcher,
|
|
DocHtmlBoostPathToFallbackMatcher,
|
|
DocHtmlPathToDirectMatcher,
|
|
DocHtmlBoostHtmlFallbackPathMatcher,
|
|
ToLibsLatestRootFallbackMatcher,
|
|
]
|
|
|
|
matchers = [
|
|
matcher_class(latest_version, s3_client) for matcher_class in matcher_classes
|
|
]
|
|
for current, next_matcher in zip(matchers, matchers[1:]):
|
|
current.set_next(next_matcher)
|
|
result = matchers[0].handle(test_path=url)
|
|
return result
|
|
|
|
|
|
def determine_latest_url(url: str, latest_version: Version) -> str:
|
|
match_result = get_path_match_from_chain(url, latest_version)
|
|
return match_result.latest_path
|