<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def Allow(self, path, require=None, *args, **kwargs):
 """Checks if given path pattern fits the subject passed in constructor. Registers "allow" check in this helper. "Allow" check consists of fnmatch path pattern and optional "require" check. *args and *kwargs will be passed to the optional "require" check function. All registered "allow" checks are executed in CheckAccess() call. The following is done for every check: * If fnmatch path pattern does not match the check is skipped. * If fnmatch path pattern matches and the require parameter is None (does not specify an additiona check) then match is successful. No other checks are executed. * If fnmatch path pattern matches and the require parameter specifies an additional check, which is a function, and this function returns True, then match is successful. No other checks are executed. * If fnmatch path pattern matches but additional check raises, match is unsuccessful, no other checks are executed, and exception is propagated. Args: path: A string, which is a fnmatch pattern. require: Function that will be called to perform additional checks. None by default. It will be called like this: require(subject_urn, *args, **kwargs). If this function returns True, the check is considered passed. If it raises, the check is considered failed, no other checks are made and exception is propagated. *args: Positional arguments that will be passed to "require" function. **kwargs: Keyword arguments that will be passed to "require" function. """

    regex_text = fnmatch.translate(path)
    regex = re.compile(regex_text)
    self.checks.append((regex_text, regex, require, args, kwargs))