38 |
from xml.sax import saxutils |
from xml.sax import saxutils |
39 |
from gnue.common.definitions.GParserHelpers import GContent |
from gnue.common.definitions.GParserHelpers import GContent |
40 |
|
|
41 |
class TriggerError: |
class TriggerError(StandardError): |
42 |
def __init__(self, msg): |
pass |
43 |
self.msg = msg |
|
44 |
|
class TriggerRuntimeError(StandardError): |
45 |
|
pass |
46 |
|
|
47 |
class TriggerAbort: |
class TriggerAbort: |
48 |
pass |
pass |
162 |
try: |
try: |
163 |
self._code = compile(revisedTriggerCode, '<string>', 'exec') |
self._code = compile(revisedTriggerCode, '<string>', 'exec') |
164 |
except SyntaxError, err: |
except SyntaxError, err: |
165 |
try: |
_handleTriggerException(self, err) |
166 |
name = self.name |
# GDebug.printMesg(0, "Syntax error in line %s of trigger in element ??" \ |
167 |
except: |
# % ( err.lineno )) |
168 |
name = self.type |
# msg = _('There is a syntax error in one of this document\'s triggers.\n\nTraceback:\n') + \ |
169 |
|
# ' Trigger "%s" (%s), line %s' % (name, self.type, err.lineno - 1) + "\n" + \ |
170 |
|
# ' ' + err.text[:-1] + "\n" + \ |
171 |
print dir(err) |
# ' ' + (' ' * err.offset) + '^\n' + \ |
172 |
GDebug.printMesg(0, "Syntax error in line %s of trigger in element ??" \ |
# 'SyntaxError: ' + err.msg |
173 |
% ( err.lineno )) |
# raise ValueError, msg |
|
msg = _('There is a syntax error in one of this document\'s triggers.\n\nTraceback:\n') + \ |
|
|
' Trigger "%s" (%s), line %s' % (name, self.type, err.lineno - 1) + "\n" + \ |
|
|
' ' + err.text[:-1] + "\n" + \ |
|
|
' ' + (' ' * err.offset) + '^\n' + \ |
|
|
'SyntaxError: ' + err.msg |
|
|
raise ValueError, msg |
|
174 |
|
|
175 |
def thisTrigger(myself, code = self._code, |
def thisTrigger(myself, code = self._code, |
176 |
triggerns = self._triggerns, |
triggerns = self._triggerns, |
188 |
|
|
189 |
# And execute our code |
# And execute our code |
190 |
exec code in globalns, localns |
exec code in globalns, localns |
191 |
except TriggerError: |
except StandardError, err: |
192 |
raise |
if not isinstance(err, TriggerError): |
193 |
except: |
# May be better to deal with this in GTriggerExtension |
194 |
# May be better to deal with this in GTriggerExtension |
_handleTriggerException(self, err) |
195 |
raise |
else: |
196 |
import sys |
# TODO: Um, something else? |
197 |
GDebug.printMesg(0, "%s in trigger code, value: %s" % (sys.exc_type, sys.exc_value)) |
raise |
198 |
|
|
199 |
self.__call__ = thisTrigger |
self.__call__ = thisTrigger |
200 |
|
|
301 |
self._trigger = {} |
self._trigger = {} |
302 |
|
|
303 |
#self._validTriggers = validTriggers |
#self._validTriggers = validTriggers |
304 |
|
|
305 |
# associateTrigger |
# associateTrigger |
306 |
# |
# |
307 |
# Associates a trigger with the object. More than one trigger of a specific type |
# Associates a trigger with the object. More than one trigger of a specific type |
371 |
|
|
372 |
return xmlElements |
return xmlElements |
373 |
|
|
374 |
|
|
375 |
|
def _handleTriggerException(self, err): |
376 |
|
if hasattr(self, 'name'): |
377 |
|
name = self.name |
378 |
|
else: |
379 |
|
name = self.type |
380 |
|
|
381 |
|
if isinstance(err, SyntaxError): |
382 |
|
msg = _('There is an error in one of this document\'s triggers.\n\nTraceback:\n') + \ |
383 |
|
' Trigger "%s" (%s), line %s' % (name, self.type, err.lineno - 1) + "\n" + \ |
384 |
|
' ' + err.text[:-1] + "\n" + \ |
385 |
|
' ' + (' ' * (err.offset-1)) + '^\n' + \ |
386 |
|
'SyntaxError: ' + err.msg |
387 |
|
else: |
388 |
|
tp, ec, tb = sys.exc_info() |
389 |
|
tb = tb.tb_next |
390 |
|
try: |
391 |
|
txt = ec.args |
392 |
|
except: |
393 |
|
txt = "" |
394 |
|
msg = _('There is an error in one of this document\'s triggers.\n\nTraceback:\n') + \ |
395 |
|
' Trigger "%s" (%s), line %s' % (name, self.type, int(tb.tb_lineno) - 1) + "\n" + \ |
396 |
|
' %s\n' % (ec) + \ |
397 |
|
'%s: %s' % (tp, txt) |
398 |
|
raise |
399 |
|
raise TriggerRuntimeError, msg |