Skip to content

Commit 02d90af

Browse files
committed
refactor: more ruff fixes
1 parent 538e576 commit 02d90af

File tree

11 files changed

+31
-29
lines changed

11 files changed

+31
-29
lines changed

src/mega/api.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@ def retry(
3838
exceptions: Sequence[type[Exception]] | type[Exception],
3939
attempts: int = 10,
4040
delay: float = 0.5,
41-
min_delay: float = 2.0,
4241
max_delay: float = 30.0,
4342
backoff: int = 2,
4443
) -> Callable[[Callable[_P, Coroutine[None, None, _R]]], Callable[_P, Coroutine[None, None, _R]]]:
44+
min_delay: float = 2.0
4545
if not isinstance(exceptions, Sequence):
4646
exceptions = [exceptions]
4747

@@ -198,7 +198,7 @@ async def _parse_response(response: aiohttp.ClientResponse) -> Any:
198198
if resp == -3:
199199
msg = "Request failed, retrying"
200200
logger.warning(msg)
201-
raise RetryRequestError()
201+
raise RetryRequestError
202202
raise RequestError(resp)
203203

204204
return resp

src/mega/cli/__init__.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ def verbose(
4646
callback=verbose,
4747
help=(
4848
"CLI app for the [bold black]Mega.nz[/bold black] and [bold black]Transfer.it[/bold black].\n"
49-
f"Set [bold green]{env.EMAIL.name}[/bold green] and [bold green]{env.PASSWORD.name}[/bold green] enviroment variables to use them as credentials for Mega"
49+
f"Set [bold green]{env.EMAIL.name}[/bold green] and [bold green]{env.PASSWORD.name}[/bold green]\n"
50+
"enviroment variables to use them as credentials for Mega"
5051
),
5152
epilog=f"v{__version__}",
5253
)
@@ -82,8 +83,9 @@ async def download(url: str, output_dir: Path = CWD) -> None:
8283
async with connect() as mega:
8384
parsed_url = mega.parse_url(url)
8485
if parsed_url.is_folder:
85-
return await download_folder(mega, url, output_dir)
86-
await download_file(mega, url, output_dir)
86+
await download_folder(mega, url, output_dir)
87+
else:
88+
await download_file(mega, url, output_dir)
8789

8890

8991
@app.command()

