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

"""
    String conditions base class
"""

import logging

from marshmallow import Schema, fields

from ..base import ConditionBase, ABCMeta, abstractmethod

LOG = logging.getLogger(__name__)


[docs]def is_string(value) -> bool: """ Check if value is string """ return isinstance(value, str)
[docs]class StringCondition(ConditionBase, metaclass=ABCMeta): """ Base class for string conditions """ def __init__(self, value, case_insensitive=False): self.case_insensitive = case_insensitive or False self.value = value
[docs] def is_satisfied(self, ctx) -> bool: if not is_string(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 string conditions satisfied :param what: string value to check :return: True if satisfied else False """ raise NotImplementedError()
[docs]class StringConditionSchema(Schema): """ Base JSON schema for string conditions """ value = fields.String(required=True, allow_none=False) case_insensitive = fields.Bool(default=False, missing=False)