[Top][All Lists]
[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
# =============================================================================
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- r5041 - in trunk/gnue-appserver: samples src src/language,
reinhard <=