routers

get_data_router

msdss_data_api.routers.get_data_router(users_api=None, database=None, route_settings={'columns': {'_enable': True, '_get_user': {}, '_restricted_tables': ['data', 'user'], 'path': '/{dataset}/columns'}, 'create': {'_enable': True, '_get_user': {'superuser': True}, '_restricted_tables': ['data', 'user'], 'path': '/'}, 'delete': {'_enable': True, '_get_user': {'superuser': True}, '_restricted_tables': ['data', 'user'], 'path': '/{dataset}'}, 'id': {'_enable': True, '_get_user': {}, '_restricted_tables': ['data', 'user'], 'path': '/{dataset}/id/{id}'}, 'insert': {'_enable': True, '_get_user': {'superuser': True}, '_restricted_tables': ['data', 'user'], 'path': '/{dataset}/insert'}, 'metadata': {'_enable': True, '_get_user': {}, '_restricted_tables': ['data', 'user'], 'path': '/{dataset}/metadata', 'tags': ['metadata']}, 'metadata_update': {'_enable': True, '_get_user': {'superuser': True}, '_restricted_tables': ['data', 'user'], 'path': '/{dataset}/metadata', 'tags': ['metadata']}, 'query': {'_enable': True, '_get_user': {}, '_restricted_tables': ['data', 'user'], 'path': '/{dataset}'}, 'rows': {'_enable': True, '_get_user': {}, '_restricted_tables': ['data', 'user'], 'path': '/{dataset}/rows'}, 'search': {'_enable': True, '_get_user': {}, '_restricted_tables': ['data', 'user'], 'path': '/'}, 'update': {'_enable': True, '_get_user': {'superuser': True}, '_restricted_tables': ['data', 'user'], 'path': '/{dataset}'}}, prefix='/data', tags=['data'], *args, **kwargs)[source]

Get a data router.

Parameters
  • 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 (msdss_base_database.core.Database or None) – A msdss_base_database.core.Database object for managing data. If None, a default database will be used.

  • route_settings (dict) –

    Dictionary of settings for the data routes. Each route consists of the following keys:

    • path: resource path for the route

    • tags: tags for open api spec

    • _enable (bool): Whether this route should be included or not

    • _restricted_tables (list(str)): List of table names not accessible by this route

    • _get_user (dict or None): Additional arguments passed to the msdss_users_api.msdss_users_api.core.UsersAPI.get_current_user() function for the route - only applies if parameter users_api is not None and this settings is not None, otherwise no user authentication will be added for this route

    • **kwargs: Additional arguments passed to fastapi:fastapi.FastAPI.get() for the id route

    The default settings are:

    {'columns': {'_enable': True,
                 '_get_user': {},
                 '_restricted_tables': ['data', 'user'],
                 'path': '/{dataset}/columns'},
     'create': {'_enable': True,
                '_get_user': {'superuser': True},
                '_restricted_tables': ['data', 'user'],
                'path': '/'},
     'delete': {'_enable': True,
                '_get_user': {'superuser': True},
                '_restricted_tables': ['data', 'user'],
                'path': '/{dataset}'},
     'id': {'_enable': True,
            '_get_user': {},
            '_restricted_tables': ['data', 'user'],
            'path': '/{dataset}/id/{id}'},
     'insert': {'_enable': True,
                '_get_user': {'superuser': True},
                '_restricted_tables': ['data', 'user'],
                'path': '/{dataset}/insert'},
     'metadata': {'_enable': True,
                  '_get_user': {},
                  '_restricted_tables': ['data', 'user'],
                  'path': '/{dataset}/metadata',
                  'tags': ['metadata']},
     'metadata_update': {'_enable': True,
                         '_get_user': {'superuser': True},
                         '_restricted_tables': ['data', 'user'],
                         'path': '/{dataset}/metadata',
                         'tags': ['metadata']},
     'query': {'_enable': True,
               '_get_user': {},
               '_restricted_tables': ['data', 'user'],
               'path': '/{dataset}'},
     'rows': {'_enable': True,
              '_get_user': {},
              '_restricted_tables': ['data', 'user'],
              'path': '/{dataset}/rows'},
     'search': {'_enable': True,
                '_get_user': {},
                '_restricted_tables': ['data', 'user'],
                'path': '/'},
     'update': {'_enable': True,
                '_get_user': {'superuser': True},
                '_restricted_tables': ['data', 'user'],
                'path': '/{dataset}'}}
    

    Any unspecified settings will be replaced by their defaults.

  • prefix (str) – Prefix path to all routes belonging to this router.

  • tags (list(str)) – Tags for all routes in this router.

  • *args – Additional arguments to accept any extra parameters passed to fastapi:fastapi.routing.APIRouter.

  • **kwargs – Additional arguments to accept any extra parameters passed to fastapi:fastapi.routing.APIRouter.

Returns

A router object used for data routes. See FastAPI bigger apps

Return type

fastapi:fastapi.routing.APIRouter

Author

Richard Wen <rrwen.dev@gmail.com>

Example

from msdss_base_database import Database
from msdss_base_api import API
from msdss_users_api import UsersAPI
from msdss_data_api.routers import get_data_router

# Create database object
database = Database(
    driver='postgresql',
    user='msdss',
    password='msdss123',
    host='localhost',
    port='5432',
    database='msdss'
)

# Create an app
app = API()

# Add the data router
router = get_data_router(database=database)
app.add_router(router)

# Add the data router with users
# CHANGE SECRETS TO STRONG PHRASES
app = API()
users_api = UsersAPI(
    'cookie-secret',
    'jwt-secret',
    'reset-secret',
    'verification-secret',
    database=database
)
router = get_data_router(users_api, database=database)
app.add_router(router)

# Host app at https://localhost:8000
# Try it at https://localhost:8000/docs
# app.start()