mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-07-11 22:25:41 +08:00
51 lines
1.8 KiB
Python
51 lines
1.8 KiB
Python
|
|
#
|
|||
|
|
# Copyright 2026 The InfiniFlow Authors. All Rights Reserved.
|
|||
|
|
#
|
|||
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|||
|
|
# you may not use this file except in compliance with the License.
|
|||
|
|
# You may obtain a copy of the License at
|
|||
|
|
#
|
|||
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|||
|
|
#
|
|||
|
|
# Unless required by applicable law or agreed to in writing, software
|
|||
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|||
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|||
|
|
# See the License for the specific language governing permissions and
|
|||
|
|
# limitations under the License.
|
|||
|
|
#
|
|||
|
|
import re
|
|||
|
|
from urllib.parse import urlparse, urlunparse
|
|||
|
|
|
|||
|
|
|
|||
|
|
def ensure_v1(url: str) -> str:
|
|||
|
|
"""Ensure the URL ends with a versioned path segment like ``/v1``.
|
|||
|
|
|
|||
|
|
If the path already contains a segment matching ``v{digit}`` (e.g. ``/v1``,
|
|||
|
|
``/v2``, ``/v3``), the URL is returned unchanged. Otherwise the base host
|
|||
|
|
is kept and ``/v1`` is appended.
|
|||
|
|
|
|||
|
|
Examples::
|
|||
|
|
|
|||
|
|
>>> ensure_v1("https://api.example.com")
|
|||
|
|
'https://api.example.com/v1'
|
|||
|
|
>>> ensure_v1("https://api.example.com/v1")
|
|||
|
|
'https://api.example.com/v1'
|
|||
|
|
>>> ensure_v1("https://api.example.com/v2/chat")
|
|||
|
|
'https://api.example.com/v2/chat'
|
|||
|
|
>>> ensure_v1("https://api.example.com/api/v3")
|
|||
|
|
'https://api.example.com/api/v3'
|
|||
|
|
"""
|
|||
|
|
if not url:
|
|||
|
|
return url
|
|||
|
|
|
|||
|
|
parsed = urlparse(url)
|
|||
|
|
path = parsed.path.rstrip("/")
|
|||
|
|
|
|||
|
|
# Check if any path segment matches v{digit}, e.g. /v1, /v2, /v3
|
|||
|
|
if re.search(r"/v\d+(?:/|$)", path + "/"):
|
|||
|
|
return url
|
|||
|
|
|
|||
|
|
# No versioned segment found – append /v1
|
|||
|
|
new_path = (path + "/v1") if path else "/v1"
|
|||
|
|
return urlunparse((parsed.scheme, parsed.netloc, new_path, parsed.params, parsed.query, parsed.fragment))
|