Skip to main content

Declare multi-table rules for SQLAlchemy update logic -- 40X more concise, Python for extensibility.

Project description

This package enables you to declare rules that govern SQLAlchemy update transaction logic (multi-table derivations, constraints, and actions such as sending mail or messages).

Logic is stated in Python, and is over an 40X more concise than code.

Features

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

Example:

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

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

To activate the rules declared above:

LogicBank.activate(session=session, activator=declare_logic)

Depends on:

  • SQLAlchemy

  • Python 3.8

More information:

The github project includes documentation and examples.

Acknowledgements

Many thanks to

  • Tyler Band, for testing and the Banking sample

  • Max Tardiveau, for testing

  • Nishanth Shyamsundar, for testing

  • Achim Götz, for design collaboration

Change Log

0.0.6 - Initial Version

0.0.7 - Class Name can differ from Table Name

0.0.8 - Much-reduced pip-install dependencies

0.0.9 - Hybrid attribute support, old_row example

0.1.0 - Hybrid attribute support, bug fix

0.1.1 - Allocation example - allocate a payment to a set of outstanding orders

0.2.0 - Minor design refactoring of allocation

0.3.0 - Include logic_bank.extensions (allocation), constraint exceptions raised as ConstraintExceptions

0.4.0 - Eliminate “engine” from runtime, to facilitate use in servers. Rework nw tests to centralize open logic in setup().

0.5.0 - Support for Referential Integrity, with examples.

0.5.1 - Support domain object constructors with complex (side effects) __init__ behavior; use row_mapper.column_attrs (not all_orm_descriptors) to avoid ‘flush already in progress’ when using flask_sqlalchemy

0.6.0 - Support for

  • Rule Extensibility

    • e.g., for auditing

  • Generic early events: early_row_event_all_classes (see Rule Extensibility link above)

    • e.g., for time/date stamping

  • New LogicRow functions (see Rule Extensibility link above):

    • are_attributes_changed

    • set_same_named_attributes

  • Minor rename of logic class in nw. Some screen shots may still show the old name (rules_bank.py) instead of logic.py.

  • Bug Fix: (normal) row events weren’t firing (other events - early and commit events - were fine)

0.7.0 - Custom Exceptions, Improved docstrings, samples (and Tutorial) reorganized into examples folder

0.8.0 - Custom Exceptions, callback signature changed to include additional parameters

0.9.0 - Add logicRow.get_derived_attributes, which can be used to enforce behaviors such as Unalterable Derivations

0.9.1 - Add session to logic_row.__str__()

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

logicbank-0.9.1.tar.gz (32.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

logicbank-0.9.1-py3-none-any.whl (41.6 kB view details)

Uploaded Python 3

File details

Details for the file logicbank-0.9.1.tar.gz.

File metadata

  • Download URL: logicbank-0.9.1.tar.gz
  • Upload date:
  • Size: 32.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.8.6

File hashes

Hashes for logicbank-0.9.1.tar.gz
Algorithm Hash digest
SHA256 aad50b3173ca512899fa9543ef09094cac371597b1c2024bd4ad4bee43c06b1e
MD5 764f92867b1754613922938a6b951490
BLAKE2b-256 1fd060158e64dc6f43f39b1baadcdf087df50e94ee8dfec0a51838c4c5e085f8

See more details on using hashes here.

File details

Details for the file logicbank-0.9.1-py3-none-any.whl.

File metadata

  • Download URL: logicbank-0.9.1-py3-none-any.whl
  • Upload date:
  • Size: 41.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.8.6

File hashes

Hashes for logicbank-0.9.1-py3-none-any.whl
Algorithm Hash digest
SHA256 2aed5b7bbf40e0429cfa486fdceb4bc32ad1f66271e4420746408484798905d6
MD5 885f5afcbfd817680b9601f82511f89e
BLAKE2b-256 31fec46cadf33a145ed2fed5be5dfd239459f806817402154d98d64357afa411

See more details on using hashes here.

Supported by

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