Skip to content

Commit fbcbe76

Browse files
Replace obsolete types (#176)
The tool `pyupgrade` was used to modernize the code base given that frequenz-channels is already using python 3.11 as minimum version. The tool was mainly used to replace obsolete types. Also `black` and `isort` tools were both run to format the code base after running `pyupgrade`. Related to frequenz-floss/frequenz-sdk-python#433
2 parents 47c7749 + 9bb2af5 commit fbcbe76

File tree

15 files changed

+36
-42
lines changed

15 files changed

+36
-42
lines changed

benchmarks/benchmark_anycast.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
import asyncio
77
import csv
88
import timeit
9-
from typing import Any, Coroutine, Dict, List, Tuple
9+
from collections.abc import Coroutine
10+
from typing import Any
1011

1112
from frequenz.channels import Anycast, Receiver, Sender
1213

@@ -40,7 +41,7 @@ async def benchmark_anycast(
4041
Returns:
4142
int: Total number of messages received by all channels.
4243
"""
43-
channels: List[Anycast[int]] = [Anycast(buffer_size) for _ in range(num_channels)]
44+
channels: list[Anycast[int]] = [Anycast(buffer_size) for _ in range(num_channels)]
4445
senders = [
4546
asyncio.create_task(send_msg(num_messages, bcast.new_sender()))
4647
for bcast in channels
@@ -68,7 +69,7 @@ async def update_tracker_on_receive(chan: Receiver[int]) -> None:
6869
return recv_trackers[0]
6970

7071

71-
def time_async_task(task: Coroutine[Any, Any, int]) -> Tuple[float, Any]:
72+
def time_async_task(task: Coroutine[Any, Any, int]) -> tuple[float, Any]:
7273
"""Run a task and return the time taken and the result.
7374
7475
Args:
@@ -87,7 +88,7 @@ def run_one(
8788
num_messages: int,
8889
num_receivers: int,
8990
buffer_size: int,
90-
) -> Dict[str, Any]:
91+
) -> dict[str, Any]:
9192
"""Run a single benchmark."""
9293
runtime, total_msgs = time_async_task(
9394
benchmark_anycast(num_channels, num_messages, num_receivers, buffer_size)

benchmarks/benchmark_broadcast.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@
66
import asyncio
77
import csv
88
import timeit
9+
from collections.abc import Callable, Coroutine
910
from functools import partial
10-
from typing import Any, Callable, Coroutine, Dict, List, Tuple
11+
from typing import Any
1112

1213
from frequenz.channels import Broadcast, Receiver, Sender
1314

@@ -60,8 +61,8 @@ async def benchmark_broadcast(
6061
Returns:
6162
int: Total number of messages received by all receivers.
6263
"""
63-
channels: List[Broadcast[int]] = [Broadcast("meter") for _ in range(num_channels)]
64-
senders: List[asyncio.Task[Any]] = [
64+
channels: list[Broadcast[int]] = [Broadcast("meter") for _ in range(num_channels)]
65+
senders: list[asyncio.Task[Any]] = [
6566
asyncio.create_task(send_msg(num_messages, bcast.new_sender()))
6667
for bcast in channels
6768
]
@@ -103,7 +104,7 @@ async def benchmark_single_task_broadcast(
103104
Returns:
104105
int: Total number of messages received by all receivers.
105106
"""
106-
channels: List[Broadcast[int]] = [Broadcast("meter") for _ in range(num_channels)]
107+
channels: list[Broadcast[int]] = [Broadcast("meter") for _ in range(num_channels)]
107108
senders = [b.new_sender() for b in channels]
108109
recv_tracker = 0
109110

@@ -122,7 +123,7 @@ async def benchmark_single_task_broadcast(
122123
return recv_tracker
123124

124125

125-
def time_async_task(task: Coroutine[Any, Any, int]) -> Tuple[float, Any]:
126+
def time_async_task(task: Coroutine[Any, Any, int]) -> tuple[float, Any]:
126127
"""Run a task and return the time taken and the result.
127128
128129
Args:
@@ -144,7 +145,7 @@ def run_one(
144145
num_receivers: int,
145146
tasks_used: str,
146147
interval_between_messages: float,
147-
) -> Dict[str, Any]:
148+
) -> dict[str, Any]:
148149
"""Run a single benchmark."""
149150
runtime, total_msgs = time_async_task(
150151
benchmark_method(num_channels, num_messages, num_receivers)

src/conftest.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
This plugin extracts these code examples and validates them using pylint.
88
"""
99

10-
from __future__ import annotations
1110

1211
import ast
1312
import os

src/frequenz/channels/_anycast.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
from asyncio import Condition
99
from collections import deque
10-
from typing import Deque, Generic, Type
10+
from typing import Deque, Generic
1111

1212
from ._base_classes import Receiver as BaseReceiver
1313
from ._base_classes import Sender as BaseSender
@@ -169,7 +169,7 @@ def __init__(self, chan: Anycast[T]) -> None:
169169
chan: A reference to the channel that this receiver belongs to.
170170
"""
171171
self._chan = chan
172-
self._next: T | Type[_Empty] = _Empty
172+
self._next: T | type[_Empty] = _Empty
173173

174174
async def ready(self) -> bool:
175175
"""Wait until the receiver is ready with a value or an error.

src/frequenz/channels/_base_classes.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
from __future__ import annotations
77

88
from abc import ABC, abstractmethod
9-
from typing import Callable, Generic, Optional, TypeVar
9+
from collections.abc import Callable
10+
from typing import Generic, TypeVar
1011

1112
from ._exceptions import ReceiverStoppedError
1213

@@ -145,7 +146,7 @@ class Peekable(ABC, Generic[T]):
145146
"""
146147

147148
@abstractmethod
148-
def peek(self) -> Optional[T]:
149+
def peek(self) -> T | None:
149150
"""Return the latest value that was sent to the channel.
150151
151152
Returns:

src/frequenz/channels/_broadcast.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import weakref
1010
from asyncio import Condition
1111
from collections import deque
12-
from typing import Deque, Dict, Generic, Optional
12+
from typing import Deque, Generic
1313
from uuid import UUID, uuid4
1414

1515
from ._base_classes import Peekable as BasePeekable
@@ -88,9 +88,9 @@ def __init__(self, name: str, resend_latest: bool = False) -> None:
8888
self._resend_latest = resend_latest
8989

9090
self.recv_cv: Condition = Condition()
91-
self.receivers: Dict[UUID, weakref.ReferenceType[Receiver[T]]] = {}
91+
self.receivers: dict[UUID, weakref.ReferenceType[Receiver[T]]] = {}
9292
self.closed: bool = False
93-
self._latest: Optional[T] = None
93+
self._latest: T | None = None
9494

9595
async def close(self) -> None:
9696
"""Close the Broadcast channel.
@@ -116,9 +116,7 @@ def new_sender(self) -> Sender[T]:
116116
"""
117117
return Sender(self)
118118

119-
def new_receiver(
120-
self, name: Optional[str] = None, maxsize: int = 50
121-
) -> Receiver[T]:
119+
def new_receiver(self, name: str | None = None, maxsize: int = 50) -> Receiver[T]:
122120
"""Create a new broadcast receiver.
123121
124122
Broadcast receivers have their own buffer, and when messages are not
@@ -346,7 +344,7 @@ def __init__(self, chan: Broadcast[T]) -> None:
346344
"""
347345
self._chan = chan
348346

349-
def peek(self) -> Optional[T]:
347+
def peek(self) -> T | None:
350348
"""Return the latest value that was sent to the channel.
351349
352350
Returns:

src/frequenz/channels/util/_merge.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import asyncio
77
from collections import deque
8-
from typing import Any, Deque, Set
8+
from typing import Any, Deque
99

1010
from .._base_classes import Receiver, T
1111
from .._exceptions import ReceiverStoppedError
@@ -44,7 +44,7 @@ def __init__(self, *args: Receiver[T]) -> None:
4444
*args: sequence of channel receivers.
4545
"""
4646
self._receivers = {str(id): recv for id, recv in enumerate(args)}
47-
self._pending: Set[asyncio.Task[Any]] = {
47+
self._pending: set[asyncio.Task[Any]] = {
4848
asyncio.create_task(recv.__anext__(), name=name)
4949
for name, recv in self._receivers.items()
5050
}

src/frequenz/channels/util/_merge_named.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55

66
import asyncio
77
from collections import deque
8-
from typing import Any, Deque, Set, Tuple
8+
from typing import Any, Deque
99

1010
from .._base_classes import Receiver, T
1111
from .._exceptions import ReceiverStoppedError
1212

1313

14-
class MergeNamed(Receiver[Tuple[str, T]]):
14+
class MergeNamed(Receiver[tuple[str, T]]):
1515
"""Merge messages coming from multiple named channels into a single stream.
1616
1717
When `MergeNamed` is no longer needed, then it should be stopped using
@@ -25,11 +25,11 @@ def __init__(self, **kwargs: Receiver[T]) -> None:
2525
**kwargs: sequence of channel receivers.
2626
"""
2727
self._receivers = kwargs
28-
self._pending: Set[asyncio.Task[Any]] = {
28+
self._pending: set[asyncio.Task[Any]] = {
2929
asyncio.create_task(recv.__anext__(), name=name)
3030
for name, recv in self._receivers.items()
3131
}
32-
self._results: Deque[Tuple[str, T]] = deque(maxlen=len(self._receivers))
32+
self._results: Deque[tuple[str, T]] = deque(maxlen=len(self._receivers))
3333

3434
def __del__(self) -> None:
3535
"""Cleanup any pending tasks."""
@@ -81,7 +81,7 @@ async def ready(self) -> bool:
8181
asyncio.create_task(self._receivers[name].__anext__(), name=name)
8282
)
8383

84-
def consume(self) -> Tuple[str, T]:
84+
def consume(self) -> tuple[str, T]:
8585
"""Return the latest value once `ready` is complete.
8686
8787
Returns:

src/frequenz/channels/util/_select.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
"""
1010

1111
import asyncio
12-
from typing import Any, AsyncIterator, Generic, TypeGuard, TypeVar
12+
from collections.abc import AsyncIterator
13+
from typing import Any, Generic, TypeGuard, TypeVar
1314

1415
from .._base_classes import Receiver
1516
from .._exceptions import ReceiverStoppedError

tests/test_anycast.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
"""Tests for the Channel implementation."""
55

6-
from __future__ import annotations
76

87
import asyncio
98

0 commit comments

Comments
 (0)