Skip to main content

rule-engine-core

Shared domain library for the rule-engine platform, published to PyPI as rule-engine-core. The three FastAPI services (metadata_service, position_server, platform_service, rule_engine) all depend on it.

What's in it

  • Expression parser (parser.py) — recursive-descent parser turning an infix rule/filter expression into a Node tree (! & |, comparisons, arithmetic, parentheses; AND/OR/NOT are accepted as aliases).
  • EntitiesRule and Filter (both extend EntityBase) with validate() and evaluate() over metadata fields and nested entities.
  • MetadataStore — loads column metadata from a JSON file or over HTTP.
  • Postgres DAOsEntityDao (rules/filters, persisted as pickled objects) and MetadataDao (the metadata table).
  • DbPool — thread-safe psycopg2 connection pool; one connection per unit of work via with pool.acquire() as conn:.
  • tracing — lightweight X-Trace-Id propagation (contextvars + log stamping
    • thread/pool helpers) shared across services.
  • identityCurrentUser, header parsing, require_admin, and the app_user/user_account_access lookup; framework-neutral identity primitives shared across services.

Install

pip install rule-engine-core

Build & publish (manual)

setup.py reads its dependencies from $BUILD_PATH/requirements.txt, so BUILD_PATH must be set.

python -m pip install --upgrade setuptools wheel twine
cd rule-engine-core
BUILD_PATH="$(pwd)" python setup.py sdist bdist_wheel
twine upload dist/*

Releases are normally cut automatically — see .github/workflows/publish.yml, which publishes to PyPI (then builds the service images) after CI passes on main.

Release order for consumer services

Every service installs this package from PyPI, so a change here is invisible to them until it's published. When a service needs new core API:

  1. Bump version in setup.py.
  2. Build and twine upload.
  3. Then bump the rule-engine-core>=<version> floor in that service's requirements.txt and pyproject.toml.

Until step 2 lands, a service PR carrying a raised floor fails at pip install and its CI goes red. That's the point — it's the reminder to publish, and it beats an ImportError in prod. So publish before merging the consumer.

Note on the pickle serialization contract

Rules and filters are stored in Postgres as pickled Python objects, and entity_dao.py installs sys.modules aliases so older pickles still load. Renaming/moving core modules or changing EntityBase's pickled fields can break unpickling of already-stored entities — treat these as a compatibility contract.

Docker

-> psql --username=$POSTGRES_USER -d $POSTGRES_DB

Release files for rule-engine-core 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rule-engine-core 0.2.1
File Size Uploaded
rule_engine_core-0.2.1.tar.gz 28.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for rule-engine-core 0.2.1
File Interpreter ABI Platform
rule_engine_core-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 52.7 kB

Release files / rule_engine_core-0.2.1.tar.gz

Download URL rule_engine_core-0.2.1.tar.gz
Size 28.2 kB
Tags Source
SHA-256 checksum
How to use checksums
d9eeb414ff97c4bf30d083bd8644e0066da1177f2796d23e21a6f6f1ebdf2264
BLAKE2b-256 checksum
How to use checksums
589aea60393e415f3e65467b47718171b3ac6b248e853e899e86ea45b18a9d32
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.15

Release files / rule_engine_core-0.2.1-py3-none-any.whl

Download URL rule_engine_core-0.2.1-py3-none-any.whl
Size 24.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0c2895eae4aefb9bed6ce8ea3017156725618a6436ea5d16f179c0cc12748604
BLAKE2b-256 checksum
How to use checksums
25c4f9df10e64c12b4a8183cdfc709d34fad80d09fc15cb5343038e072d68401
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.15

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files

0.2.0

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page