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:
Basic Web App - Flask Appbuilder
Generated fab pages look as shown below:
Multi-page: apps include 1 page per table
Multi-table: pages include related_views for each related child table, and join in parent data
Favorite field first: first-displayed field is “name”, or contains “name” (configurable)
Predictive joins: favorite field of each parent is shown (product name - not product id)
Ids last: such boring fields are not shown on lists, and at the end on other pages
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:
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.04: fix default project name
02/07/2021 - 01.04.03: db_url default (for Jupyter)
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
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for ApiLogicServer-1.4.4-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3f48b9de3d9b9f02c37c5db06201dfd4da25540668b4af95a7625a90a482ec4d |
|
MD5 | 5dddee4913a3cc751bde2fdab67a6ffc |
|
BLAKE2b-256 | f9c337460f33cdeb433b0eada3cbdd005287601ad2ad630a49a111b38b3ec7a9 |