def test_control(self): self.assertEqual( list(StringParser(escape_chars=";").parse(r"foo;bar")), [(0, "f"), (0, "o"), (0, "o"), (1, ";"), (0, "b"), (0, "a"), (0, "r")])
def test_split_recombine_escaped_meta_reassemble(self): sp = StringParser(escape_chars=";+") sstr = sp.split("f\\+o;bar", control_char=";", reassemble=True) self.assertEqual(len(sstr), 2) self.assertEqual(sstr[0], "f\\+o") self.assertEqual(sstr[1], "bar")
def test_split_recombine_meta(self): sp = StringParser(escape_chars=";+") sstr = sp.split("f+o;bar", control_char=";") self.assertEqual(len(sstr), 2) self.assertEqual(sp.escape(sstr[0]), "f+o") self.assertEqual(sp.escape(sstr[1]), "bar")
def test_split_escaped_meta(self): sstr = StringParser(escape_chars=";+").split("f\\+o;bar", control_char=";") self.assertEqual(len(sstr), 2) self.assertEqual(sstr[0], [(0, "f"), (0, "+"), (0, "o")]) self.assertEqual(sstr[1], [(0, "b"), (0, "a"), (0, "r")])
def test_no_escape_expected(self): with self.assertRaises(StringParseException): list(StringParser(escape_chars=";").parse(r"foo\bar"))
def test_end_of_string(self): with self.assertRaises(StringParseException): list(StringParser(escape_chars=";").parse("foo;bar\\"))
def test_unescaped(self): self.assertEqual(list(StringParser(escape_chars=";").parse("foo")), [(0, "f"), (0, "o"), (0, "o")])
# along with x509sak; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Johannes Bauer <*****@*****.**> import collections import pyasn1.error import pyasn1.type.char import pyasn1.codec.der.encoder import pyasn1.codec.der.decoder from pyasn1.type.char import UTF8String from x509sak.OID import OID, OIDDB from x509sak.Exceptions import InvalidInputException from x509sak.StringParser import StringParser _RFC2253_StringParser = StringParser(escape_chars="\\+\"<>;,=") class RelativeDistinguishedName(): _RDNItem = collections.namedtuple("RDNItem", [ "oid", "derdata", "asn1", "decodable", "printable", "printable_value" ]) def __init__(self, rdn_list): assert (isinstance(rdn_list, (tuple, list))) assert (all(isinstance(value[0], OID) for value in rdn_list)) assert (all(isinstance(value[1], bytes) for value in rdn_list)) if len(rdn_list) == 0: raise InvalidInputException("Empty RDN is not permitted.") self._rdn_list = tuple( self._decode_item(oid, derdata) for (oid, derdata) in rdn_list)