commit-gnue
[Top][All Lists]
Advanced

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

r5041 - in trunk/gnue-appserver: samples src src/language


From: reinhard
Subject: r5041 - in trunk/gnue-appserver: samples src src/language
Date: Mon, 26 Jan 2004 18:02:32 -0600 (CST)

Author: reinhard
Date: 2004-01-26 18:02:25 -0600 (Mon, 26 Jan 2004)
New Revision: 5041

Modified:
   trunk/gnue-appserver/samples/sample.gsd
   trunk/gnue-appserver/src/geasInstance.py
   trunk/gnue-appserver/src/geasList.py
   trunk/gnue-appserver/src/geasSession.py
   trunk/gnue-appserver/src/geasSessionManager.py
   trunk/gnue-appserver/src/language/Session.py
   trunk/gnue-appserver/src/test.py
Log:
Basic implementation of Python procedures.

Yes.
This is one small step for a man...



Modified: trunk/gnue-appserver/samples/sample.gsd
===================================================================
--- trunk/gnue-appserver/samples/sample.gsd     2004-01-26 16:59:15 UTC (rev 
5040)
+++ trunk/gnue-appserver/samples/sample.gsd     2004-01-27 00:02:25 UTC (rev 
5041)
@@ -218,6 +218,36 @@
         </row>
       </rows>
     </tabledata>
+    <tabledata name="sample_procedures" tablename="gnue_procedure">
+      <rows>
+        <row>
+          <value>'0000000000000000000000000000101F'</value>
+          <value>'00000000000000000000000000001010'</value>
+          <value>'00000000000000000000000000001000'</value>
+          <value>'show'</value>
+          <value>'python'</value>
+          <value>'print self.address_name'</value>
+          <value>''</value>
+          <value>'Simple procedure to test Appserver'</value>
+        </row>
+        <row>
+          <value>'0000000000000000000000000000101E'</value>
+          <value>'00000000000000000000000000001010'</value>
+          <value>'00000000000000000000000000001000'</value>
+          <value>'test'</value>
+          <value>'python'</value>
+          <value>
+'if self.address_name [0] == "(":
+  self.address_name = self.address_name [1:len(self.address_name)-1]
+else:
+  self.address_name = "(" + self.address_name + ")"
+'
+          </value>
+          <value>''</value>
+          <value>'Simple procedure to test Appserver'</value>
+        </row>
+      </rows>
+    </tabledata>
     <tabledata name="sample_persons" tablename="address_person">
       <rows>
         <row>

Modified: trunk/gnue-appserver/src/geasInstance.py
===================================================================
--- trunk/gnue-appserver/src/geasInstance.py    2004-01-26 16:59:15 UTC (rev 
5040)
+++ trunk/gnue-appserver/src/geasInstance.py    2004-01-27 00:02:25 UTC (rev 
5041)
@@ -35,7 +35,8 @@
   # Initalize
   # ---------------------------------------------------------------------------
 
-  def __init__ (self, list, record, classdef):
+  def __init__ (self, session, list, record, classdef):
+    self._session = session
     self._list = list
     self._record = record
     self._classdef = classdef
@@ -259,18 +260,30 @@
   # ---------------------------------------------------------------------------
 
   def call (self, procedurename, params):
+
+    # TODO: This should run in a separate process so that a segfaulting
+    # procedure doesn't kill appserver.
+    # TODO: We should use gnue-common's logic interface here.
+
+    from gnue.appserver.language import Object
+
+    # Create an object representing the current business object
+    obj = Object.newObject (self._session.sm, self._session.id,
+                            self._classdef.fullName,
+                            {"gnue_id": self._getValue ("gnue_id")})
+
+    # Compile the procedure code
     proceduredef = self._classdef.procedures [procedurename]
-      
-    print proceduredef.code
-    # for now: just implement a basic test method
-    if procedurename=="show":
-      print "Procedure 'show' was called. This record contains the following 
"+\
-            " values:"
-      for i in self._record._fields.keys():
-        print "%s : %s " % (i,self._record._fields[i])
-      print
-    else:
-      print "The procedure %s is not implemented." % procedurename
+    procedure = compile (proceduredef.gnue_code,
+                         '<' + self._classdef.fullName + '.'
+                           + procedurename + '>',
+                         'exec')
 
+    # Execute the procedure, where "self" is the current object
+    exec procedure in {}, {'self': obj}
+
+    # Save changes made by the procedure
+    obj.store ()
+
     # return value of '1' to make XMLRPC happy
     return 1

Modified: trunk/gnue-appserver/src/geasList.py
===================================================================
--- trunk/gnue-appserver/src/geasList.py        2004-01-26 16:59:15 UTC (rev 
5040)
+++ trunk/gnue-appserver/src/geasList.py        2004-01-27 00:02:25 UTC (rev 
5041)
@@ -107,8 +107,8 @@
   def newInstance (self):
     self._resultset = self._datasource.createEmptyResultSet ()
     self._resultset.insertRecord ()
