[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
r6822 - in trunk/gnue-appserver/src: . language
From: |
johannes |
Subject: |
r6822 - in trunk/gnue-appserver/src: . language |
Date: |
Fri, 24 Dec 2004 08:23:47 -0600 (CST) |
Author: johannes
Date: 2004-12-24 08:23:45 -0600 (Fri, 24 Dec 2004)
New Revision: 6822
Modified:
trunk/gnue-appserver/src/geasList.py
trunk/gnue-appserver/src/language/App.py
trunk/gnue-appserver/src/language/Object.py
trunk/gnue-appserver/src/language/ObjectList.py
trunk/gnue-appserver/src/language/Session.py
trunk/gnue-appserver/src/language/test.py
Log:
Fixed geasList.count () to work in all situations. Language interface
application is now using the RPC interface
Modified: trunk/gnue-appserver/src/geasList.py
===================================================================
--- trunk/gnue-appserver/src/geasList.py 2004-12-23 20:24:25 UTC (rev
6821)
+++ trunk/gnue-appserver/src/geasList.py 2004-12-24 14:23:45 UTC (rev
6822)
@@ -47,7 +47,7 @@
self.__isComplete = False
self.__dsSorting = dsSort # sorted by datasource
self.__asSorting = asSort # additional sortorder of this list
- self.__isClosed = False
+ self.__length = 0
@@ -166,8 +166,9 @@
return instance
else:
+ self.__length = len (self.__instances)
self.__recordset.close ()
- self.__isClosed = True
+ self.__recordset = None
return None
@@ -212,7 +213,10 @@
self.__fillupFunc (0)
return len (self.__instances)
else:
- return self.__recordset.count ()
+ if self.__recordset is None:
+ return self.__length
+ else:
+ return self.__recordset.count ()
# ---------------------------------------------------------------------------
@@ -247,8 +251,9 @@
maintained by the list.
"""
- if not self.__isClosed:
+ if self.__recordset is not None:
self.__recordset.close ()
+ self.__recordset = None
self.__instances = []
self.__unsorted = []
Modified: trunk/gnue-appserver/src/language/App.py
===================================================================
--- trunk/gnue-appserver/src/language/App.py 2004-12-23 20:24:25 UTC (rev
6821)
+++ trunk/gnue-appserver/src/language/App.py 2004-12-24 14:23:45 UTC (rev
6822)
@@ -21,9 +21,9 @@
#
# $Id$
-from gnue.common.apps import GClientApp, i18n
-from gnue.common.datasources import GLoginHandler
-from gnue.appserver import geasSessionManager
+from gnue.common.rpc import client
+from gnue.common.apps import GClientApp
+
import Session
# =============================================================================
@@ -33,28 +33,49 @@
class App (GClientApp.GClientApp):
# ---------------------------------------------------------------------------
- # Initialize
+ # Constructor
# ---------------------------------------------------------------------------
- def __init__ (self, database = None):
- if database is not None:
- defs = [{'Name': 'database', 'Default': database}]
- else:
- defs = None
+ def __init__ (self, connections = None, application = 'appserver',
+ defaults = None):
- GClientApp.GClientApp.__init__ (self, application = 'appserver',
- defaults = defs)
+ self.addCommandOption ('connection', 'c', argument='name',
+ default = "gnue",
+ help = _("Connect to the appserver using the connection <name>"))
- self.connections.setLoginHandler (myLoginHandler ())
- self._sm = geasSessionManager.geasSessionManager (self.connections)
+ GClientApp.GClientApp.__init__ (self, connections, application, defaults)
+ self._sm = self.__getSessionManager ()
+
+
+ # ---------------------------------------------------------------------------
+ # Create a new language interface session (LoginSession)
+ # ---------------------------------------------------------------------------
+
def newSession (self, username, password):
+
return Session.LoginSession (self._sm, username, password)
-# =============================================================================
-# Login Handler
-# =============================================================================
-class myLoginHandler (GLoginHandler.LoginHandler):
- def getLogin (self, *arguments):
- return {'_username': 'gnue', '_password': None}
+ # ---------------------------------------------------------------------------
+ # Create a new connection to the application server's session manager
+ # ---------------------------------------------------------------------------
+
+ def __getSessionManager (self):
+ """
+ This function uses the parameters specified by the given connection and
+ connects to the appserver's session manager via rpc.
+
+ @return: Session Manager
+ """
+
+ connection = self.connections.getConnection (self.OPTIONS ['connection'])
+ cparams = connection.parameters
+
+ rpctype = cparams.get ('rpctype', 'xmlrpc')
+ params = {'host' : cparams.get ('host', 'localhost'),
+ 'port' : cparams.get ('port', 8765),
+ 'transport': cparams.get ('transport', 'http')}
+
+ server = client.attach (rpctype, params)
+ return server.request ('Session')
Modified: trunk/gnue-appserver/src/language/Object.py
===================================================================
--- trunk/gnue-appserver/src/language/Object.py 2004-12-23 20:24:25 UTC (rev
6821)
+++ trunk/gnue-appserver/src/language/Object.py 2004-12-24 14:23:45 UTC (rev
6822)
@@ -161,16 +161,16 @@
# -------------------------------------------------------------------------
def __attrIsValid (self, attr):
name = self.__session.qualify (attr)
- cdef = self.__session.getSessionManager ().classes [self.__class]
- return cdef.properties.has_key (name)
+ cDef = self.__session.getClassDef (self.__class)
+ return name in cDef ['properties']
# -------------------------------------------------------------------------
# Check if 'attr' is a valid procedure of this class
# -------------------------------------------------------------------------
def __attrIsMethod (self, attr):
name = self.__session.qualify (attr)
- cdef = self.__session.getSessionManager ().classes [self.__class]
- return cdef.procedures.has_key (name)
+ cDef = self.__session.getClassDef (self.__class)
+ return name in cDef ['procedures']
# -------------------------------------------------------------------------
Modified: trunk/gnue-appserver/src/language/ObjectList.py
===================================================================
--- trunk/gnue-appserver/src/language/ObjectList.py 2004-12-23 20:24:25 UTC
(rev 6821)
+++ trunk/gnue-appserver/src/language/ObjectList.py 2004-12-24 14:23:45 UTC
(rev 6822)
@@ -42,13 +42,14 @@
self.__session = session
self.__list = []
+ self.__list_id = None
self.__buildList ()
- # -------------------------------------------------------------------------
+ # ---------------------------------------------------------------------------
# Return the number of elements in this sequence
- # -------------------------------------------------------------------------
+ # ---------------------------------------------------------------------------
def __len__ (self):
Modified: trunk/gnue-appserver/src/language/Session.py
===================================================================
--- trunk/gnue-appserver/src/language/Session.py 2004-12-23 20:24:25 UTC
(rev 6821)
+++ trunk/gnue-appserver/src/language/Session.py 2004-12-24 14:23:45 UTC
(rev 6822)
@@ -57,6 +57,9 @@
self.__context = None
self.parameters = params
+ self.__classdefs = {}
+ self.__modules = {}
+
# -------------------------------------------------------------------------
# Get the session's sessionManager
# -------------------------------------------------------------------------
@@ -162,6 +165,103 @@
raise MessageNotFoundError, self.qualify (messageName)
+ # ---------------------------------------------------------------------------
+ # Get a 'class-definition' for a given class
+ # ---------------------------------------------------------------------------
+
+ def getClassDef (self, classname):
+ """
+ This function returns a 'class-definition' for a given class. Such a
+ class-definition is a dictionary with two keys: 'properties' and
+ 'procedures' where both values are sequences of names.
+
+ @param classname: name of the class to get a definition-dictionary for
+ @return: dictionary with the class-definition
+ """
+
+ classname = self.qualify (classname)
+ if self.__classdefs.has_key (classname):
+ return self.__classdefs [classname]
+
+ result = {'properties': [], 'procedures': []}
+ self.__classdefs [classname] = result
+
+ # An internal Session is used only by the appserver process. To avoid
+ # any recursions, we use the class-repository directly
+ if isinstance (self, InternalSession):
+ cDef = self.__sm.classes [classname]
+ result ['properties'] = [p.fullName for p in cDef.properties.values ()]
+ result ['procedures'] = [p.fullName for p in cDef.procedures.values ()]
+
+ else:
+ # otherwise we fetch all properties and procedures from the appserver
+ (module, name) = classname.split ('_')
+ moduleId = self.__findModule (module)
+ classId = self.__findClass (moduleId, name)
+
+ result ['properties'] = self.__fetchData ('property' , moduleId, classId)
+ result ['procedures'] = self.__fetchData ('procedure', moduleId, classId)
+
+ return result
+
+ def __fetchData (self, tablename, moduleId, classId):
+
+ result = []
+ listId = self.__sm.request (self.__session_id, "gnue_%s" % tablename,
+ {'gnue_module': moduleId, 'gnue_class': classId},
+ [], ['gnue_name', 'gnue_module'])
+
+ while True:
+ res = self.__sm.fetch (self.__session_id, listId, len (result), 20, 0)
+ if len (res):
+ for (gnueId, pName, pModule) in res:
+ mName = self.__moduleName (pModule)
+ iName = "%s_%s" % (mName, pName)
+ result.append (iName)
+ else:
+ break
+
+ return result
+
+ def __findModule (self, moduleName):
+
+ for (gnueId, name) in self.__modules.items ():
+ if name == moduleName:
+ return gnueId
+
+ lid = self.__sm.request (self.__session_id, 'gnue_module',
+ {'gnue_name': moduleName}, [], [])
+ res = self.__sm.fetch (self.__session_id, lid, 0, 10, 0)
+ if res:
+ key = res [0][0]
+ self.__modules [key] = moduleName
+ else:
+ key = None
+
+ return key
+
+ def __moduleName (self, moduleId):
+
+ if self.__modules.has_key (moduleId):
+ return self.__modules [moduleId]
+
+ lid = self.__sm.request (self.__session_id, 'gnue_module',
+ {'gnue_id': moduleId}, [], ['gnue_name'])
+ res = self.__sm.feth (self.__session_id, lid, 0, 10, 0)
+ if res:
+ self.__modules [moduleId] = res [0][1]
+
+ return self.__modules.get (moduleId)
+
+
+ def __findClass (self, moduleId, classname):
+
+ lid = self.__sm.request (self.__session_id, 'gnue_class',
+ {'gnue_module': moduleId, 'gnue_name': classname}, [], [])
+ res = self.__sm.fetch (self.__session_id, lid, 0, 10, 0)
+ return len (res) and res [0][0] or None
+
+
# =============================================================================
# Login-Session creates a new Session-Id using 'user' and 'password'
# =============================================================================
Modified: trunk/gnue-appserver/src/language/test.py
===================================================================
--- trunk/gnue-appserver/src/language/test.py 2004-12-23 20:24:25 UTC (rev
6821)
+++ trunk/gnue-appserver/src/language/test.py 2004-12-24 14:23:45 UTC (rev
6822)
@@ -32,12 +32,17 @@
print "fetching all persons..."
session.setcontext ('address')
- list = session.find ('person', sortorder = ['address_name'],
+
+ print "running the find ..."
+ persons = session.find ('person', sortorder = ['address_name'],
properties = ['address_name', 'address_street'])
- print 'Found %d instances.' % len (list)
+ if persons:
+ print "has a match!"
- for person in list:
+ print 'Found %d instances.' % len (persons)
+
+ for person in persons:
print '-' * 79
print 'Name : %s' % repr (person.name)
print 'Street : %s' % repr (person.address_street)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- r6822 - in trunk/gnue-appserver/src: . language,
johannes <=