def validate(self, value, param_name, exc=None, logger=None):
if exc is not None:<EOL><INDENT>self.exc = exc<EOL><DEDENT>if logger is not None:<EOL><INDENT>self.logger = logger<EOL><DEDENT>if self.type is not None and not type(value) == self.type:  <EOL><INDENT>self.error(<EOL>f'<STR_LIT>'<EOL>)<EOL><DEDENT>if self.instance is not None and not isinstance(value, self.instance):<EOL><INDENT>self.error(<EOL>f'<STR_LIT>'<EOL>f'<STR_LIT>'<EOL>)<EOL><DEDENT>if self.min is not None and value < self.min:<EOL><INDENT>self.error(f'<STR_LIT>')<EOL><DEDENT>if self.max is not None and value > self.max:<EOL><INDENT>self.error(f'<STR_LIT>')<EOL><DEDENT>if self.regex is not None and not re_full_match(self.regex, value):<EOL><INDENT>self.error(f'<STR_LIT>')<EOL><DEDENT>if self.in_list is not None and value not in self.in_list:<EOL><INDENT>self.error(f'<STR_LIT>')<EOL><DEDENT>if self.path_exists and not exists(value):<EOL><INDENT>self.error(f'<STR_LIT>')<EOL><DEDENT>return True<EOL>
:param value: value to validate
:param param_name: name of the value (for logging purpose)
:param exc: exception to raise (default is "ValidatorError")
:param logger: logger to use (default will be "Validator.logger")