An open API service indexing awesome lists of open source software.

https://github.com/alirn76/panther

Fast & Friendly Web Framework For Building Async APIs With Python 3.10+
https://github.com/alirn76/panther

framework panther python

Last synced: 4 months ago
JSON representation

Fast & Friendly Web Framework For Building Async APIs With Python 3.10+

Awesome Lists containing this project

README

          

[![PyPI](https://img.shields.io/pypi/v/panther?label=PyPI)](https://pypi.org/project/panther/) [![PyVersion](https://img.shields.io/pypi/pyversions/panther.svg)](https://pypi.org/project/panther/) [![codecov](https://codecov.io/github/AliRn76/panther/graph/badge.svg?token=YWFQA43GSP)](https://codecov.io/github/AliRn76/panther) [![Downloads](https://static.pepy.tech/badge/panther/month)](https://pepy.tech/project/panther) [![license](https://img.shields.io/github/license/alirn76/panther.svg)](https://github.com/alirn76/panther/blob/main/LICENSE)


Panther Logo

# Panther

**A Fast & Friendly Web Framework for Building Async APIs with Python 3.10+**

[📚 Documentation](https://pantherpy.github.io)

---

## 🐾 Why Choose Panther?

Panther is designed to be **fast**, **simple**, and **powerful**. Here's what makes it special:

- **One of the fastest Python frameworks** available ([Benchmark](https://www.techempower.com/benchmarks/#section=data-r23&l=zijzen-pa7&c=4))
- **File-based database** ([PantherDB](https://pypi.org/project/pantherdb/)) - No external database setup required
- **Document-oriented ODM** - Supports MongoDB & PantherDB with familiar syntax
- **API caching system** - In-memory and Redis support
- **OpenAPI** - Auto-generated API documentation with multiple UI options
- **WebSocket support** - Real-time communication out of the box
- **Authentication & Permissions** - Built-in security features
- **Background tasks** - Handle long-running operations
- **Middleware & Throttling** - Extensible and configurable

---

## Quick Start

### Installation

```bash
pip install panther
```

- Create a `main.py` file with one of the examples below.

### Your First API

Here's a simple REST API endpoint that returns a "Hello World" message:

```python
from datetime import datetime, timedelta
from panther import status, Panther
from panther.app import GenericAPI
from panther.openapi.urls import url_routing as openapi_url_routing
from panther.response import Response

class HelloAPI(GenericAPI):
# Cache responses for 10 seconds
cache = timedelta(seconds=10)

def get(self):
current_time = datetime.now().isoformat()
return Response(
data={'message': f'Hello from Panther! 🐾 | {current_time}'},
status_code=status.HTTP_200_OK
)

# URL routing configuration
url_routing = {
'/': HelloAPI,
'docs/': openapi_url_routing, # Auto-generated API docs
}

# Create your Panther app
app = Panther(__name__, configs=__name__, urls=url_routing)
```

### WebSocket Echo Server

Here's a simple WebSocket echo server that sends back any message it receives:

```python
from panther import Panther
from panther.app import GenericAPI
from panther.response import HTMLResponse
from panther.websocket import GenericWebsocket

class EchoWebsocket(GenericWebsocket):
async def connect(self, **kwargs):
await self.accept()
await self.send("Connected to Panther WebSocket!")

async def receive(self, data: str | bytes):
# Echo back the received message
await self.send(f"Echo: {data}")

class WebSocketPage(GenericAPI):
def get(self):
template = """

🐾 Panther WebSocket Echo Server


Send


    const s = new WebSocket('ws://127.0.0.1:8000/ws');
    s.onmessage = e => log.innerHTML += `<li><- ${msg.value}</li><li>-> ${e.data}</li>`;

    """
    return HTMLResponse(template)

    url_routing = {
    '': WebSocketPage,
    'ws': EchoWebsocket,
    }
    app = Panther(__name__, configs=__name__, urls=url_routing)
    ```

    ### Run Your Application

    1. **Start the development server**
    ```shell
    $ panther run main:app
    ```

    2. **Test your application**
    - For the _API_ example: Visit [http://127.0.0.1:8000/](http://127.0.0.1:8000/) to see the "Hello World" response
    - For the _WebSocket_ example: Visit [http://127.0.0.1:8000/](http://127.0.0.1:8000/) and send a message.

    ---

    ## 🙏 Acknowledgments


    Supported by



    JetBrains

    ---


    ⭐️ If you find Panther useful, please give it a star!