Skip to content

Commit abf7ac2

Browse files
committed
ch15: typing.cast example
1 parent 1fffea6 commit abf7ac2

File tree

2 files changed

+63
-0
lines changed

2 files changed

+63
-0
lines changed

15-more-types/cast/tcp_echo.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import asyncio
2+
3+
from asyncio import StreamReader, StreamWriter
4+
from asyncio.trsock import TransportSocket
5+
from typing import cast
6+
7+
async def handle_echo(reader: StreamReader, writer: StreamWriter) -> None:
8+
data = await reader.read(100)
9+
message = data.decode()
10+
addr = writer.get_extra_info('peername')
11+
12+
print(f"Received {message!r} from {addr!r}")
13+
14+
print(f"Send: {message!r}")
15+
writer.write(data)
16+
await writer.drain()
17+
18+
print("Close the connection")
19+
writer.close()
20+
21+
async def main() -> None:
22+
server = await asyncio.start_server(
23+
handle_echo, '127.0.0.1', 8888)
24+
25+
# tag::CAST[]
26+
socket_list = cast(tuple[TransportSocket, ...], server.sockets)
27+
addr = socket_list[0].getsockname()
28+
# end::CAST[]
29+
print(f'Serving on {addr}')
30+
31+
async with server:
32+
await server.serve_forever()
33+
34+
asyncio.run(main())
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import asyncio
2+
3+
from asyncio import StreamReader, StreamWriter
4+
5+
async def handle_echo(reader: StreamReader, writer: StreamWriter) -> None:
6+
data = await reader.read(100)
7+
message = data.decode()
8+
addr = writer.get_extra_info('peername')
9+
10+
print(f"Received {message!r} from {addr!r}")
11+
12+
print(f"Send: {message!r}")
13+
writer.write(data)
14+
await writer.drain()
15+
16+
print("Close the connection")
17+
writer.close()
18+
19+
async def main() -> None:
20+
server = await asyncio.start_server(
21+
handle_echo, '127.0.0.1', 8888)
22+
23+
addr = server.sockets[0].getsockname()
24+
print(f'Serving on {addr}')
25+
26+
async with server:
27+
await server.serve_forever()
28+
29+
asyncio.run(main())

0 commit comments

Comments
 (0)