Research
Security News
Quasar RAT Disguised as an npm Package for Detecting Vulnerabilities in Ethereum Smart Contracts
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Simplifies class-based views for more organized and maintainable code in FastAPI.
Classes and Decorators to use FastAPI with Class based routing
Source Code: https://github.com/yezz123/fastapi-class
Install the project: pip install fastapi-class
As you create more complex FastAPI applications, you may find yourself frequently repeating the same dependencies in multiple related endpoints.
A common question people have as they become more comfortable with FastAPI is how they can reduce the number of times they have to copy/paste the same dependency into related routes.
fastapi_class
provides a class-based view
decorator @View
to help reduce the amount of boilerplate necessary when developing related routes.
Highly inspired by Fastapi-utils, Thanks to @dmontagu for the great work.
from fastapi import FastAPI, Query
from pydantic import BaseModel
from fastapi_class import View
app = FastAPI()
class ItemModel(BaseModel):
id: int
name: str
description: str = None
@View(app)
class ItemView:
async def post(self, item: ItemModel):
return item
async def get(self, item_id: int = Query(..., gt=0)):
return {"item_id": item_id}
Exception
in list need to be either function that return fastapi.HTTPException
itself. In case of a function it is required to have all of it's arguments to be optional
.
from fastapi import FastAPI, HTTPException, status
from fastapi.responses import PlainTextResponse
from pydantic import BaseModel
from fastapi_class import View
app = FastAPI()
NOT_AUTHORIZED = HTTPException(401, "Not authorized.")
NOT_ALLOWED = HTTPException(405, "Method not allowed.")
NOT_FOUND = lambda item_id="item_id": HTTPException(404, f"Item with {item_id} not found.")
class ItemResponse(BaseModel):
field: str | None = None
@View(app)
class MyView:
exceptions = {
"__all__": [NOT_AUTHORIZED],
"put": [NOT_ALLOWED, NOT_FOUND]
}
RESPONSE_MODEL = {
"put": ItemResponse
}
RESPONSE_CLASS = {
"delete": PlainTextResponse
}
async def get(self):
...
async def put(self):
...
async def delete(self):
...
from fastapi import FastAPI, HTTPException
from fastapi.responses import PlainTextResponse
from pydantic import BaseModel
from fastapi_class import View, endpoint
app = FastAPI()
NOT_AUTHORIZED = HTTPException(401, "Not authorized.")
NOT_ALLOWED = HTTPException(405, "Method not allowed.")
NOT_FOUND = lambda item_id="item_id": HTTPException(404, f"Item with {item_id} not found.")
EXCEPTION = HTTPException(400, "Example.")
class UserResponse(BaseModel):
field: str | None = None
@View(app)
class MyView:
exceptions = {
"__all__": [NOT_AUTHORIZED],
"put": [NOT_ALLOWED, NOT_FOUND],
"edit": [EXCEPTION]
}
RESPONSE_MODEL = {
"put": UserResponse,
"edit": UserResponse
}
RESPONSE_CLASS = {
"delete": PlainTextResponse
}
async def get(self):
...
async def put(self):
...
async def delete(self):
...
@endpoint(("PUT"), path="edit")
async def edit(self):
...
Note: The edit()
endpoint is decorated with the @endpoint(("PUT",), path="edit")
decorator, which specifies that this endpoint should handle PUT
requests to the /edit
path,
using @endpoint("PUT", path="edit")
has the same effect
You should create a virtual environment and activate it:
python -m venv venv/
source venv/bin/activate
And then install the development dependencies:
Note: You should have uv
installed, if not you can install it with:
pip install uv
Then you can install the dependencies with:
# Install dependencies
uv pip install -r requirements/all.txt
You can run all the tests with:
bash scripts/test.sh
Execute the following command to apply pre-commit
formatting:
bash scripts/format.sh
Execute the following command to apply mypy
type checking:
bash scripts/lint.sh
This project is licensed under the terms of the MIT license.
FAQs
Simplifies class-based views for more organized and maintainable code in FastAPI.
We found that fastapi-class demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.