Skip to content

Commit

Permalink
Fix URL encoding issue in pulp_file
Browse files Browse the repository at this point in the history
closes pulp#5686
  • Loading branch information
sbernhard committed Sep 24, 2024
1 parent 5adb873 commit 66f87e3
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 2 deletions.
1 change: 1 addition & 0 deletions CHANGES/5686.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Quote the URL path of pulp_file files.
4 changes: 2 additions & 2 deletions pulp_file/app/tasks/synchronizing.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import os

from gettext import gettext as _
from urllib.parse import urlparse, urlunparse
from urllib.parse import quote, urlparse, urlunparse

from django.core.files import File

Expand Down Expand Up @@ -114,7 +114,7 @@ async def run(self):

for entry in entries:
path = os.path.join(root_dir, entry.relative_path)
url = urlunparse(parsed_url._replace(path=path))
url = urlunparse(parsed_url._replace(path=quote(path, safe=":/")))
file = FileContent(relative_path=entry.relative_path, digest=entry.digest)
artifact = Artifact(size=entry.size, sha256=entry.digest)
da = DeclarativeArtifact(
Expand Down
10 changes: 10 additions & 0 deletions pulp_file/pytest_plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,16 @@ def basic_manifest_path(write_3_iso_file_fixture_data_factory):
return write_3_iso_file_fixture_data_factory("basic")


@pytest.fixture
def encoded_manifest_path(file_fixtures_root):
file_fixtures_root.joinpath("encoded").mkdir()
file1 = generate_iso(file_fixtures_root.joinpath("encoded/long-name-%253a-encoded.iso"))
file2 = generate_iso(file_fixtures_root.joinpath("encoded/another-%25-encoded.iso"))
file3 = generate_iso(file_fixtures_root.joinpath("encoded/more-%3C-encoded.iso"))
generate_manifest(file_fixtures_root.joinpath("encoded/PULP_MANIFEST"), [file1, file2, file3])
return "/encoded/PULP_MANIFEST"


@pytest.fixture
def copy_manifest_only_factory(file_fixtures_root):
def _copy_manifest_only(name):
Expand Down
15 changes: 15 additions & 0 deletions pulp_file/tests/functional/api/test_sync.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,21 @@ def test_duplicate_file_sync(
assert file_repo.latest_version_href.endswith("/2/")


@pytest.mark.parallel
def test_encoded_file_name(
file_repo, file_bindings, encoded_manifest_path, file_remote_factory, monitor_task
):
remote = file_remote_factory(manifest_path=encoded_manifest_path, policy="immediate")
body = RepositorySyncURL(remote=remote.pulp_href)
monitor_task(file_bindings.RepositoriesFileApi.sync(file_repo.pulp_href, body).task)
file_repo = file_bindings.RepositoriesFileApi.read(file_repo.pulp_href)

version = file_bindings.RepositoriesFileVersionsApi.read(file_repo.latest_version_href)
assert version.content_summary.present["file.file"]["count"] == 3
assert version.content_summary.added["file.file"]["count"] == 3
assert file_repo.latest_version_href.endswith("/1/")


@pytest.mark.parallel
def test_filepath_includes_commas(
file_bindings,
Expand Down

0 comments on commit 66f87e3

Please sign in to comment.