-    return geasInstance.geasInstance (self, self._resultset.current,
-                                      self._classdef)
+    return geasInstance.geasInstance (self._session, self,
+                                      self._resultset.current, self._classdef)
 
   # ---------------------------------------------------------------------------
   # Get the first instance in the list
@@ -116,7 +116,8 @@
 
   def firstInstance (self):
     if self._resultset.firstRecord () != None:
-      return geasInstance.geasInstance (self,  self._resultset.current,
+      return geasInstance.geasInstance (self._session, self,
+                                        self._resultset.current,
                                         self._classdef)
     else:
       return None
@@ -127,7 +128,8 @@
 
   def nextInstance (self):
     if self._resultset.nextRecord () != None:
-      return geasInstance.geasInstance (self, self._resultset.current,
+      return geasInstance.geasInstance (self._session, self,
+                                        self._resultset.current,
                                         self._classdef)
     else:
       return None

Modified: trunk/gnue-appserver/src/geasSession.py
===================================================================
--- trunk/gnue-appserver/src/geasSession.py     2004-01-26 16:59:15 UTC (rev 
5040)
+++ trunk/gnue-appserver/src/geasSession.py     2004-01-27 00:02:25 UTC (rev 
5041)
@@ -50,7 +50,7 @@
   # Initalize
   # ---------------------------------------------------------------------------
 
-  def __init__ (self, connections, authAdapter):
+  def __init__ (self, connections, authAdapter, sm, id):
     self.loggedIn = 0
     self.connections = connections
     try:
@@ -61,6 +61,8 @@
     self._lists = {}
     self._listcount = 0
     self._authAdapter = authAdapter
+    self.sm = sm                        # The session manager
+    self.id = id                        # The session id
 
     # TODO: gnue-common should have a concept of sessions. Until that is done,
     # we have to keep a list of geasList objects that need to be committed.

Modified: trunk/gnue-appserver/src/geasSessionManager.py
===================================================================
--- trunk/gnue-appserver/src/geasSessionManager.py      2004-01-26 16:59:15 UTC 
(rev 5040)
+++ trunk/gnue-appserver/src/geasSessionManager.py      2004-01-27 00:02:25 UTC 
(rev 5041)
@@ -60,9 +60,9 @@
 
   def _buildInternalSession (self):
     self._internalSession = geasSession.geasSession (self._connections,
-                                                     
geasAuthentication.geasAuthAgent())
+      geasAuthentication.geasAuthAgent(), self, 0)
     self._internalSession.login (None,None) # fake login
-    self._sessions [self._internalSession] = self._internalSession
+    self._sessions [0] = self._internalSession
 
   # ---------------------------------------------------------------------------
   # Find a session from session ID
@@ -79,13 +79,14 @@
   # ---------------------------------------------------------------------------
 
   def open (self, authentication):
-    sess = geasSession.geasSession (self._connections, self._authAdapter)
+    # TODO use a better session ID than this one
+    self._sessNo = self._sessNo + 1
+    sess = geasSession.geasSession (self._connections, self._authAdapter, self,
+                                    self._sessNo)
 
     if not sess.login (authentication ['user'],
                        authentication ['password']):
       raise AuthError
-    # TODO use a better session ID than this one
-    self._sessNo = self._sessNo + 1
     self._sessions [self._sessNo] = sess
     return self._sessNo
 

Modified: trunk/gnue-appserver/src/language/Session.py
===================================================================
--- trunk/gnue-appserver/src/language/Session.py        2004-01-26 16:59:15 UTC 
(rev 5040)
+++ trunk/gnue-appserver/src/language/Session.py        2004-01-27 00:02:25 UTC 
(rev 5041)
@@ -19,7 +19,7 @@
 # write to the Free Software Foundation, Inc., 59 Temple Place 
 # - Suite 330, Boston, MA 02111-1307, USA.
 #
-# $Id: Session.py,v 1.9 2003/08/16 17:07:16 siesel Exp $
+# $Id$
 
 from ObjectList import newList
 from Object import newObject
@@ -89,4 +89,4 @@
 
   def __init__ (self, sessionManager):
     self._sm = sessionManager
-    self._session_id = self._sm._internalSession
+    self._session_id = 0

Modified: trunk/gnue-appserver/src/test.py
===================================================================
--- trunk/gnue-appserver/src/test.py    2004-01-26 16:59:15 UTC (rev 5040)
+++ trunk/gnue-appserver/src/test.py    2004-01-27 00:02:25 UTC (rev 5041)
@@ -72,9 +72,15 @@
     print "  Street:", rset[0][2]
     print "  City  :", rset[0][3]
 
-#   print "Now I call the procedure 'show' for the first instance:"
-#   sm.call (session, "address_person", [rset[0][0]], "show", "")
+    print "Now I call the procedure 'show' for the first instance:"
+    sm.call (session, "address_person", [rset[0][0]], "address_show", "")
 
+    print "Now I call the procedure 'test' for the first instance:"
+    sm.call (session, "address_person", [rset[0][0]], "address_test", "")
+
+    print "Committing and closing session ..."
+    sm.close (session, 1)
+
 # =============================================================================
 # Login Handler
 # =============================================================================





reply via email to

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