def _validate(self, p):
        """
        Recursively validates the pattern (p), ensuring it adheres to the proper key names and structure.
        """
        if self._is_operator(p):
            for operator_or_filter in (p[1] if p[0] != '!' else [p[1]]):
                if p[0] == '^':
                    self._validate_xor_args(p)
                self._validate(operator_or_filter)
        elif not self._is_value_filter(p) and not self._is_key_filter(p):
            raise ValueError('Not a valid operator or filter - {0}'.format(p))
def _validate ( self , p ) : if self . _is_operator ( p ) : for operator_or_filter in ( p [ 1 ] if p [ 0 ] != '!' else [ p [ 1 ] ] ) : if p [ 0 ] == '^' : self . _validate_xor_args ( p ) self . _validate ( operator_or_filter ) elif not self . _is_value_filter ( p ) and not self . _is_key_filter ( p ) : raise ValueError ( 'Not a valid operator or filter - {0}' . format ( p ) )
Recursively validates the pattern (p), ensuring it adheres to the proper key names and structure.