Metadata-Version: 2.4
Name: aiows
Version: 0.0.3
Summary: Modern WebSocket framework inspired by aiogram
Author: aiows contributors
License: MIT
Project-URL: homepage, https://github.com/mr-akkerman/aiows
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: pydantic>=2.0.0
Requires-Dist: websockets>=10.0
Provides-Extra: dev
Requires-Dist: pytest; extra == "dev"
Requires-Dist: black; extra == "dev"
Requires-Dist: isort; extra == "dev"
Requires-Dist: mypy; extra == "dev"
Dynamic: license-file

# aiows

Modern WebSocket framework for Python inspired by aiogram

## Features

- Declarative approach with decorators
- Typed messages with Pydantic
- Simple routing like in aiogram 
- Async/await support

## Quick Start

```python
"""
Simple chat example using aiows
"""

# Import main aiows classes
from aiows import WebSocketServer, Router, ChatMessage, WebSocket


# Create router for handling events
router = Router()


@router.connect()
async def handle_connect(websocket: WebSocket):
    """Connection handler - send welcome message"""
    print(f"New connection!")
    
    # Send welcome message
    welcome_data = {
        "type": "chat",
        "text": "Welcome to chat!",
        "user_id": 0
    }
    await websocket.send_json(welcome_data)


@router.message("chat") 
async def handle_chat_message(websocket: WebSocket, message: ChatMessage):
    """Chat message handler - send echo response"""
    print(f"Received message from user {message.user_id}: {message.text}")
    
    # Create response message (echo)
    response_data = {
        "type": "chat",
        "text": f"Echo: {message.text}",
        "user_id": 999  # Bot ID
    }
    await websocket.send_json(response_data)


@router.disconnect()
async def handle_disconnect(websocket: WebSocket, reason: str):
    """Disconnect handler - log the event"""
    print(f"User disconnected. Reason: {reason}")


def main():
    """Main function - create and run server"""
    # Create server
    server = WebSocketServer()
    
    # Connect router to server
    server.include_router(router)
    
    # Run server on localhost:8000
    print("Starting chat server...")
    print("Connect via WebSocket at ws://localhost:8000")
    server.run(host="localhost", port=8000)


if __name__ == "__main__":
    main()
```

## Installation

```bash
pip install aiows
```

## Requirements

- Python 3.8+
- pydantic>=2.0.0

