Skip to content

Commit b8b0c2b

Browse files
committed
use context.temp_queue to download artifacts
This will break if `context.temp_queue` is None.
1 parent da8e6df commit b8b0c2b

File tree

5 files changed

+36
-13
lines changed

5 files changed

+36
-13
lines changed

src/scriptworker/artifacts.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -207,9 +207,9 @@ def get_artifact_url(context, task_id, path):
207207
208208
"""
209209
if path.startswith("public/"):
210-
url = context.queue.buildUrl("getLatestArtifact", task_id, path)
210+
url = context.temp_queue.buildUrl("getLatestArtifact", task_id, path)
211211
else:
212-
url = context.queue.buildSignedUrl(
212+
url = context.temp_queue.buildSignedUrl(
213213
"getLatestArtifact",
214214
task_id,
215215
path,

src/scriptworker/context.py

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,6 @@ class Context(object):
4949
containing the scriptworker credentials.
5050
session (aiohttp.ClientSession): the default aiohttp session
5151
task (dict): the task definition for the current task.
52-
temp_queue (taskcluster.aio.Queue): the taskcluster Queue object
53-
containing the task-specific temporary credentials.
5452
5553
"""
5654

@@ -60,8 +58,8 @@ class Context(object):
6058
queue: Optional[Queue] = None
6159
session: Optional[aiohttp.ClientSession] = None
6260
task: Optional[Dict[str, Any]] = None
63-
temp_queue: Optional[Queue] = None
6461
running_tasks = None
62+
_temp_queue = None
6563
_download_semaphore = None
6664
_credentials: Optional[Dict[str, Any]] = None
6765
_claim_task: Optional[Dict[str, Any]] = None # This assumes a single task per worker.
@@ -185,7 +183,10 @@ def temp_credentials(self) -> Optional[Dict[str, Any]]:
185183
@temp_credentials.setter
186184
def temp_credentials(self, credentials: Optional[Dict[str, Any]]) -> None:
187185
self._temp_credentials = credentials
188-
self.temp_queue = self.create_queue(self.temp_credentials)
186+
if credentials is not None:
187+
self.temp_queue = self.create_queue(self.temp_credentials)
188+
else:
189+
self.temp_queue = None
189190

190191
def write_json(self, path: str, contents: Dict[str, Any], message: str) -> None:
191192
"""Write json to disk.
@@ -232,6 +233,22 @@ def event_loop(self) -> asyncio.AbstractEventLoop:
232233
def event_loop(self, event_loop: asyncio.AbstractEventLoop) -> None:
233234
self._event_loop = event_loop
234235

236+
@property
237+
def temp_queue(self):
238+
"""dict: The queue for the current task.
239+
240+
These will have different sets of scopes than the worker queue.
241+
242+
"""
243+
if self._temp_queue:
244+
return self._temp_queue
245+
else:
246+
return self.queue
247+
248+
@temp_queue.setter
249+
def temp_queue(self, queue):
250+
self._temp_queue = queue
251+
235252
async def populate_projects(self, force: bool = False) -> None:
236253
"""Download the ``projects.yml`` file and populate ``self.projects``.
237254

tests/test_artifacts.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -183,10 +183,10 @@ def buildSignedUrl(*args, **kwargs):
183183
return expected
184184

185185
context = mock.MagicMock()
186-
context.queue = mock.MagicMock()
187-
context.queue.options = {"baseUrl": "https://netloc/"}
188-
context.queue.buildUrl = buildUrl
189-
context.queue.buildSignedUrl = buildSignedUrl
186+
context.temp_queue = mock.MagicMock()
187+
context.temp_queue.options = {"baseUrl": "https://netloc/"}
188+
context.temp_queue.buildUrl = buildUrl
189+
context.temp_queue.buildSignedUrl = buildSignedUrl
190190
assert get_artifact_url(context, "x", path) == expected
191191

192192

tests/test_context.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,12 @@ def test_temp_queue(rw_context, mocker):
8585
assert taskcluster.aio.Queue.called_once_with(
8686
options={"rootUrl": rw_context.config["taskcluster_root_url"], "credentials": rw_context.temp_credentials}, session=rw_context.session
8787
)
88+
assert rw_context._temp_queue is not None
89+
rw_context.temp_queue = None
90+
fake_queue = mocker.MagicMock()
91+
rw_context.queue = fake_queue
92+
assert rw_context._temp_queue is None
93+
assert rw_context.temp_queue is fake_queue
8894

8995

9096
@pytest.mark.asyncio

tests/test_integration.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,8 @@ async def get_temp_creds_context(config_override=None):
145145
yield context
146146

147147

148-
async def create_task(context, task_id, task_group_id):
149-
payload = integration_create_task_payload(context.config, task_group_id)
148+
async def create_task(context, task_id, task_group_id, **kwargs):
149+
payload = integration_create_task_payload(context.config, task_group_id, **kwargs)
150150
return await context.queue.createTask(task_id, payload)
151151

152152

@@ -328,7 +328,7 @@ async def test_private_artifacts(context_function):
328328
task_group_id = task_id = slugid.nice()
329329
override = {"task_script": ("bash", "-c", ">&2 echo")}
330330
async with context_function(override) as context:
331-
result = await create_task(context, task_id, task_group_id)
331+
result = await create_task(context, task_id, task_group_id, scopes=["queue:get-artifact:SampleArtifacts/_/X.txt"])
332332
assert result["status"]["state"] == "pending"
333333
path = os.path.join(context.config["artifact_dir"], "SampleArtifacts/_/X.txt")
334334
utils.makedirs(os.path.dirname(path))

0 commit comments

Comments
 (0)