| Viewing file:  error.py (2.47 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
__all__ = ['Mark', 'YAMLError', 'MarkedYAMLError']
 
 class Mark:
 
 def __init__(self, name, index, line, column, buffer, pointer):
 self.name = name
 self.index = index
 self.line = line
 self.column = column
 self.buffer = buffer
 self.pointer = pointer
 
 def get_snippet(self, indent=4, max_length=75):
 if self.buffer is None:
 return None
 head = ''
 start = self.pointer
 while start > 0 and self.buffer[start-1] not in '\0\r\n\x85\u2028\u2029':
 start -= 1
 if self.pointer-start > max_length/2-1:
 head = ' ... '
 start += 5
 break
 tail = ''
 end = self.pointer
 while end < len(self.buffer) and self.buffer[end] not in '\0\r\n\x85\u2028\u2029':
 end += 1
 if end-self.pointer > max_length/2-1:
 tail = ' ... '
 end -= 5
 break
 snippet = self.buffer[start:end]
 return ' '*indent + head + snippet + tail + '\n'  \
 + ' '*(indent+self.pointer-start+len(head)) + '^'
 
 def __str__(self):
 snippet = self.get_snippet()
 where = "  in \"%s\", line %d, column %d"   \
 % (self.name, self.line+1, self.column+1)
 if snippet is not None:
 where += ":\n"+snippet
 return where
 
 class YAMLError(Exception):
 pass
 
 class MarkedYAMLError(YAMLError):
 
 def __init__(self, context=None, context_mark=None,
 problem=None, problem_mark=None, note=None):
 self.context = context
 self.context_mark = context_mark
 self.problem = problem
 self.problem_mark = problem_mark
 self.note = note
 
 def __str__(self):
 lines = []
 if self.context is not None:
 lines.append(self.context)
 if self.context_mark is not None  \
 and (self.problem is None or self.problem_mark is None
 or self.context_mark.name != self.problem_mark.name
 or self.context_mark.line != self.problem_mark.line
 or self.context_mark.column != self.problem_mark.column):
 lines.append(str(self.context_mark))
 if self.problem is not None:
 lines.append(self.problem)
 if self.problem_mark is not None:
 lines.append(str(self.problem_mark))
 if self.note is not None:
 lines.append(self.note)
 return '\n'.join(lines)
 
 
 |