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+
- Host: GitHub
- URL: https://github.com/alirn76/panther
- Owner: AliRn76
- License: bsd-3-clause
- Created: 2022-02-23T14:51:09.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2025-10-17T13:18:26.000Z (4 months ago)
- Last Synced: 2025-10-18T16:45:39.347Z (4 months ago)
- Topics: framework, panther, python
- Language: Python
- Homepage: https://PantherPy.GitHub.io
- Size: 11.7 MB
- Stars: 349
- Watchers: 7
- Forks: 19
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Security: SECURITY.md
Awesome Lists containing this project
README
[](https://pypi.org/project/panther/) [](https://pypi.org/project/panther/) [](https://codecov.io/github/AliRn76/panther) [](https://pepy.tech/project/panther) [](https://github.com/alirn76/panther/blob/main/LICENSE)
# 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
---
⭐️ If you find Panther useful, please give it a star!