Source code for smorest_crud

from flask import current_app
from werkzeug.local import LocalProxy
import logging
from flask_sqlalchemy import SQLAlchemy
from flask import Flask
from typing import Optional, Callable

log = logging.getLogger(__name__)

# access initialized extension
_crud = LocalProxy(lambda: current_app.extensions["crud"])

config_keys = dict(get_user="CRUD_GET_USER", key_attr="CRUD_DEFAULT_KEY_COLUMN")


[docs]class CRUD(object): """Flask extension to enable CRUD REST functionality. Sample full app configuration:: from smorest_crud import CRUD from flask_jwt_extended import JWTManager, get_current_user app = Flask() JWTManager(app) CRUD(app) app.config.update( CRUD_GET_USER=get_current_user, CRUD_ACCESS_CHECKS_ENABLED=True, SECRET_KEY="wnt2die", CRUD_DEFAULT_KEY_COLUMN="extid", ) """ db: SQLAlchemy app: Flask get_user: Optional[Callable] key_attr: str = "id" access_control_enabled: bool def __init__(self, app=None): self.app = app if app is not None: self.init_app(app)
[docs] def init_app(self, app, identity_handler=None): if "sqlalchemy" not in app.extensions: raise Exception( "Please initialize CRUD after initializing the " "Flask-SQLAlchemy extension on your app." ) self.access_control_enabled = app.config.get("CRUD_ACCESS_CHECKS_ENABLED") if self.access_control_enabled: if "CRUD_GET_USER" in app.config: self.get_user = app.config["CRUD_GET_USER"] else: raise Exception("CRUD_GET_USER not found in configuration") # checking if CRUD_DEFAULT_KEY_COLUMN is present in configs to replace the default value if config_keys["key_attr"] in app.config: self.key_attr = app.config[config_keys["key_attr"]] # save sqla db object for later self.db = app.extensions["sqlalchemy"].db # save stuff for later self.app = app # save for localproxy app.extensions["crud"] = self
from smorest_crud.view import ResourceView, CollectionView from smorest_crud.access_control import ( AccessControlUser, AccessControlQuery, get_for_current_user_or_404, query_for_current_user, ) __all__ = ( "ResourceView", "CollectionView", "CRUD", "AccessControlUser", "AccessControlQuery", "get_for_current_user_or_404", "query_for_current_user", )