def _parse_from_text(self, principal, realm=None): r""" parse individual principal name components from the string representation of the principal. This is done in three steps: 1.) split the string at the unescaped '@' 2.) unescape any leftover '\@' sequences 3.) split the primary at the unescaped '/' 4.) unescape leftover '\/' :param principal: unicode representation of the principal name :param realm: if not None, this realm name will be used instead of the one parsed from `principal` :returns: tuple containing the principal name components and realm """ principal_name, parsed_realm = parse_princ_name_and_realm( principal, realm=realm) (principal_name,) = unescape_seq(u'@', principal_name) if parsed_realm is not None: (parsed_realm,) = unescape_seq(u'@', parsed_realm) name_components = split_principal_name(principal_name) name_components = unescape_seq(u'/', *name_components) return name_components, parsed_realm
def unquote_directive_value(value, quote_char): """Unquote a directive value :param value: string to unquote :param quote_char: character to strip. All escaped occurences of `quote_char` will be uncescaped during processing :returns: processed value """ unescaped_value = "".join(unescape_seq(quote_char, value)) if (unescaped_value.startswith(quote_char) and unescaped_value.endswith(quote_char)): return unescaped_value[1:-1] return unescaped_value
def unquote_directive_value(value, quote_char): """Unquote a directive value :param value: string to unquote :param quote_char: character to strip. All escaped occurences of `quote_char` will be uncescaped during processing :returns: processed value """ unescaped_value = "".join(unescape_seq(quote_char, value)) if (unescaped_value.startswith(quote_char) and unescaped_value.endswith(quote_char)): return unescaped_value[1:-1] return unescaped_value