1
2
3 from xml.sax import handler
4 import Martel
5 from Martel import RecordReader
6
7 -class GrabElements(handler.ContentHandler, handler.ErrorHandler):
12
13
14
15
16
17
18
19
27
29 items1 = d1.items()
30 items1.sort()
31
32 items2 = d2.items()
33 items2.sort()
34
35 return cmp(items1, items2)
36
38 if cmp_dicts(d1, d2) != 0:
39 raise AssertionError("No match: %s, %s" % (d1, d2))
40
42 assert name1 == name2, (name1, name2)
43 check_dicts(dict1, dict2)
44
45
52
57
59 ele = get_element(Martel.Re("(?P<qwe?def=%7Edalke&a=1&b=2&cc=33>X)"))
60 check_element(ele, ("qwe", {"def": "~dalke",
61 "a": "1",
62 "b": "2",
63 "cc": "33"}))
65 name, attrs = get_element(Martel.Re("(?P<qwe?a=%7E>X)"))
66 check_dicts({"a": "~"}, attrs)
67
68 name, attrs = get_element(Martel.Re("(?P<qwe?a=%7e>X)"))
69 check_dicts({"a": "~"}, attrs)
70
71 name, attrs = get_element(Martel.Re("(?P<qwe?a=>X)"))
72 check_dicts({"a": ""}, attrs)
73
74 name, attrs = get_element(Martel.Re("(?P<qwe?>X)"))
75 check_dicts({}, attrs)
76
77 name, attrs = get_element(Martel.Re("(?P<qwe?a=%48%65%6c%6c%6f>X)"))
78 check_dicts({"a": "Hello"}, attrs)
79
80 name, attrs = get_element(Martel.Re("(?P<qwe?a=%7e%7E&b=%7e%7E>X)"))
81 check_dicts({"a": "~~", "b": "~~"}, attrs)
82
83 name, attrs = get_element(Martel.Re("(?P<qwe?a=%7e%7E&b=>X)"))
84 check_dicts({"a": "~~", "b": ""}, attrs)
85
96
97
99 format = Martel.Re("(?P<term?field=first>...)"
100 "(?P<term?field=second>...)"
101 "(?P<last>.)\R")
102 format = Martel.ParseRecords("all", {"author": "guido"}, format,
103 RecordReader.CountLines, (1,) )
104 parser = format.make_parser()
105 grab = GrabElements()
106 parser.setContentHandler(grab)
107 parser.parseString("aaabbbZ\ncccdddZ\n")
108 elements = grab.elements
109 assert len(elements) == 7
110 check_element(elements[0], ("all", {"author": "guido"}))
111 check_element(elements[1], ("term", {"field": "first"}))
112 check_element(elements[2], ("term", {"field": "second"}))
113 check_element(elements[3], ("last", {}))
114 check_element(elements[4], ("term", {"field": "first"}))
115 check_element(elements[5], ("term", {"field": "second"}))
116 check_element(elements[6], ("last", {}))
117
118
145
146
155
156 if __name__ == "__main__":
157 test()
158