summaryrefslogtreecommitdiff
path: root/backend/localsocket.py
diff options
context:
space:
mode:
authormarios8543 <marios8543@gmail.com>2023-09-18 00:31:54 +0300
committermarios8543 <marios8543@gmail.com>2023-10-17 17:08:23 +0300
commita7c358844c96b7fb52f4a7e8d16a5cd928a1ca12 (patch)
treecb951d59fed4d0e4283c95a53d4344b1e8963632 /backend/localsocket.py
parente2d708a6af0ec75c557b11d3a442af57240302b4 (diff)
downloaddecky-loader-a7c358844c96b7fb52f4a7e8d16a5cd928a1ca12.tar.gz
decky-loader-a7c358844c96b7fb52f4a7e8d16a5cd928a1ca12.zip
type hints on main,plugin,updater,utilites.localsocket
Diffstat (limited to 'backend/localsocket.py')
-rw-r--r--backend/localsocket.py37
1 files changed, 22 insertions, 15 deletions
diff --git a/backend/localsocket.py b/backend/localsocket.py
index ef0e3933..3659da03 100644
--- a/backend/localsocket.py
+++ b/backend/localsocket.py
@@ -1,10 +1,13 @@
-import asyncio, time, random
+import asyncio, time
+from typing import Awaitable, Callable
+import random
+
from localplatform import ON_WINDOWS
BUFFER_LIMIT = 2 ** 20 # 1 MiB
class UnixSocket:
- def __init__(self, on_new_message):
+ def __init__(self, on_new_message: Callable[[str], Awaitable[str|None]]):
'''
on_new_message takes 1 string argument.
It's return value gets used, if not None, to write data to the socket.
@@ -46,28 +49,32 @@ class UnixSocket:
self.reader = None
async def read_single_line(self) -> str|None:
- reader, writer = await self.get_socket_connection()
+ reader, _ = await self.get_socket_connection()
- if self.reader == None:
- return None
+ try:
+ assert reader
+ except AssertionError:
+ return
return await self._read_single_line(reader)
async def write_single_line(self, message : str):
- reader, writer = await self.get_socket_connection()
+ _, writer = await self.get_socket_connection()
- if self.writer == None:
- return;
+ try:
+ assert writer
+ except AssertionError:
+ return
await self._write_single_line(writer, message)
- async def _read_single_line(self, reader) -> str:
+ async def _read_single_line(self, reader: asyncio.StreamReader) -> str:
line = bytearray()
while True:
try:
line.extend(await reader.readuntil())
except asyncio.LimitOverrunError:
- line.extend(await reader.read(reader._limit))
+ line.extend(await reader.read(reader._limit)) # type: ignore
continue
except asyncio.IncompleteReadError as err:
line.extend(err.partial)
@@ -77,27 +84,27 @@ class UnixSocket:
return line.decode("utf-8")
- async def _write_single_line(self, writer, message : str):
+ async def _write_single_line(self, writer: asyncio.StreamWriter, message : str):
if not message.endswith("\n"):
message += "\n"
writer.write(message.encode("utf-8"))
await writer.drain()
- async def _listen_for_method_call(self, reader, writer):
+ async def _listen_for_method_call(self, reader: asyncio.StreamReader, writer: asyncio.StreamWriter):
while True:
line = await self._read_single_line(reader)
try:
res = await self.on_new_message(line)
- except Exception as e:
+ except Exception:
return
if res != None:
await self._write_single_line(writer, res)
class PortSocket (UnixSocket):
- def __init__(self, on_new_message):
+ def __init__(self, on_new_message: Callable[[str], Awaitable[str|None]]):
'''
on_new_message takes 1 string argument.
It's return value gets used, if not None, to write data to the socket.
@@ -125,7 +132,7 @@ class PortSocket (UnixSocket):
return True
if ON_WINDOWS:
- class LocalSocket (PortSocket):
+ class LocalSocket (PortSocket): # type: ignore
pass
else:
class LocalSocket (UnixSocket):