commit-gnue
[Top][All Lists]
Advanced

[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 ----




reply via email to

[Prev in Thread] Current Thread [Next in Thread]