diff --git a/CHANGES/+proxy-sync-regression-313.bugfix b/CHANGES/+proxy-sync-regression-313.bugfix new file mode 100644 index 00000000..7ae8a4e8 --- /dev/null +++ b/CHANGES/+proxy-sync-regression-313.bugfix @@ -0,0 +1 @@ +Fixed a proxy sync regression introduced in 3.13.0. diff --git a/pulp_python/app/tasks/sync.py b/pulp_python/app/tasks/sync.py index 213c4a7d..317f7b6b 100644 --- a/pulp_python/app/tasks/sync.py +++ b/pulp_python/app/tasks/sync.py @@ -3,9 +3,11 @@ from aiohttp import ClientResponseError, ClientError from lxml.etree import LxmlError from gettext import gettext as _ +from functools import partial from rest_framework import serializers +from pulpcore.plugin.download import HttpDownloader from pulpcore.plugin.models import Artifact, ProgressReport, Remote, Repository from pulpcore.plugin.stages import ( DeclarativeArtifact, @@ -112,11 +114,22 @@ async def run(self): """ # Bandersnatch includes leading slash when forming API urls url = self.remote.url.rstrip("/") + downloader = self.remote.get_downloader(url=url) + if not isinstance(downloader, HttpDownloader): + raise ValueError("Only HTTP(S) is supported for python syncing") + async with Master(url) as master: # Replace the session with the remote's downloader session old_session = master.session - factory = self.remote.download_factory - master.session = factory._session + master.session = downloader.session + + # Set up master.get with remote's auth & proxy settings + master.get = partial( + master.get, + auth=downloader.auth, + proxy=downloader.proxy, + proxy_auth=downloader.proxy_auth, + ) deferred_download = self.remote.policy != Remote.IMMEDIATE workers = self.remote.download_concurrency or self.remote.DEFAULT_DOWNLOAD_CONCURRENCY