src/mega/download.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,8 @@ async def stream(stream: aiohttp.StreamReader, output_path: Path, file_size: int
9999

100100
@contextlib.asynccontextmanager
101101
async def _new_temp_download(output_path: Path) -> AsyncGenerator[IO[bytes]]:
102-
# We need NamedTemporaryFile to not delete on file.close() but on context exit, which is not supported until python 3.12
102+
# We need the file to not be delete on file.close() but on context exit,
103+
# But NamedTemporaryFile does not supports this until python 3.12
103104
temp_file = await asyncio.to_thread(tempfile.NamedTemporaryFile, prefix="mega_py_", delete=False)
104105
logger.debug(f'Created temp file "{temp_file.name!s}" for "{output_path!s}"')
105106
try:

src/mega/progress/__init__.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,14 @@
33
import asyncio
44
import contextlib
55
from contextvars import ContextVar
6-
from typing import TYPE_CHECKING, Any, Literal, Protocol, TypeAlias, TypeVar
6+
from typing import TYPE_CHECKING, Any, Literal, Protocol, TypeAlias
77

88
if TYPE_CHECKING:
99
from collections.abc import Callable, Generator
1010
from types import TracebackType
1111

1212
from rich.progress import Progress
1313

14-
_T = TypeVar("_T")
15-
1614
ProgressHook: TypeAlias = Callable[[float], None]
1715

1816
class ProgressHookContext(Protocol):

src/mega/utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,12 @@ def log() -> Generator[None, float]:
7474
kind = "downloaded" if download else "uploaded"
7575
human_total = ByteSize(file_size).human_readable()
7676
last_log_size = 0
77-
_50MB = 1024 * 1024 * 50
77+
_50mb = 1024 * 1024 * 50
7878
while True:
7979
chunk_size: float = yield
8080
bytes_uploaded += chunk_size
8181
ratio: float = (bytes_uploaded / file_size) * 100
82-
if ratio >= threshold or (bytes_uploaded - last_log_size) > _50MB:
82+
if ratio >= threshold or (bytes_uploaded - last_log_size) > _50mb:
8383
human_progress = ByteSize(bytes_uploaded).human_readable()
8484
threshold = ((ratio // 10) + 1) * 10
8585
last_log_size = bytes_uploaded

src/mega/vault.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
class MegaVault:
1818
master_key: tuple[int, ...] = ()
1919

20-
# This is a mapping of owner (user_id) to shared keys. An special owner "EXP" is used for exported (AKA public) file/folders
2120
shared_keys: dict[UserID, SharedKeys] = dataclasses.field(default_factory=dict, repr=False)
21+
# An special owner "EXP" is used for exported (AKA public) file/folders
2222

2323
def __getitem__(self, node: Node) -> tuple[tuple[int, ...], tuple[int, ...] | None]:
2424
return self.get_keys(node)

tests/test_chunker.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55

66
@pytest.mark.parametrize(
7-
"file_size, exp_result",
7+
("file_size", "exp_result"),
88
[
99
(
1010
0,

tests/test_crypto.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77

88
@pytest.mark.parametrize(
9-
"attrs, key, expected_output",
9+
("attrs", "key", "expected_output"),
1010
[
1111
(
1212
b'\xb6E[\xe6K\xbd\xf9\t\x95\x1d\xcb\xe9\xa3N\x13 \xbb\xf3\x15\xf9H\xb7\x11\xe8\xec\\\x92"\x1d\xb45ia\xaf\x89v\xa5\xab\xd3\xb1\xa8Y\xbb\xe0\x81g\x8e\x19\x1b\xf5b\xa8\x1f`\x9d\x05b<\x13\x7fM\x07\xe0\xea',
@@ -24,7 +24,7 @@ def test_decrypt_attr(attrs: bytes, key: tuple[int, ...], expected_output: dict[
2424

2525

2626
@pytest.mark.parametrize(
27-
"blob,expected",
27+
("blob", "expected"),
2828
[
2929
(b"\x00\x00\x00", 0),
3030
(b"\x00\x08\xff", 255),
@@ -36,7 +36,7 @@ def test_mpi(blob: bytes, expected: int) -> None:
3636

3737

3838
@pytest.mark.parametrize(
39-
"input,expected",
39+
("input", "expected"),
4040
[
4141
(
4242
"1:192:1769956228:atNinVpwMnq2sgu6r3UXgd6TSZFJyi2GwOO_OC7hcUJTpKfMMJmKKPrAgxp8F5xj",

tests/test_errors.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55

66
@pytest.mark.parametrize(
7-
"code, exp_message",
7+
("code", "exp_message"),
88
[(code, f"{desc[0]}, {desc[1]}") for code, desc in _CODE_TO_DESCRIPTIONS.items()],
99
)
1010
def test_request_error(code: int, exp_message: str) -> None:

tests/test_mega.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from mega.api import MegaAPI
1414
from mega.client import MegaNzClient
1515
from mega.data_structures import AccountBalance, AccountStats, Node, NodeType, StorageQuota
16-
from mega.errors import MultipleNodesFoundError, RequestError, RetryRequestError
16+
from mega.errors import MultipleNodesFoundError, RequestError, RetryRequestError, ValidationError
1717
from mega.filesystem import UserFileSystem
1818
from mega.utils import setup_logger, str_utc_now
1919

@@ -50,15 +50,15 @@ async def connect_to_mega(folder_name: str, http_client: aiohttp.ClientSession)
5050

5151

5252
@pytest.fixture
53-
async def folder(mega: MegaNzClient, folder_name: str) -> AsyncGenerator[Node]:
53+
async def folder(mega: MegaNzClient, folder_name: str) -> Node:
5454
node = await mega.find(folder_name)
5555
assert node
5656
assert node.type is NodeType.FOLDER
5757
return node
5858

5959

6060
@pytest.fixture
61-
async def uploaded_file(mega: MegaNzClient, folder_name: str, folder: Node) -> AsyncGenerator[Node]:
61+
async def uploaded_file(mega: MegaNzClient, folder_name: str, folder: Node) -> Node:
6262
await mega.upload(TEST_FILE, folder.id)
6363
path = f"{folder_name}/{TEST_FILE.name}"
6464
node = await mega.find(path)
@@ -252,7 +252,7 @@ async def test_upload_and_download(mega: MegaNzClient, tmp_path: Path, folder_na
252252
output_path = await mega.download(node, tmp_path)
253253
assert output_path.parent == tmp_path
254254
assert output_path.is_file()
255-
assert output_path.read_text() == TEST_FILE.read_text()
255+
assert output_path.read_text() == await asyncio.to_thread(TEST_FILE.read_text)
256256

257257

258258
async def test_empty_trash(mega: MegaNzClient) -> None:
@@ -271,7 +271,7 @@ async def test_remove_contact(mega: MegaNzClient) -> None:
271271

272272

273273
@pytest.mark.parametrize(
274-
"url, expected",
274+
("url", "expected"),
275275
[
276276
(
277277
"https://mega.nz/#!Ue5VRSIQ!kC2E4a4JwfWWCWYNJovGFHlbz8FN-ISsBAGPzvTjT6k",
@@ -294,14 +294,14 @@ def test_parse_url(url: str, expected: tuple[str, str]) -> None:
294294
],
295295
)
296296
def test_parse_file_url_raise_value_error_for_file_urls(url: str) -> None:
297-
with pytest.raises(ValueError) as e:
297+
with pytest.raises(ValidationError) as e:
298298
MegaNzClient.parse_file_url(url)
299299

300300
assert "This is a folder URL" in str(e)
301301

302302

303303
@pytest.mark.parametrize(
304-
"url, expected",
304+
("url", "expected"),
305305
[
306306
(
307307
"https://mega.nz/#F!Ue5VRSIQ!kC2E4a4JwfWWCWYNJovGFHlbz8FN-ISsBAGPzvTjT6k",
@@ -332,7 +332,7 @@ def test_parse_folder_url(url: str, expected: tuple[str, str]) -> None:
332332
],
333333
)
334334
def test_parse_folder_url_raise_value_error_for_file_urls(url: str) -> None:
335-
with pytest.raises(ValueError) as e:
335+
with pytest.raises(ValidationError) as e:
336336
MegaNzClient.parse_folder_url(url)
337337

338338
assert "This is a file URL" in str(e)
@@ -358,7 +358,7 @@ async def test_when_api_returns_negative_3_raise_retry_error(self, value: Any) -
358358
await MegaAPI._parse_response(self._fake_resp(value))
359359

360360
@pytest.mark.parametrize(
361-
"value, expected",
361+
("value", "expected"),
362362
[
363363
({"a": "b"}, {"a": "b"}),
364364
(["a", "b"], ["a", "b"]),

0 commit comments

Comments
 (0)