Skip to content

Commit 1fe7383

Browse files
committed
Have bandersnatch sync use remote's download session
1 parent 0f92af4 commit 1fe7383

File tree

1 file changed

+9
-39
lines changed

1 file changed

+9
-39
lines changed

pulp_python/app/tasks/sync.py

Lines changed: 9 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
11
import logging
2-
import tempfile
3-
from typing import Optional, Any, AsyncGenerator
42

5-
import aiohttp
63
from aiohttp import ClientResponseError, ClientError
74
from lxml.etree import LxmlError
85
from gettext import gettext as _
9-
from os import environ
106

117
from rest_framework import serializers
128

@@ -29,7 +25,7 @@
2925
from bandersnatch.master import Master
3026
from bandersnatch.configuration import BandersnatchConfig
3127
from packaging.requirements import Requirement
32-
from urllib.parse import urljoin, urlsplit, urlunsplit
28+
from urllib.parse import urljoin
3329

3430
logger = logging.getLogger(__name__)
3531

@@ -114,23 +110,14 @@ async def run(self):
114110
"""
115111
If includes is specified, then only sync those,else try to sync all other packages
116112
"""
117-
# Prevent bandersnatch from reading actual .netrc file, set to empty file
118-
# See discussion on https://github.com/pulp/pulp_python/issues/581
119-
fake_netrc = tempfile.NamedTemporaryFile(dir=".", delete=False)
120-
environ["NETRC"] = fake_netrc.name
121-
# TODO Change Bandersnatch internal API to take proxy settings in from config parameters
122-
if proxy_url := self.remote.proxy_url:
123-
if self.remote.proxy_username or self.remote.proxy_password:
124-
parsed_proxy = urlsplit(proxy_url)
125-
creds = f"{self.remote.proxy_username}:{self.remote.proxy_password}"
126-
netloc = f"{creds}@{parsed_proxy.netloc}"
127-
proxy_url = urlunsplit((parsed_proxy.scheme, netloc, "", "", ""))
128-
environ['http_proxy'] = proxy_url
129-
environ['https_proxy'] = proxy_url
130113
# Bandersnatch includes leading slash when forming API urls
131114
url = self.remote.url.rstrip("/")
132-
# local & global timeouts defaults to 10secs and 5 hours
133-
async with PulpMaster(url, tls=self.remote.tls_validation) as master:
115+
async with Master(url) as master:
116+
# Replace the session with the remote's downloader session
117+
old_session = master.session
118+
factory = self.remote.download_factory
119+
master.session = factory._session
120+
134121
deferred_download = self.remote.policy != Remote.IMMEDIATE
135122
workers = self.remote.download_concurrency or self.remote.DEFAULT_DOWNLOAD_CONCURRENCY
136123
async with ProgressReport(
@@ -150,25 +137,8 @@ async def run(self):
150137
Requirement(pkg).name for pkg in self.remote.includes
151138
]
152139
await pmirror.synchronize(packages_to_sync)
153-
154-
155-
class PulpMaster(Master):
156-
"""
157-
Pulp Master Class for Pulp specific overrides
158-
"""
159-
160-
def __init__(self, *args, tls=True, **kwargs):
161-
self.tls = tls
162-
super().__init__(*args, **kwargs)
163-
164-
async def get(
165-
self, path: str, required_serial: Optional[int], **kw: Any
166-
) -> AsyncGenerator[aiohttp.ClientResponse, None]:
167-
"""Support tls=false"""
168-
if not self.tls:
169-
kw["ssl"] = False
170-
async for r in super().get(path, required_serial, **kw):
171-
yield r
140+
# place back old session so that it is properly closed
141+
master.session = old_session
172142

173143

174144
class PulpMirror(Mirror):

0 commit comments

Comments
 (0)