|
37 | 37 | import os |
38 | 38 | import shutil |
39 | 39 | import tempfile |
40 | | -from typing import Any, Optional, Set |
| 40 | +from typing import Optional, Set |
41 | 41 | from urllib import parse |
42 | 42 |
|
43 | 43 | from tuf.api import exceptions |
@@ -275,22 +275,23 @@ def _load_local_metadata(self, rolename: str) -> bytes: |
275 | 275 |
|
276 | 276 | def _persist_metadata(self, rolename: str, data: bytes) -> None: |
277 | 277 | """Write metadata to disk atomically to avoid data loss.""" |
278 | | - temp_file: Optional[tempfile._TemporaryFileWrapper[Any]] = None |
| 278 | + temp_file_name: Optional[str] = None |
279 | 279 | try: |
280 | 280 | # encode the rolename to avoid issues with e.g. path separators |
281 | 281 | encoded_name = parse.quote(rolename, "") |
282 | 282 | filename = os.path.join(self._dir, f"{encoded_name}.json") |
283 | 283 | with tempfile.NamedTemporaryFile( |
284 | 284 | dir=self._dir, delete=False |
285 | 285 | ) as temp_file: |
| 286 | + temp_file_name = temp_file.name |
286 | 287 | temp_file.write(data) |
287 | 288 | os.replace(temp_file.name, filename) |
288 | 289 | except OSError as e: |
289 | 290 | # remove tempfile if we managed to create one, |
290 | 291 | # then let the exception happen |
291 | | - if temp_file is not None: |
| 292 | + if temp_file_name is not None: |
292 | 293 | try: |
293 | | - os.remove(temp_file.name) |
| 294 | + os.remove(temp_file_name) |
294 | 295 | except FileNotFoundError: |
295 | 296 | pass |
296 | 297 | raise e |
|
0 commit comments