Skip to main content

Create JSON:API and Web App from database, with LogicBank -- 40X more concise, Python for extensibility.

Project description

Creates an executable API from a database:

  • API: swagger/OpenAPI and JSON:API compliant. Uses SAFRS , a modern approach that enables client applications to configure their own API to reduce network traffic.

  • Web App: a multi-page, multi-table web app; incorporates Flask AppBuilder and fab-quickstart.

  • Logic: spreadsheet-like rules for multi-table derivations and constraint that reduce transaction logic by 40X, using Logic Bank.

Usage

Installation

Install with pip:

cd ~/Desktop
mkdir server
cd server
virtualenv venv
source venv/bin/activate
# windows venv\Scripts\activate
pip install ApiLogicServer

Generation

This verifies proper install:

ApiLogicServer create --project_name=my_api_logic_server
cd my_api_logic_server  # create / initialize the venv
virtualenv venv
source venv/bin/activate
# windows venv\Scripts\activate
pip install -r requirements.txt

More commonly, you would include the db_url parameter, a SQLAlchemy url designating the database used for creation.

You may also wish to include the open_with parameter, to open an IDE or Editor on the created project. For example, PyCharm (charm) will open the project and create / initialize the venv automatically (some PyCharm configuration may be required):

ApiLogicServer create --project_name=my_api_logic_server db_url=sqlite:///nw.sqlite --open_with=charm

Execution

python api_logic_server_run.py
python ui/basic_web_app/run.py

Features

API: SAFRS JSON:API and Swagger

Your API is available in swagger:

https://github.com/valhuber/ApiLogicServer/blob/main/images/swagger.png?raw=true

Basic Web App - Flask Appbuilder

Generated fab pages look as shown below:

  1. Multi-page: apps include 1 page per table

  2. Multi-table: pages include related_views for each related child table, and join in parent data

  3. Favorite field first: first-displayed field is “name”, or contains “name” (configurable)

  4. Predictive joins: favorite field of each parent is shown (product name - not product id)

  5. Ids last: such boring fields are not shown on lists, and at the end on other pages

https://raw.githubusercontent.com/valhuber/fab-quick-start/master/images/generated-page.png

Customize your app by editing ui/basic_web_app/app/views.py.

Logic:

Logic is declared in Python (example below), and is:

  • Extensible: logic consists of rules (see below), plus standard Python code

  • Multi-table: rules like sum automate multi-table transactions

  • Scalable: rules are pruned and optimized; for example, sums are processed as 1 row adjustment updates, rather than expensive SQL aggregate queries

  • Manageable: develop and debug your rules in IDEs, manage it in SCS systems (such as git) using existing procedures

The following 5 rules represent the same logic as 200 lines of Python:

https://github.com/valhuber/LogicBank/raw/main/images/example.png

Declare your logic by editing logic/rules_bank.py

More information:

The github project includes documentation and examples.

Acknowledgements

Many thanks to

  • Thomas Pollet, for SAFRS

  • Daniel Gaspar, for Flask AppBuilder

  • Achim Götz, for design collaboration

Change Log

02/07/2021 - 01.04.02: Internal Renaming

02/06/2021 - 01.04.00: Fix constraint reporting, get related (issues 7,8)

02/02/2021 - 01.04.00: TBD

02/01/2021 - 01.03.01: Fix logic logging, nw rules

01/31/2021 - 01.03.00: Resolve n:m relationships (revised models.py)

01/29/2021 - 01.02.04: Minor cleanup

01/29/2021 - 01.02.03: Flask AppBuilder fixes - Admin setup, class vs table names (wip)

01/28/2021 - 01.02.02: Command line cleanup

01/27/2021 - 01.02.00: Many * Host option * –from_git defaults to local directory * hello world example * nw rules pre-created

01/25/2021 - 01.01.01: MySQL fixes

Project details


Release history Release notifications | RSS feed

This version

1.4.2

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ApiLogicServer-1.4.2.tar.gz (34.6 kB view hashes)

Uploaded Source

Built Distribution

ApiLogicServer-1.4.2-py3-none-any.whl (194.4 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page