Source code for flask_datatables.database
# -*- coding: utf-8 -*-
# pylint: disable=unsubscriptable-object
"""Database Connection
=========================
We made some monkeypatch for :mod:`peewee` and :mod:`playhouse.flask_utils`
in order to better support the integration with :mod:`Flask`.
.. _DataTables: https://datatables.net/
"""
from typing import TYPE_CHECKING
import playhouse.flask_utils
from .model import Model
if TYPE_CHECKING:
from typing import Any, Dict, Optional, Type, Union
from flask import Flask
from playhouse.flask_utils import FlaskDB as Database
# ``database`` parameter acceptable types
DBConfig = Union[Dict[str, Any], str, Database]
__all__ = ['DataTable']
[docs]
class DataTable(playhouse.flask_utils.FlaskDB):
"""Server-side processing integration with `DataTables`_.
Args:
app: :class:`flask.Flask` instance to integrate `DataTables`_.
database: Database connection configurations.
model_class: :class:`flask_datatables.model.Model` class to create
data models.
"""
#: Database connection instance.
database: 'Database'
#: Base class for data models.
base_model_class: 'Model'
#: :class:`flask.Flask` instance to integrate `DataTables`_.
_app: 'Flask'
#: Database connection configurations.
_db: 'DBConfig'
def __init__(self, app: 'Optional[Flask]' = None,
database: 'Optional[DBConfig]' = None,
model_class: 'Optional[Type[Model]]' = None):
if model_class is None:
model_class = Model
super().__init__(app, database, model_class)
[docs]
def init_app(self, app: 'Flask') -> None:
"""Initialise the :class:`~flask_datatables.app.DataTables` with the :class:`~flask.Flask` application.
Args:
app: :class:`flask.Flask` instance to integrate `DataTables`_.
"""
super().init_app(app)
app.extensions['datatables'] = self