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
counterscollection for atomic counters - Per-call field + record caching to avoid redundant DB lookups
- Standardized exceptions:
MissingFieldErrorandFormulaEvaluationError
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_fieldis set: the referenced record is loaded and its inner field value substituted. - date / datetime / time / time_range / date_range are coerced into
datetimeobjects 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)
| File | Size | Uploaded | |
|---|---|---|---|
| abs_formula_core-0.1.1.tar.gz | 10.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|