Source code for aiosnow.query.condition
from __future__ import annotations
from typing import Union
from .operators import LogicalOperator
[docs]class Condition:
def __init__(self, key: str, operator: str, value: Union[str, int, None]):
self.operand_left = key
self.operand_right = value
self.operator_conditional = operator
self.operator_logical = ""
self.registry = [self] # Registry of fields connected by logical operators
[docs] def __str__(self) -> str:
return self.serialize()
[docs] def serialize(self, cond: Condition = None) -> str:
"""Serializes this Condition into a sysparm query condition
Returns: sysparm query string"""
c = cond or self
return "".join(
[
c.operator_logical,
c.operand_left,
c.operator_conditional,
str(c.operand_right),
]
)
[docs] def serialize_registry(self) -> str:
"""Condition string representation
Returns: sysparm query
"""
chain = ""
for c in self.registry:
chain += self.serialize(c)
return chain
def _merge_registry(self, registry: list) -> None:
self.registry += registry
def _add_condition(self, cond: Condition, operator: str) -> Condition:
"""Adds a new condition to chain
Args:
cond: Condition
operator: Logical operator
Returns: self
"""
cond.operator_logical = str(operator)
self._merge_registry(cond.registry)
return self
[docs] def __and__(self, next_cond: Condition) -> Condition:
"""Appends ^ Condition to chain"""
return self._add_condition(next_cond, LogicalOperator.AND)
[docs] def __or__(self, next_cond: Condition) -> Condition:
"""Appends ^OR Condition to chain"""
return self._add_condition(next_cond, LogicalOperator.OR)
[docs] def __xor__(self, next_cond: Condition) -> Condition:
"""Appends ^NQ Condition to chain"""
return self._add_condition(next_cond, LogicalOperator.NQ)