Source code for msdss_data_api.core
from fastapi import FastAPI
from msdss_base_api import API
from msdss_base_database import Database
from .routers import *
from .handlers import *
[docs]class DataAPI(API):
"""
Class for creating Data APIs.
Parameters
----------
users_api : :class:`msdss_users_api:msdss_users_api.core.UsersAPI` or None
Users API object to enable user authentication for data routes.
If ``None``, user authentication will not be used for data routes.
database : :class:`msdss_base_database:msdss_base_database.core.Database` or None
A :class:`msdss_base_database:msdss_base_database.core.Database` object for managing data. If ``None``, a default database will be setup.
data_router_settings : dict
Additional arguments passed to :func:`msdss_data_api.routers.get_data_router` except ``database``.
api : :class:`fastapi:fastapi.FastAPI`
API object for creating routes.
*args, **kwargs
Additional arguments passed to :class:`msdss_base_api:msdss_base_api.core.API`.
Attributes
----------
data_api_database : :class:`msdss_base_datbase:msdss_base_database.core.Database`
Database object used for the data API.
Author
------
Richard Wen <rrwen.dev@gmail.com>
Example
-------
Create Data API without users:
.. jupyter-execute::
from msdss_base_database import Database
from msdss_data_api import DataAPI
from msdss_users_api import UsersAPI
# Create database object
database = Database(
driver='postgresql',
user='msdss',
password='msdss123',
host='localhost',
port='5432',
database='msdss'
)
# Create a data api without users
app = DataAPI(database=database)
Create Data API with users:
.. jupyter-execute::
from msdss_base_database import Database
from msdss_data_api import DataAPI
from msdss_users_api import UsersAPI
# Create database object
database = Database(
driver='postgresql',
user='msdss',
password='msdss123',
host='localhost',
port='5432',
database='msdss'
)
# Create a data api with users
# CHANGE SECRETS TO STRONG PHRASES
users_api = UsersAPI(
'cookie-secret',
'jwt-secret',
'reset-secret',
'verification-secret',
database=database
)
app = DataAPI(users_api, database=database)
# Add users routes
app.add_apps(users_api)
# Run the app with app.start()
# Try API at http://localhost:8000/docs
# app.start()
"""
def __init__(
self,
users_api=None,
database=None,
data_router_settings={},
api=FastAPI(
title='MSDSS Data API',
version='0.2.9'
),
*args, **kwargs):
super().__init__(api=api, *args, **kwargs)
# (DataAPI_settings) Setup router params
database = database if database else Database()
data_router_settings['database'] = database
# (DataAPI_users) Add users app if specified
if users_api:
data_router_settings['users_api'] = users_api
# (DataAPI_router_data) Add data router
data_router = get_data_router(**data_router_settings)
self.add_router(data_router)
# (DataAPI_attr) Set attributes
self.data_api_database = database