Panther is designed to be fast, simple, and powerful. Here's what makes it special:
- One of the fastest Python frameworks available (Benchmark)
- File-based database (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
pip install panther
- Create a
main.py
file with one of the examples below.
Here's a simple REST API endpoint that returns a "Hello World" message:
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)
Here's a simple WebSocket echo server that sends back any message it receives:
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 = """
<h2>๐พ Panther WebSocket Echo Server</h2>
<input id="msg"><button onclick="s.send(msg.value)">Send</button>
<ul id="log"></ul>
<script>
const s = new WebSocket('ws://127.0.0.1:8000/ws');
s.onmessage = e => log.innerHTML += `<li><- ${msg.value}</li><li>-> ${e.data}</li>`;
</script>
"""
return HTMLResponse(template)
url_routing = {
'': WebSocketPage,
'ws': EchoWebsocket,
}
app = Panther(__name__, configs=__name__, urls=url_routing)
-
Start the development server
$ panther run main:app
-
Test your application
- For the API example: Visit http://127.0.0.1:8000/ to see the "Hello World" response
- For the WebSocket example: Visit http://127.0.0.1:8000/ and send a message.
โญ๏ธ If you find Panther useful, please give it a star!