Skip to content

AliRn76/panther

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

PyPI PyVersion codecov Downloads license

Panther Logo

Panther

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

๐Ÿ“š Documentation


๐Ÿพ 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)
  • 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

Quick Start

Installation

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:

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:

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)

Run Your Application

  1. Start the development server

    $ panther run main:app
  2. Test your application


๐Ÿ™ Acknowledgments

Supported by

JetBrains

โญ๏ธ If you find Panther useful, please give it a star!

About

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

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Sponsor this project

Contributors 8