- Remove .flake8; add [tool.ruff] and [tool.ruff.format] config in pyproject.toml (line-length 120, excludes, ignore list, per-file-ignores, mccabe complexity) - Update GitHub workflow lint job to run `ruff check .` and `ruff format --check .` - Swap black and flake8 for ruff in requirements.txt and Pipfile - Change capnp/__init__.py to ruff-style noqa comment - Move max-complexity into [tool.ruff.lint.mccabe], lint options into [tool.ruff.lint] - Add per-file-ignores for capnp/__init__.py (F401, F403, F405), remove inline noqa - Run ruff format across codebase (24 files) for consistent style
68 lines
1.8 KiB
Python
Executable File
68 lines
1.8 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import argparse
|
|
import asyncio
|
|
import logging
|
|
import os
|
|
import ssl
|
|
import socket
|
|
|
|
import capnp
|
|
import thread_capnp
|
|
|
|
logger = logging.getLogger(__name__)
|
|
logger.setLevel(logging.DEBUG)
|
|
|
|
this_dir = os.path.dirname(os.path.abspath(__file__))
|
|
|
|
|
|
class ExampleImpl(thread_capnp.Example.Server):
|
|
"Implementation of the Example threading Cap'n Proto interface."
|
|
|
|
async def subscribeStatus(self, subscriber, **kwargs):
|
|
await asyncio.sleep(0.1)
|
|
await subscriber.status(True)
|
|
await self.subscribeStatus(subscriber)
|
|
|
|
async def longRunning(self, **kwargs):
|
|
await asyncio.sleep(0.1)
|
|
|
|
async def alive(self, **kwargs):
|
|
return True
|
|
|
|
|
|
async def new_connection(stream):
|
|
await capnp.TwoPartyServer(stream, bootstrap=ExampleImpl()).on_disconnect()
|
|
|
|
|
|
def parse_args():
|
|
parser = argparse.ArgumentParser(usage="""Runs the server bound to the given address/port ADDRESS. """)
|
|
parser.add_argument("address", help="ADDRESS:PORT")
|
|
return parser.parse_args()
|
|
|
|
|
|
async def main():
|
|
host, port = parse_args().address.split(":")
|
|
|
|
# Setup SSL context
|
|
ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
|
|
ctx.load_cert_chain(
|
|
os.path.join(this_dir, "selfsigned.cert"),
|
|
os.path.join(this_dir, "selfsigned.key"),
|
|
)
|
|
|
|
# Handle both IPv4 and IPv6 cases
|
|
try:
|
|
print("Try IPv4")
|
|
server = await capnp.AsyncIoStream.create_server(new_connection, host, port, ssl=ctx, family=socket.AF_INET)
|
|
except Exception:
|
|
print("Try IPv6")
|
|
server = await capnp.AsyncIoStream.create_server(new_connection, host, port, ssl=ctx, family=socket.AF_INET6)
|
|
|
|
async with server:
|
|
await server.serve_forever()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(capnp.run(main()))
|