[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnue-common/src/logic GTrigger.py language/Base...
From: |
Jan Ischebeck |
Subject: |
gnue-common/src/logic GTrigger.py language/Base... |
Date: |
Fri, 07 Nov 2003 13:15:07 -0500 |
CVSROOT: /cvsroot/gnue
Module name: gnue-common
Branch:
Changes by: Jan Ischebeck <address@hidden> 03/11/07 13:15:07
Modified files:
src/logic : GTrigger.py
Added files:
src/logic/language: Base.py __init__.py
src/logic/language/python: Adapter.py __init__.py
src/logic/language/ECMAscript: Adapter.py __init__.py
Log message:
- split GTrigger code into an language dependent and an language
independent part
- add ECMAscript as trigger language
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-common/src/logic/language/Base.py?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-common/src/logic/language/__init__.py?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-common/src/logic/language/python/Adapter.py?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-common/src/logic/language/python/__init__.py?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-common/src/logic/language/ECMAscript/Adapter.py?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-common/src/logic/language/ECMAscript/__init__.py?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-common/src/logic/GTrigger.py.diff?tr1=1.38&tr2=1.39&r1=text&r2=text
Patches:
Index: gnue-common/src/logic/GTrigger.py
diff -c gnue-common/src/logic/GTrigger.py:1.38
gnue-common/src/logic/GTrigger.py:1.39
*** gnue-common/src/logic/GTrigger.py:1.38 Fri Sep 19 19:44:44 2003
--- gnue-common/src/logic/GTrigger.py Fri Nov 7 13:15:06 2003
***************
*** 37,47 ****
from gnue.common.formatting import GTypecast
from xml.sax import saxutils
from gnue.common.definitions.GParserHelpers import GContent
- class TriggerError(StandardError):
- pass
! class TriggerRuntimeError(StandardError):
pass
class TriggerAbort:
--- 37,46 ----
from gnue.common.formatting import GTypecast
from xml.sax import saxutils
from gnue.common.definitions.GParserHelpers import GContent
+ from gnue.common.logic.language.Base import loadLanguageEngine,
LangIfRuntimeError
! class TriggerError(StandardError):
pass
class TriggerAbort:
***************
*** 51,57 ****
class TriggerSuccess:
pass
!
#######################################################################
#
--- 50,56 ----
class TriggerSuccess:
pass
! runtime_list = {}
#######################################################################
#
***************
*** 122,202 ****
self.__call__=object.__call__
def setFunction(self, text, language):
self._text = text
self.language = language
- if self.language != 'python':
- GDebug.printMesg(0, "Language %s not implemented" % self.language)
- sys.exit()
-
-
- # TODO: this isn't working?????
- # Verify that the trigger contains no tabs
- if string.find('\t', self._text) >= 0:
- GDebug.printMesg(0, "The trigger named %s contains a tab character
which is not allowed at pos %s"
- % ( self.name, string.find('\t', self._text) ))
- sys.exit()
-
- # Remove whitespace from last line
- self._text = string.rstrip(self._text)
-
- # First compile the trigger:
- # Compilation at this stage has the useful side effect that
- # syntax errors are spotted during XML parsing rather than
- # during execution.
-
- # Get the indentation level of the first line of code so
- # we can indent our imports to the same level
- indentLevel = 0
- for line in string.split(string.replace(self._text,'\r',''),'\n'):
- if len(string.strip(line)) and string.lstrip(line)[0] != '#':
- indentLevel = len(line) - len(string.lstrip(line))
- break
-
- revisedTriggerCode = \
- "from gnue.common.logic.GTrigger import TriggerError\n"
- for line in string.split(string.replace(self._text,'\r',''),'\n'):
- revisedTriggerCode = revisedTriggerCode + line[indentLevel:] + '\n'
- revisedTriggerCode = revisedTriggerCode + \
- "pass\n"
! try:
! self._code = compile(revisedTriggerCode, '<string>', 'exec')
! except SyntaxError, err:
! _handleTriggerException(self, err)
! # GDebug.printMesg(0, "Syntax error in line %s of trigger in element ??"
\
! # % ( err.lineno ))
! # 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
!
! def thisTrigger(self, code = self._code,
! triggerns = self._triggerns,
! globalns = self._globalns):
!
! # Merge the trigger's namespace with the runtime global namespace
! # (Which can be set via the "global myvar" construct)
! try:
! del globalns['__builtins__']
! except KeyError:
! pass
! try:
! localns = copy.copy(triggerns)
! localns.update(globalns)
!
! # And execute our code
! exec code in globalns, localns
! except StandardError, err:
! if not isinstance(err, TriggerError):
! # May be better to deal with this in GTriggerExtension
! _handleTriggerException(self, err)
! else:
! # TODO: Um, something else?
! raise
! self.__call__ = thisTrigger
def dummyFunction(self, myself):
GDebug.printMesg(0, "Trigger not implemented")
--- 121,159 ----
self.__call__=object.__call__
def setFunction(self, text, language):
+ global runtime_list
+
self._text = text
self.language = language
! if not runtime_list.has_key(language):
! runtime_list[language] = loadLanguageEngine(language)
!
! cx=runtime_list[language].createNewContext()
!
! # define global namespace ('global' directive in python)
! cx.defineNamespace(self._globalns, globalns=1)
!
! # define local trigger namespace
! cx.defineNamespace(self._triggerns)
! # Build the name of an object, has to be integrated with the namespace
creation
! path=""
! p = self
! delim = ""
! while p!=None:
! if hasattr(p,'name'):
! #print p.name
! if p.name!=None:
! path=p.name+delim+path
! delim = "_"
! if p._triggerGlobal == 1:
! p=None
! else:
! p=p._parent
!
! method = cx.buildMethod(path, self._text)
! self.__call__ = method
def dummyFunction(self, myself):
GDebug.printMesg(0, "Trigger not implemented")
***************
*** 324,330 ****
if key in self._validTriggers.keys():
if self._trigger.has_key(key):
for function in self._trigger[key]:
! function(self)
else:
GDebug.printMesg(10, "No triggers to fire")
else:
--- 281,293 ----
if key in self._validTriggers.keys():
if self._trigger.has_key(key):
for function in self._trigger[key]:
! # TODO: do we need to call "updateNamespace" here?
! # function.updateNamespace()
! try:
! function(self)
! except LangIfRuntimeError, msg:
! # call my own exceptionHandler here.
! print "Runtime Error occured:\n %s" % msg
else:
GDebug.printMesg(10, "No triggers to fire")
else:
***************
*** 371,404 ****
return xmlElements
-
- def _handleTriggerException(self, err):
- if hasattr(self, 'type'):
- triggertype = self.type
- else:
- triggertype = 'unknown'
-
- if hasattr(self, 'name'):
- name = self.name
- else:
- name = triggertype
-
- if isinstance(err, SyntaxError):
- msg = _('There is an error in one of this document\'s
triggers.\n\nTraceback:\n') + \
- ' Trigger "%s" (%s), line %s' % (name, triggertype, err.lineno -
1) + "\n" + \
- ' ' + err.text[:-1] + "\n" + \
- ' ' + (' ' * (err.offset-1)) + '^\n' + \
- 'SyntaxError: ' + err.msg
- else:
- tp, ec, tb = sys.exc_info()
- tb = tb.tb_next
- try:
- txt = ec.args
- except:
- txt = ""
- msg = _('There is an error in one of this document\'s
triggers.\n\nTraceback:\n') + \
- ' Trigger "%s" (%s), line %s' % (name, triggertype,
int(tb.tb_lineno) - 1) + "\n" + \
- ' %s\n' % (ec) + \
- '%s: %s' % (tp, txt)
- raise
- raise TriggerRuntimeError, msg
--- 334,336 ----
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- gnue-common/src/logic GTrigger.py language/Base...,
Jan Ischebeck <=