commit-gnue
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnue] r8419 - trunk/gnue-appserver/src


From: reinhard
Subject: [gnue] r8419 - trunk/gnue-appserver/src
Date: Tue, 18 Apr 2006 16:42:10 -0500 (CDT)

Author: reinhard
Date: 2006-04-18 16:42:10 -0500 (Tue, 18 Apr 2006)
New Revision: 8419

Modified:
   trunk/gnue-appserver/src/geasInstance.py
Log:
Updated geasInstance.call to use new language adapter interface.


Modified: trunk/gnue-appserver/src/geasInstance.py
===================================================================
--- trunk/gnue-appserver/src/geasInstance.py    2006-04-18 21:04:18 UTC (rev 
8418)
+++ trunk/gnue-appserver/src/geasInstance.py    2006-04-18 21:42:10 UTC (rev 
8419)
@@ -27,7 +27,7 @@
 
 from gnue import appserver
 from gnue.appserver.language import Object, Session
-from gnue.common.logic.language import getLanguageAdapter
+from gnue.common.logic import language
 from gnue.common.apps import errors
 from gnue.common.utils import GDateTime
 
@@ -305,10 +305,15 @@
     # procedure doesn't kill appserver.
     # (needs to be implemented as an option in gnue-common)
     checktype (namespace, [None, dict])
+    if namespace is None:
+        namespace = {}
 
     # Create a session object which with the actual session id
     sess = Session.Session (self.__session, self.__session.parameters)
 
+    # set context for the procedure
+    sess.setcontext (proceduredef.gnue_module.gnue_name)
+
     # Create an object representing the current business object
     obj = Object.Object (sess, self.__session, self.__classdef.fullName,
                          self.__getValue (u'gnue_id'))
@@ -321,46 +326,31 @@
         parameters [name] = self.__convert (params [name], paramDef,
                                               ParameterValueError)
 
-    engine = getLanguageAdapter (proceduredef.gnue_language)
+    local_namespace = {'self': obj}
+    local_namespace.update(namespace)
 
-    cx = engine.createNewContext ()
+    execution_context = language.create_execution_context(
+            language = proceduredef.gnue_language,
+            name = '%s.%s' % (self.__classdef.fullName, proceduredef.fullName),
+            local_namespace = local_namespace,
+            global_namespace = {
+                'session': sess,
+                'find':  sess.find,
+                'setcontext': sess.setcontext,
+                'new': sess.new},
+            builtin_namespace = {
+                'message': sess.message})
 
-    try:
-      # describe the context
-      cx.shortname = '%s.%s' % (self.__classdef.fullName, 
proceduredef.fullName)
-      cx.description = proceduredef.gnue_comment
+    method = execution_context.build_function(
+            name = proceduredef.gnue_name,
+            parameters = parameters.keys(),
+            code = proceduredef.gnue_code)
+    result = method(**parameters)
 
-      # the object itself and the session
-      cx.bindObject ('self', obj)
-      cx.bindObject ('session', sess)
-
-      if namespace is not None:
-        for (key, value) in namespace.items ():
-          cx.bindObject (key, value)
-
-      # language interface, session functions
-      cx.bindFunction ('find',       sess.find)
-      cx.bindFunction ('setcontext', sess.setcontext)
-      cx.bindFunction ('new',        sess.new)
-      cx.bindBuiltin ('message',    sess.message)
-
-      # set context for the procedure
-      sess.setcontext (proceduredef.gnue_module.gnue_name)
-
-      method = cx.buildFunction (proceduredef.gnue_name, 
proceduredef.gnue_code,
-                                 parameters)
-      try:
-        result = method (**parameters)
-      finally:
-        method._context = None
-
-      if (proceduredef.gnue_type is None) != (result is None):
-        if result is not None or not proceduredef.gnue_nullable:
-          raise ResultTypeError, (proceduredef.fullName, 
proceduredef.gnue_type,
-                                  result)
-    finally:
-      cx.release ()
-
+    if (proceduredef.gnue_type is None) != (result is None):
+      if result is not None or not proceduredef.gnue_nullable:
+        raise ResultTypeError, (proceduredef.fullName, proceduredef.gnue_type,
+                                result)
     return result
 
   # ---------------------------------------------------------------------------





reply via email to

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