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
- Reproduce the parse in a REPL to see the real exception type
- Upgrade/downgrade jsonpath-ng to a stable version (pip install -U jsonpath-ng)
- 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
- Keep jsonpath-ng pinned to a tested version
- Avoid extremely long or deeply nested path expressions
- Catch Exception separately and log it rather than relying on the library's two error types
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
- Zip Slip path traversal detected in backup archive: {member.
- Validation failed: {'; '.join(error_details)}
- Backup archive decompressed size ({total_uncompressed // (10
- BrowserStepsStepException
- A system-error occurred when validating your XPath expressio
AI-assisted analysis of dgtlmoon/changedetection.io@5d9c7c6da7 (2026-08-27).
Data as JSON: /api/errors/7463cdbcf4722fda.
Report an issue: GitHub.