Fast & Friendly, Web Framework For Building Async APIs
Project description
Panther
Is A Fast & Friendly Web Framework For Building Async APIs With Python 3.10+
📚 Full Documentation: PantherPy.GitHub.io
Why Use Panther ?
- Include Simple File-Base Database (PantherDB)
- Built-in Document-oriented Databases ODM (MongoDB, PantherDB)
- Built-in Websocket Support
- Built-in API Caching System (In Memory, Redis)
- Built-in Authentication Classes
- Built-in Permission Classes
- Built-in Visual API Monitoring (In Terminal)
- Support Custom Background Tasks
- Support Custom Middlewares
- Support Custom Throttling
- Support Function-Base and Class-Base APIs
- It's One Of The Fastest Python Framework (Benchmark)
Supported by
Installation
$ pip install panther
Usage
-
Create Project
$ panther create
-
Run Project
$ panther run --reload
* Panther uses Uvicorn as ASGI (Asynchronous Server Gateway Interface) but you can run the project with Granian, daphne or any ASGI server
-
Monitoring Requests
$ panther monitor
-
Python Shell
$ panther shell
API Example
-
Create
main.py
from datetime import datetime, timedelta from panther import status, Panther from panther.app import GenericAPI from panther.response import Response class FirstAPI(GenericAPI): # Cache Response For 10 Seconds cache = True cache_exp_time = timedelta(seconds=10) def get(self): date_time = datetime.now().isoformat() data = {'detail': f'Hello World | {date_time}'} return Response(data=data, status_code=status.HTTP_202_ACCEPTED) url_routing = {'': FirstAPI} app = Panther(__name__, configs=__name__, urls=url_routing)
-
Run the project:
$ panther run --reload
-
Checkout the http://127.0.0.1:8000/
WebSocket Echo Example
-
Create
main.py
from panther import Panther from panther.app import GenericAPI from panther.response import HTMLResponse from panther.websocket import GenericWebsocket class FirstWebsocket(GenericWebsocket): async def connect(self, **kwargs): await self.accept() async def receive(self, data: str | bytes): await self.send(data) class MainPage(GenericAPI): def get(self): template = """ <input type="text" id="messageInput"> <button id="sendButton">Send Message</button> <ul id="messages"></ul> <script> var socket = new WebSocket('ws://127.0.0.1:8000/ws'); socket.addEventListener('message', function (event) { var li = document.createElement('li'); document.getElementById('messages').appendChild(li).textContent = 'Server: ' + event.data; }); function sendMessage() { socket.send(document.getElementById('messageInput').value); } document.getElementById('sendButton').addEventListener('click', sendMessage); </script> """ return HTMLResponse(template) url_routing = { '': MainPage, 'ws': FirstWebsocket, } app = Panther(__name__, configs=__name__, urls=url_routing)
-
Run the project:
$ panther run --reload
-
Go to http://127.0.0.1:8000/ and work with your
websocket
Next Step: First CRUD
How Panther Works!
Roadmap
If you find this project useful, please give it a star ⭐️.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file panther-4.3.3.tar.gz
.
File metadata
- Download URL: panther-4.3.3.tar.gz
- Upload date:
- Size: 75.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6232da6331f729438b0f3c3764673a9f24afb48d0d0f36688ec9f589cbab9c65 |
|
MD5 | fa7e8fb29e2aaf681ee2ae9b3528e07a |
|
BLAKE2b-256 | 32640e083a30167614350e018e0d713670e6747645a0f305f8863a1266ac0c05 |
File details
Details for the file panther-4.3.3-py3-none-any.whl
.
File metadata
- Download URL: panther-4.3.3-py3-none-any.whl
- Upload date:
- Size: 67.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | da4f192e1e77d69cd4286c03076ff1a69009b04a244de051a2d8c377aa610be7 |
|
MD5 | 72adff2fb1e15d6f03d2d82449f517f1 |
|
BLAKE2b-256 | 77c52a418a3f3490fa4a5235ca0da5a120710c4783eb93d55901305092b5ec5b |