diff --git a/example/hello.py b/example/hello.py index db9d733..4015a80 100644 --- a/example/hello.py +++ b/example/hello.py @@ -1,7 +1,7 @@ -from kaya import BugisApp, HttpContext, HttpMethod +from kaya import KayaApp, HttpContext, HttpMethod, WebSocket from typing import List -class Hello(BugisApp): +class Hello(KayaApp): pass # async def handle_request(self, ctx: HttpContext) -> None: @@ -10,7 +10,7 @@ class Hello(BugisApp): # await ctx.send_str(200, 'Hello World') -app = BugisApp() +app = KayaApp() @app.GET('/hello') @@ -42,4 +42,15 @@ async def hello_bob_marley(ctx: HttpContext) -> None: async def handle_put_request(ctx: HttpContext, _: List[str]) -> None: async for chunk in ctx.request_body: print(chunk.decode()) - await ctx.send_str(200, 'Message received') \ No newline at end of file + await ctx.send_str(200, 'Message received') + +@app.websocket('/echo') +async def echo(ws: WebSocket) -> None: + await ws.accept() + async for msg in ws: + if msg.kind == 'text': + await ws.send_text(f"echo: {msg.data}") + elif msg.kind == 'binary': + data = msg.data + assert isinstance(data, bytes) + await ws.send_bytes(data) \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 000db3d..e4ac94e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -51,3 +51,6 @@ strict = true [tool.setuptools_scm] version_file = "src/kaya/_version.py" + +[tool.setuptools_scm.tag] +prefix = "release/" \ No newline at end of file diff --git a/src/kaya/__init__.py b/src/kaya/__init__.py index 65d38c9..f1cf9e3 100644 --- a/src/kaya/__init__.py +++ b/src/kaya/__init__.py @@ -1,4 +1,4 @@ -from ._app import BugisApp +from ._app import KayaApp from ._http_method import HttpMethod from ._http_context import HttpContext from ._tree import Tree, PathIterator @@ -8,7 +8,7 @@ from ._websocket import WebSocket, WebSocketMessage __all__ = [ 'HttpMethod', - 'BugisApp', + 'KayaApp', 'HttpContext', 'Tree', 'PathHandler', diff --git a/src/kaya/_app.py b/src/kaya/_app.py index 77818dd..0399719 100644 --- a/src/kaya/_app.py +++ b/src/kaya/_app.py @@ -37,7 +37,7 @@ type HttpHandler = Callable[[HttpContext, Unpack[Any]], Awaitable[None]] type WebSocketHandler = Callable[[WebSocket, Unpack[Any]], Awaitable[None]] -class AbstractBugisApp(ABC): +class AbstractKayaApp(ABC): async def __call__(self, scope: ASGIHTTPScope | ASGIWebSocketScope | LifespanScope, receive: Callable[[], Awaitable[Any]], @@ -102,7 +102,7 @@ class AbstractBugisApp(ABC): await self.handle_request(ctx) -class BugisApp(AbstractBugisApp): +class KayaApp(AbstractKayaApp): _tree: Tree def __init__(self) -> None: diff --git a/tests/test_asgi.py b/tests/test_asgi.py index 1b2c3aa..401d364 100644 --- a/tests/test_asgi.py +++ b/tests/test_asgi.py @@ -2,15 +2,15 @@ import unittest import json import httpx from pwo import async_test -from kaya import BugisApp, HttpContext, HttpMethod +from kaya import KayaApp, HttpContext, HttpMethod from typing import Sequence, List class AsgiTest(unittest.TestCase): - app: BugisApp + app: KayaApp def setUp(self): - self.app = BugisApp() + self.app = KayaApp() @self.app.GET('/hello') @self.app.GET('/hello2') @@ -105,7 +105,7 @@ class AsgiTest(unittest.TestCase): @async_test async def test_method_agnostic_fallback_order_independence(self): - app = BugisApp() + app = KayaApp() @app.route(('/foo/*',), recursive=True) async def handle_request(ctx: HttpContext, path: Sequence[str]) -> None: @@ -128,7 +128,7 @@ class AsgiTest(unittest.TestCase): @async_test async def test_disjoint_method_specific_matchers(self): - app = BugisApp() + app = KayaApp() @app.route(('/foo/*',), HttpMethod.PUT, recursive=True) async def handle_request(ctx: HttpContext, path: Sequence[str]) -> None: diff --git a/tests/test_websocket.py b/tests/test_websocket.py index ad5ef67..e848226 100644 --- a/tests/test_websocket.py +++ b/tests/test_websocket.py @@ -1,7 +1,7 @@ import unittest from typing import Any, Callable, Awaitable, List, Mapping, Optional from pwo import async_test -from kaya import BugisApp, WebSocket, WebSocketMessage +from kaya import KayaApp, WebSocket, WebSocketMessage def websocket_scope(path: str = '/ws') -> Mapping[str, Any]: @@ -23,10 +23,10 @@ def websocket_scope(path: str = '/ws') -> Mapping[str, Any]: class WebSocketTest(unittest.TestCase): - app: BugisApp + app: KayaApp def setUp(self): - self.app = BugisApp() + self.app = KayaApp() @self.app.websocket('/echo') async def echo(ws: WebSocket) -> None: