source: branches/pyyaml3000/lib/yaml/error.py @ 52

Revision 52, 2.7 KB checked in by xi, 9 years ago (diff)

Cleanup error messages.

RevLine 
[45]1
[52]2__all__ = ['Marker', 'YAMLError', 'MarkedYAMLError']
3
4class Marker:
5
6    def __init__(self, name, line, column, buffer, pointer):
7        self.name = name
8        self.line = line
9        self.column = column
10        self.buffer = buffer
11        self.pointer = pointer
12
13    def get_snippet(self, indent=4, max_length=75):
14        if self.buffer is None:
15            return None
16        head = ''
17        start = self.pointer
18        while start > 0 and self.buffer[start-1] not in u'\0\r\n\x85\u2028\u2029':
19            start -= 1
20            if self.pointer-start > max_length/2-1:
21                head = ' ... '
22                start += 5
23                break
24        tail = ''
25        end = self.pointer
26        while end < len(self.buffer) and self.buffer[end] not in u'\0\r\n\x85\u2028\u2029':
27            end += 1
28            if end-self.pointer > max_length/2-1:
29                tail = ' ... '
30                end -= 5
31                break
32        snippet = self.buffer[start:end].encode('utf-8')
33        return ' '*indent + head + snippet + tail + '\n'  \
34                + ' '*(indent+self.pointer-start+len(head)) + '^'
35
36    def __str__(self):
37        snippet = self.get_snippet()
38        where = "  in \"%s\", line %d, column %d"   \
39                % (self.name, self.line+1, self.column+1)
40        if snippet is not None:
41            where += ":\n"+snippet
42        return where
43
[45]44class YAMLError(Exception):
45    pass
46
[52]47class MarkedYAMLError(YAMLError):
48
49    def __init__(self, context=None, context_marker=None,
50            problem=None, problem_marker=None):
51        self.context = context
52        self.context_marker = context_marker
53        self.problem = problem
54        self.problem_marker = problem_marker
55
56    def __str__(self):
57        lines = []
58        #for (place, marker) in [(self.context, self.context_marker),
59        #                        (self.problem, self.problem_marker)]:
60        #    if place is not None:
61        #        lines.append(place)
62        #        if marker is not None:
63        #            lines.append(str(marker))
64        if self.context is not None:
65            lines.append(self.context)
66            if self.context_marker is not None  \
67                and (self.problem is None or self.problem_marker is None
68                        or self.context_marker.name != self.problem_marker.name
69                        or self.context_marker.line != self.problem_marker.line
70                        or self.context_marker.column != self.problem_marker.column):
71                lines.append(str(self.context_marker))
72        if self.problem is not None:
73            lines.append(self.problem)
74            if self.problem_marker is not None:
75                lines.append(str(self.problem_marker))
76        return '\n'.join(lines)
77
78
79
Note: See TracBrowser for help on using the repository browser.