Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions apps/api/app/services/document_ingestion/creation_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from dataclasses import dataclass
from datetime import datetime, timezone
from typing import cast
from urllib.parse import urlparse
from urllib.parse import unquote, urlparse

from app.repositories.job_repository import JobRepository
from app.services.document_ingestion.command import DocumentIngestionCommand
Expand Down Expand Up @@ -308,7 +308,7 @@ def _build_job_response(

def _resolve_url_source_file_name(*, source_url: str, file_extension: str) -> str:
parsed_url = urlparse(source_url)
url_basename = str(os.path.basename(parsed_url.path))
url_basename = unquote(str(os.path.basename(parsed_url.path)))
if url_basename and os.path.splitext(url_basename)[1].lower() == file_extension:
return url_basename
if url_basename:
Expand Down
18 changes: 18 additions & 0 deletions apps/api/tests/unit/test_document_ingestion_filename.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from app.services.document_ingestion.creation_service import (
_resolve_url_source_file_name,
)


def test_resolve_url_source_file_name_decodes_percent_encoded_path() -> None:
source_url = (
"https://files.example.test/"
"%E4%B8%AD%E6%96%87%E7%AE%80%E5%8E%86-%E9%9B%B7%E7%BF%94-"
"%E4%B8%AD%E7%A7%91%E9%99%A2%285%29.doc"
)

source_file_name = _resolve_url_source_file_name(
source_url=source_url,
file_extension=".doc",
)

assert source_file_name == "中文简历-雷翔-中科院(5).doc"
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

import os
from dataclasses import dataclass
from urllib.parse import unquote

from app.services.common.file_utils import path_handle
from app.services.document_parser.support.filename_limits import (
Expand All @@ -27,6 +28,7 @@ def normalize_internal_parse_name(
candidate_name = (
os.path.basename(filename) if isinstance(filename, str) and filename else ""
)
candidate_name = unquote(candidate_name)
cleaned_name = (
path_handle(candidate_name, mode="clean_single") if candidate_name else ""
)
Expand Down
12 changes: 12 additions & 0 deletions apps/worker/tests/unit/test_internal_parse_name.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,22 @@
from pathlib import Path

from app.services.document_parser.support.internal_parse_name import (
normalize_internal_parse_name,
prepare_internal_parse_input,
)


def test_normalize_internal_parse_name_decodes_url_encoded_filename() -> None:
encoded_filename = (
"%E4%B8%AD%E6%96%87%E7%AE%80%E5%8E%86-%E9%9B%B7%E7%BF%94-"
"%E4%B8%AD%E7%A7%91%E9%99%A2%285%29.doc"
)

normalized_name = normalize_internal_parse_name(encoded_filename)

assert normalized_name == "中文简历-雷翔-中科院-5-.doc"


def test_prepare_internal_parse_input_handles_long_encoded_filename(
tmp_path,
) -> None:
Expand Down
Loading