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