bvanelli / actualpy

Python API implementation for Actual server - reference https://actualbudget.org/
https://actualpy.readthedocs.io/en/latest/
27 stars 7 forks source link

Error when trying to run rules or evaluate rules #46

Closed bobokun closed 3 months ago

bobokun commented 3 months ago

Checks

Reproducible example

from actual import Actual

with Actual(base_url="http://localhost:5006", password="mypass", file="My budget") as actual:
    actual.run_rules()
from actual import Actual
from actual.queries import get_ruleset, get_transactions

with Actual(base_url="http://localhost:5006", password="mypass", file="My budget") as actual:
    rs = get_ruleset(actual.session)
    transactions = get_transactions(actual.session)
    for rule in rs:
        for t in transactions:
            if rule.evaluate(t):
                print(f"Rule {rule} matches for {t}")

Log output

Traceback (most recent call last):
  File "/mnt/cache/appdata/scripts/actual-test.py", line 8, in <module>
    actual.run_rules()
  File "/mnt/cache/appdata/scripts/.venv/lib64/python3.9/site-packages/actual/__init__.py", line 401, in run_rules
    ruleset = get_ruleset(self.session)
  File "/mnt/cache/appdata/scripts/.venv/lib64/python3.9/site-packages/actual/queries.py", line 586, in get_ruleset
    conditions = TypeAdapter(list[Condition]).validate_json(rule.conditions)
  File "/mnt/cache/appdata/scripts/.venv/lib64/python3.9/site-packages/pydantic/type_adapter.py", line 142, in wrapped
    return func(self, *args, **kwargs)
  File "/mnt/cache/appdata/scripts/.venv/lib64/python3.9/site-packages/pydantic/type_adapter.py", line 391, in validate_json
    return self.validator.validate_json(data, strict=strict, context=context)
pydantic_core._pydantic_core.ValidationError: 8 validation errors for list[function-after[check_operation_type(), function-after[convert_value(), Condition]]]
3.value.int
  Input should be a valid integer [type=int_type, input_value={'num1': -6000, 'num2': -100000}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.8/v/int_type
3.value.float
  Input should be a valid number [type=float_type, input_value={'num1': -6000, 'num2': -100000}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.8/v/float_type
3.value.str
  Input should be a valid string [type=string_type, input_value={'num1': -6000, 'num2': -100000}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.8/v/string_type
3.value.list[str]
  Input should be a valid array [type=list_type, input_value={'num1': -6000, 'num2': -100000}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.8/v/list_type
3.value.function-after[validate_end_date(), Schedule].start
  Field required [type=missing, input_value={'num1': -6000, 'num2': -100000}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.8/v/missing
3.value.list[BaseModel]
  Input should be a valid array [type=list_type, input_value={'num1': -6000, 'num2': -100000}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.8/v/list_type
3.value.BaseModel.id
  Field required [type=missing, input_value={'num1': -6000, 'num2': -100000}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.8/v/missing
3.value.date
  Input should be a valid date [type=date_type, input_value={'num1': -6000, 'num2': -100000}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.8/v/date_type

Issue description

The issue primarily happens around rule evaluation

Expected behavior

Rules are evaluated and run

Installed versions