def init_dbm()

in src/ab/plugins/db/db_master.py [0:0]


def init_dbm(config):
    """
    dynamically add route for db tables
    """
    if not config.DBM:
        return

    from ab import app
    for table in config.DBM:
        # prepare mapper
        json_columns = table.get('json_columns')
        if isinstance(json_columns, str):
            table['json_columns'] = json_columns.split(',')
        mapper = Mapper(**table)
        key = table.get('key') or table['table_name']
        mappers[key] = mapper

        # default values for dbm properties
        list_columns = table.get('list_columns', '*')
        if isinstance(list_columns, str) and list_columns != '*':
            list_columns = list_columns.split(',')
        detail_columns = table.get('detail_columns', '*')
        if isinstance(detail_columns, str) and detail_columns != '*':
            detail_columns = detail_columns.split(',')
        default_page_size = table.get('default_page_size', 10)
        max_page_size = table.get('max_page_size', 50)
        operations = table.get('operations', 'CRUD')

        # bind url
        if 'C' in operations:
            app.add_url_rule('/api/table/{key}'.format(key=key),
                 'add_' + key,
                 update_wrapper(partial(add, mapper), add),
                 methods=['POST'])
        if 'R' in operations:
            app.add_url_rule('/api/table/{key}'.format(key=key),
                 'list_page_' + key,
                 update_wrapper(partial(list_page, mapper, list_columns, default_page_size, max_page_size), list_page),
                 methods=['GET'])
            app.add_url_rule('/api/table/{key}/<int:id>'.format(key=key),
                 'get_one_by_id_' + key,
                 update_wrapper(partial(get_one_by_id, mapper, fields=detail_columns), get_one_by_id),
                 methods=['GET'])
        if 'U' in operations:
            app.add_url_rule('/api/table/{key}/<int:id>'.format(key=key),
                 'update_one_by_id_' + key,
                 update_wrapper(partial(update_one_by_id, mapper), update_one_by_id),
                 methods=['PUT'])
        if 'D' in operations:
            app.add_url_rule('/api/table/{key}/<int:id>'.format(key=key),
                             'delete_one_by_id_' + key,
                             update_wrapper(partial(delete_one_by_id, mapper), delete_one_by_id),
                             methods=['DELETE'])