dgtlmoon/changedetection.io · error · EmptyConditionRuleRowNotUsable

One of the 'conditions' rulesets is incomplete, cannot run.

Error message

One of the 'conditions' rulesets is incomplete, cannot run.

What it means

The bare `except:` after the JSONPath parse call catches any exception other than JsonPathParserError/JsonPathLexerError raised while parsing — for example a TypeError or internal jsonpath_ng error. It indicates an unexpected system failure during JSONPath validation, not a normal syntax problem.

Source

Thrown at changedetectionio/conditions/__init__.py:58

def convert_to_jsonlogic(logic_operator: str, rule_dict: list):
    """
    Convert a structured rule dict into a JSON Logic rule.

    :param rule_dict: Dictionary containing conditions.
    :return: JSON Logic rule as a dictionary.
    """


    json_logic_conditions = []

    for condition in rule_dict:
        operator = condition["operator"]
        field = condition["field"]
        value = condition["value"]

        if not operator or operator == 'None' or not value or not field:
            raise EmptyConditionRuleRowNotUsable()

        # Convert value to int/float if possible
        try:
            if isinstance(value, str) and "." in value and str != "None":
                value = float(value)
            else:
                value = int(value)
        except (ValueError, TypeError):
            pass  # Keep as a string if conversion fails

        # Handle different JSON Logic operators properly
        if operator == "in":
            json_logic_conditions.append({"in": [value, {"var": field}]})  # value first
        elif operator in ("!", "!!", "-"):
            json_logic_conditions.append({operator: [{"var": field}]})  # Unary operators
        elif operator in ("min", "max", "cat"):
            json_logic_conditions.append({operator: value})  # Multi-argument operators
        else:

View on GitHub (pinned to 5d9c7c6da7)

Solutions

  1. Reproduce the parse in a REPL to see the real exception type
  2. Upgrade/downgrade jsonpath-ng to a stable version (pip install -U jsonpath-ng)
  3. Simplify the expression to avoid pathological nesting

Example fix

null
Defensive patterns

Strategy: try-catch

Try / catch

try:
    parse(expr)
except (JsonPathParserError, JsonPathLexerError):
    handle_syntax()
except Exception as e:
    log.exception('unexpected jsonpath-ng failure')
    handle_system(e)

Prevention

When it happens

Trigger: jsonpath_ng.ext.parse raising an unexpected exception type (e.g. TypeError on odd unicode input, recursion errors on deeply nested paths, or version-specific internal exceptions) that is not one of the two handled error classes.

Common situations: jsonpath-ng version changes introducing new exception types; pathological or extremely long/nested expressions causing RecursionError; unusual input that hits a jsonpath-ng bug. Rare compared to the handled parser errors.

Related errors


AI-assisted analysis of dgtlmoon/changedetection.io@5d9c7c6da7 (2026-08-27). Data as JSON: /api/errors/7463cdbcf4722fda. Report an issue: GitHub.