| 514 | |
| 515 | |
| 516 | class _FakeFileInterface: |
| 517 | def __init__(self, devbox: _FakeDevbox) -> None: |
| 518 | self._devbox = devbox |
| 519 | |
| 520 | def _file_key(self, path: str) -> str: |
| 521 | normalized = PurePosixPath(path) |
| 522 | home = PurePosixPath(self._devbox.home_dir) |
| 523 | try: |
| 524 | relative = normalized.relative_to(home) |
| 525 | except ValueError: |
| 526 | return normalized.as_posix() |
| 527 | rel_str = relative.as_posix() |
| 528 | return rel_str if rel_str else "." |
| 529 | |
| 530 | async def download(self, *, path: str, timeout: float | None = None, **_: object) -> bytes: |
| 531 | del timeout |
| 532 | self._devbox.file_download_paths.append(path) |
| 533 | key = self._file_key(path) |
| 534 | if key not in self._devbox.files: |
| 535 | raise _FakeNotFoundError(path) |
| 536 | return self._devbox.files[key] |
| 537 | |
| 538 | async def upload( |
| 539 | self, |
| 540 | *, |
| 541 | path: str, |
| 542 | file: bytes, |
| 543 | timeout: float | None = None, |
| 544 | **_: object, |
| 545 | ) -> object: |
| 546 | del timeout |
| 547 | self._devbox.file_upload_paths.append(path) |
| 548 | self._devbox.files[self._file_key(path)] = bytes(file) |
| 549 | return {} |
| 550 | |
| 551 | |
| 552 | class _FakeNetworkInterface: |