Source code for py_abac.policy.conditions.numeric.base

"""
    Numeric conditions base class
"""

import logging

from marshmallow import Schema, fields

from ..base import ConditionBase, ABCMeta, abstractmethod

LOG = logging.getLogger(__name__)


[docs]def is_number(value) -> bool: """ Check if value is a number """ return isinstance(value, (float, int))
[docs]class NumericCondition(ConditionBase, metaclass=ABCMeta): """ Base class for numeric conditions """ def __init__(self, value): self.value = value
[docs] def is_satisfied(self, ctx) -> bool: if not is_number(ctx.attribute_value): LOG.debug( "Invalid type '%s' for attribute value at path '%s' for element '%s'." " Condition not satisfied.", type(ctx.attribute_value), ctx.attribute_path, ctx.ace ) return False return self._is_satisfied(ctx.attribute_value)
@abstractmethod def _is_satisfied(self, what) -> bool: """ Is numeric conditions satisfied :param what: numeric value to check :return: True if satisfied else False """ raise NotImplementedError()
[docs]class NumericConditionSchema(Schema): """ Base JSON schema for numeric conditions """ value = fields.Number(required=True, allow_none=False)