Skip to main content

Formula Core Package

A shared formula evaluator library for FastAPI applications that synchronously evaluates string-template formulas with field-type-aware substitution.

Features

  • 56 built-in functions across Conditional, Math, Logical, String, Array, Date/Time, and Constant categories
  • Field-type-aware token resolution (dropdown/radio/checkbox label mapping, association reference following, date/datetime coercion, file metadata)
  • SEQUENCE() preprocessing via a Mongo counters collection for atomic counters
  • Per-call field + record caching to avoid redundant DB lookups
  • Standardized exceptions: MissingFieldError and FormulaEvaluationError

Installation

pip install abs-formula-core

or with Poetry:

poetry add abs-formula-core

Usage

from motor.motor_asyncio import AsyncIOMotorDatabase
from abs_formula_core import FormulaEvaluatorService, MissingFieldError

evaluator = FormulaEvaluatorService(db=cosmos_db)

formula = [
    "MULTIPLY(IF(",
    {"is_field": True, "field": "<dropdown_field_id>"},
    " == \"Yes\", MULTIPLY(",
    {"is_field": True, "field": "<number_field_id>"},
    ", 6), 24))",
]

try:
    value = await evaluator.evaluate(formula, record, entity_id="<entity_id>")
except MissingFieldError as e:
    # Field referenced by formula has no value on the record
    print(e.field_id)

Formula token shape

List[Union[
    str,                                                            # literal expression fragment
    {"is_field": True, "field": "<field_id>",                       # record field reference
     "reference_field": "<inner_field_id>"?},                       # optional association follow
]]

Strings are concatenated verbatim into the expression. Field-reference dicts are resolved against the record:

  • dropdown / radio / checkbox UUIDs are replaced with their option labels via the field definition.
  • association values are followed when reference_field is set: the referenced record is loaded and its inner field value substituted.
  • date / datetime / time / time_range / date_range are coerced into datetime objects for date-function compatibility.
  • file fields return their stored metadata shape.
  • number / text / boolean values are formatted as expression literals.

Supported functions

56 functions across categories: Conditional (IF, SWITCH), Math (SUM, COUNT, AVG, MIN, MAX, ROUND, ABS, DIVIDE, MULTIPLY, MINUS, MOD, POWER, SQRT, LOG), Logical (AND, OR, NOT, XOR, EXACT), String (CONCATENATE, UPPER, LOWER, LEN, LEFT, RIGHT, MID, TRIM, REPLACE, REPT, SEARCH, SUBSTITUTE, TEXT, IN, STR, VALUE), Array (APPEND, EXTEND, REMOVE), Date/Time (TODAY, NOW, DATE, DATEVALUE, DATEADD, DATEDIFF, ADD_DAYS, SUBTRACT_DAYS, WORKDAY, WORKDAYS, DAYS, MONTH, YEAR, DAY, HOUR, MINUTE, SECOND, HOURS_DIFF, MINUTES_DIFF, ADD_MINUTES, SUBTRACT_MINUTES, FORMAT_DATE, IOSWEEKNUM, WEEKNUM), Constants (PI, TRUE, FALSE).

Plus SEQUENCE() preprocessing via the counters Mongo collection.

Errors

  • MissingFieldError(field_id) — raised when a record field referenced by the formula has no value. Callers should surface a 422 with the field id.
  • FormulaEvaluationError(message, expression?) — raised when a formula fails to evaluate for non-missing-field reasons (malformed expression, division by zero, simpleeval rejection).

Metadata

Release files for abs-formula-core 0.1.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 abs-formula-core 0.1.1
File Size Uploaded
abs_formula_core-0.1.1.tar.gz 10.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for abs-formula-core 0.1.1
File Interpreter ABI Platform
abs_formula_core-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 24.2 kB

Release files / abs_formula_core-0.1.1.tar.gz

Download URL abs_formula_core-0.1.1.tar.gz
Size 10.8 kB
Tags Source
SHA-256 checksum
How to use checksums
eee7052f659b9028b449aa31eba77d68f6b2ccb984449546116324804f9dfe96
BLAKE2b-256 checksum
How to use checksums
52f3b76e8c058cc4b2bddb091d384f1700272101b3d0cd794f7140d136b6f3b0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.1.3 CPython/3.13.5 Darwin/24.5.0

Release files / abs_formula_core-0.1.1-py3-none-any.whl

Download URL abs_formula_core-0.1.1-py3-none-any.whl
Size 13.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
094f1141fda07e6f24cbb3a41c08bbbe3305f5043c65a64bef22e239377dcfc3
BLAKE2b-256 checksum
How to use checksums
9b62ef538346b2842105363d38ae2ecc920a8d18b6ff404fd9dc956afb9434f1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.1.3 CPython/3.13.5 Darwin/24.5.0

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

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