[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnue] r7019 - in trunk/gnue-appserver/src: . classrep language
From: |
johannes |
Subject: |
[gnue] r7019 - in trunk/gnue-appserver/src: . classrep language |
Date: |
Sun, 13 Feb 2005 09:39:52 -0600 (CST) |
Author: johannes
Date: 2005-02-13 09:39:50 -0600 (Sun, 13 Feb 2005)
New Revision: 7019
Modified:
trunk/gnue-appserver/src/classrep/Base.py
trunk/gnue-appserver/src/classrep/Class.py
trunk/gnue-appserver/src/classrep/Module.py
trunk/gnue-appserver/src/classrep/Parameter.py
trunk/gnue-appserver/src/classrep/Procedure.py
trunk/gnue-appserver/src/classrep/Property.py
trunk/gnue-appserver/src/data.py
trunk/gnue-appserver/src/geasSession.py
trunk/gnue-appserver/src/geasSessionManager.py
trunk/gnue-appserver/src/language/Object.py
trunk/gnue-appserver/src/language/Procedure.py
trunk/gnue-appserver/src/language/Session.py
Log:
Some (of the first) optimizations
Modified: trunk/gnue-appserver/src/classrep/Base.py
===================================================================
--- trunk/gnue-appserver/src/classrep/Base.py 2005-02-12 23:29:37 UTC (rev
7018)
+++ trunk/gnue-appserver/src/classrep/Base.py 2005-02-13 15:39:50 UTC (rev
7019)
@@ -78,12 +78,16 @@
This function fetches a list of all available items of the dictionaries
table and merges them into the objectlist.
"""
+ gBeginFunc (6)
+
rlist = self._session.find (self.table, self._getReloadCondition (),
self._getSortorder (),
self._getColumns ())
self.mergeIntoList (rlist, idAsKey)
+ gEndFunc (6, hasResult = False)
+
# ---------------------------------------------------------------------------
# Merge a given object list with the dictionaries list
# ---------------------------------------------------------------------------
@@ -94,6 +98,8 @@
objectlist. If an object is new in the list, use _getNewItem () to build a
new instance for the object.
"""
+ gBeginFunc (6)
+
for obj in addList:
found = 0
@@ -111,7 +117,9 @@
key = idAsKey and newItem.gnue_id or newItem.fullName
self [key] = newItem
+ gEndFunc (6, hasResult = False)
+
# ---------------------------------------------------------------------------
# Return the conditions to be used on reload ()
# ---------------------------------------------------------------------------
@@ -121,6 +129,7 @@
Descendants override this method to specify a condition for reloading all
elements of the dictionary.
"""
+ gEndFunc (6, [])
return []
@@ -132,9 +141,12 @@
"""
Specify a list of fields to be fetched on a reload ().
"""
- return [u'gnue_name']
+ result = [u'gnue_name']
+ gEndFunc (6, result)
+ return result
+
# ---------------------------------------------------------------------------
# Return the sortorder to be used on reload ()
# ---------------------------------------------------------------------------
@@ -143,9 +155,12 @@
"""
Specify a list of fields used as sort-order.
"""
- return [u'gnue_id']
+ result = [u'gnue_id']
+ gEndFunc (6, result)
+ return result
+
# ---------------------------------------------------------------------------
# Get a condition to fetch a single item for the dictionary
# ---------------------------------------------------------------------------
@@ -258,10 +273,12 @@
found in the dictionary, it will be looked up via language interface. If
it is not found in the datasource, an _itemNotFoundError will be raised.
"""
+
+ result = None
+
if self.has_key (key):
- return self._items [key.lower ()]
+ result = self._items [key.lower ()]
else:
- self._session.rollback ()
list = self._session.find (self.table, self._getSingleCondition (key),
self._getSortorder (),
self._getColumns ())
@@ -275,11 +292,14 @@
raise self._validationError (newItem, verr)
self._items [key.lower ()] = newItem
- return newItem
+ result = newItem
- raise self._itemNotFoundError (key)
+ if result is None:
+ raise self._itemNotFoundError (key)
+ return result
+
# ---------------------------------------------------------------------------
# Remove a key from the internal dictionary
# ---------------------------------------------------------------------------
@@ -311,6 +331,7 @@
# ---------------------------------------------------------------------------
def __init__ (self, session, classname, aObject = None, pDefs = None):
+
self.classname = classname
self._session = session
@@ -322,17 +343,24 @@
if key in ["gnue_length", "gnue_scale"]:
if pDefs [key]:
self.__predefined [key] = int (pDefs [key])
+ self.__dict__ [key] = int (pDefs [key])
else:
+ self.__dict__ [key] = None
self.__predefined [key] = None
+
elif key in ["gnue_nullable"]:
if pDefs [key] == "FALSE":
+ self.__dict__ [key] = False
self.__predefined [key] = False
else:
+ self.__dict__ [key] = True
self.__predefined [key] = True
else:
+ self.__dict__ [key] = pDefs [key]
self.__predefined [key] = pDefs [key]
+
# ---------------------------------------------------------------------------
# Return an attributes value
# ---------------------------------------------------------------------------
@@ -342,12 +370,15 @@
If an attribute is not a 'predefined' value it is delegated to the language
interface object of the instance.
"""
+
if self.__predefined.has_key (attr):
- return self.__predefined [attr]
+ result = self.__predefined [attr]
else:
- return getattr (self._getObject (), attr)
+ result = getattr (self._getObject (), attr)
+ return result
+
# ---------------------------------------------------------------------------
# Get a language interface object
# ---------------------------------------------------------------------------
@@ -357,12 +388,15 @@
This function returns the corresponding language interface object of this
instance. It will be created the first time this function is called.
"""
+
if self.__object is None:
self.__object = Object (self._session, self.classname, self.gnue_id)
- return self.__object
+ result = self.__object
+ return result
+
# ---------------------------------------------------------------------------
# Validate an instance
# ---------------------------------------------------------------------------
@@ -385,11 +419,16 @@
This function replaces all references to @aObject in it's predefined
dictionary.
"""
+ gBeginFunc (6)
+
for (key, value) in self.__predefined.items ():
if isinstance (value, types.UnicodeType) and value == aObject.objectId:
+ self.__dict__ [key] = aObject
self.__predefined [key] = aObject
+ gEndFunc (6, hasResult = False)
+
# ---------------------------------------------------------------------------
# Complete an instance
# ---------------------------------------------------------------------------
Modified: trunk/gnue-appserver/src/classrep/Class.py
===================================================================
--- trunk/gnue-appserver/src/classrep/Class.py 2005-02-12 23:29:37 UTC (rev
7018)
+++ trunk/gnue-appserver/src/classrep/Class.py 2005-02-13 15:39:50 UTC (rev
7019)
@@ -149,12 +149,15 @@
all classes of the bound module, otherwise no condition is given.
"""
if self.__module is not None:
- return ['eq', ['field', u'gnue_module'],
+ result = ['eq', ['field', u'gnue_module'],
['const', self.__module.gnue_id]]
else:
- return []
+ result = []
+ gEndFunc (6, result)
+ return result
+
# ---------------------------------------------------------------------------
# Create a condition to retrieve the klass specified by 'key'
# ---------------------------------------------------------------------------
@@ -189,7 +192,9 @@
"""
Fields to be fetched on reloads.
"""
- return [u"gnue_module", u"gnue_name", u"gnue_filter"]
+ result = [u"gnue_module", u"gnue_name", u"gnue_filter"]
+ gEndFunc (6, result)
+ return result
# ---------------------------------------------------------------------------
Modified: trunk/gnue-appserver/src/classrep/Module.py
===================================================================
--- trunk/gnue-appserver/src/classrep/Module.py 2005-02-12 23:29:37 UTC (rev
7018)
+++ trunk/gnue-appserver/src/classrep/Module.py 2005-02-13 15:39:50 UTC (rev
7019)
@@ -140,6 +140,7 @@
classes of this module will be created. All other attributes are delegated
to the BaseObject's __getattr__ ().
"""
+
if attr == 'classes':
self.__dict__ ['classes'] = ClassDict (self._session, self.modules, self)
@@ -149,15 +150,17 @@
self.classes [aClass.fullName] = aClass
else:
# Make sure the created class-dictionary is up to date
- gDebug (2, "FORCE a classdict-reload through moduledict.classes ()")
+ gDebug (6, "FORCE a classdict-reload through moduledict.classes ()")
self.classes.reload ()
- return self.classes
+ result = self.classes
else:
- return BaseObject.__getattr__ (self, attr)
+ result = BaseObject.__getattr__ (self, attr)
+ return result
+
# ---------------------------------------------------------------------------
# Validate a module
# ---------------------------------------------------------------------------
Modified: trunk/gnue-appserver/src/classrep/Parameter.py
===================================================================
--- trunk/gnue-appserver/src/classrep/Parameter.py 2005-02-12 23:29:37 UTC
(rev 7018)
+++ trunk/gnue-appserver/src/classrep/Parameter.py 2005-02-13 15:39:50 UTC
(rev 7019)
@@ -66,11 +66,14 @@
def _getReloadCondition (self):
if self.__proc is not None:
- return ['eq', ['field', u'gnue_procedure'],
['const',self.__proc.gnue_id]]
+ result = ['eq', ['field', u'gnue_procedure'],
['const',self.__proc.gnue_id]]
else:
- return []
+ result = []
+ gEndFunc (6, result)
+ return result
+
# ---------------------------------------------------------------------------
# Get a condition to match a single parameter
# ---------------------------------------------------------------------------
@@ -85,8 +88,10 @@
# ---------------------------------------------------------------------------
def _getColumns (self):
- return [u"gnue_procedure", u"gnue_name", u"gnue_type", u"gnue_length",
+ result = [u"gnue_procedure", u"gnue_name", u"gnue_type", u"gnue_length",
u"gnue_scale"]
+ gEndFunc (6, result)
+ return (result)
# ---------------------------------------------------------------------------
Modified: trunk/gnue-appserver/src/classrep/Procedure.py
===================================================================
--- trunk/gnue-appserver/src/classrep/Procedure.py 2005-02-12 23:29:37 UTC
(rev 7018)
+++ trunk/gnue-appserver/src/classrep/Procedure.py 2005-02-13 15:39:50 UTC
(rev 7019)
@@ -76,11 +76,14 @@
# ---------------------------------------------------------------------------
def _getReloadCondition (self):
if self.__class is not None:
- return ['eq', ['field', u'gnue_class'], ['const', self.__class.gnue_id]]
+ result = ['eq', ['field', u'gnue_class'], ['const',
self.__class.gnue_id]]
else:
- return []
+ result = []
+ gEndFunc (6, result)
+ return result
+
# ---------------------------------------------------------------------------
# Get a condition to match a given procedure
# ---------------------------------------------------------------------------
@@ -97,9 +100,11 @@
# Get a list of columns to be prepared on a find ()
# ---------------------------------------------------------------------------
def _getColumns (self):
- return [u"gnue_module", u"gnue_class", u"gnue_name", u"gnue_language",
+ result = [u"gnue_module", u"gnue_class", u"gnue_name", u"gnue_language",
u"gnue_type", u"gnue_length", u"gnue_scale", u"gnue_comment",
u"gnue_nullable"]
+ gEndFunc (result)
+ return result
# ---------------------------------------------------------------------------
# Create a key-not-found exception
Modified: trunk/gnue-appserver/src/classrep/Property.py
===================================================================
--- trunk/gnue-appserver/src/classrep/Property.py 2005-02-12 23:29:37 UTC
(rev 7018)
+++ trunk/gnue-appserver/src/classrep/Property.py 2005-02-13 15:39:50 UTC
(rev 7019)
@@ -86,9 +86,11 @@
# ---------------------------------------------------------------------------
def _getReloadCondition (self):
if self.__class is not None:
- return ['eq', ['field', u'gnue_class'], ['const', self.__class.gnue_id]]
+ result = ['eq', ['field', u'gnue_class'], ['const',
self.__class.gnue_id]]
else:
- return []
+ result = []
+ gEndFunc (6, result)
+ return result
# ---------------------------------------------------------------------------
@@ -108,8 +110,10 @@
# Return a list of columns to be prepared by a find ()
# ---------------------------------------------------------------------------
def _getColumns (self):
- return [u"gnue_module", u"gnue_class", u"gnue_name", u"gnue_type",
+ result = [u"gnue_module", u"gnue_class", u"gnue_name", u"gnue_type",
u"gnue_length", u"gnue_scale", u"gnue_comment", u"gnue_nullable"]
+ gEndFunc (6, result)
+ return result
# ---------------------------------------------------------------------------
Modified: trunk/gnue-appserver/src/data.py
===================================================================
--- trunk/gnue-appserver/src/data.py 2005-02-12 23:29:37 UTC (rev 7018)
+++ trunk/gnue-appserver/src/data.py 2005-02-13 15:39:50 UTC (rev 7019)
@@ -119,21 +119,16 @@
def __has (self, table, row, field, dirty):
- result = False
-
if dirty:
tables = self.__new
else:
tables = self.__old
- if tables.has_key (table):
- rows = tables [table]
- if rows.has_key (row):
- fields = rows [row]
- if fields.has_key (field):
- result = True
+ # We concatenate all has_key () checks so it can return as early as
+ # possible. The function is about 3 times faster than using normal if's
+ return tables.has_key (table) and tables [table].has_key (row) and \
+ tables [table][row].has_key (field)
- return result
# ---------------------------------------------------------------------------
# Return whether a certain value is stored in the cache or not
@@ -149,11 +144,22 @@
checktype (field, UnicodeType)
if dirty is None:
- return self.__has (table, row, field, True) or \
- self.__has (table, row, field, False)
+ # We could use self.__has (), here but avoiding an additional function
+ # call here is a big deal regarding performance, as this function is
+ # called about 100000 times for a (quite small) classrepository
+ return (self.__old.has_key (table) and self.__old [table].has_key (row) \
+ and self.__old [table][row].has_key (field)) or \
+ (self.__new.has_key (table) and self.__new [table].has_key (row) \
+ and self.__new [table][row].has_key (field))
else:
- return self.__has (table, row, field, dirty)
+ if dirty:
+ tables = self.__new
+ else:
+ tables = self.__old
+ return tables.has_key (table) and tables [table].has_key (row) and \
+ tables [table][row].has_key (field)
+
# ---------------------------------------------------------------------------
# Read data from the cache
# ---------------------------------------------------------------------------
@@ -883,6 +889,9 @@
cancelChanges () function restores to this state.
"""
+ # Doing a deepcopy here is a 'no-go' for performance. If we're creating
+ # larger transaction (with a lot of records) this call will slow down
+ # everything with every record added.
self.__confirmedCache = copy.deepcopy (self.__cache)
self.__confirmedInserts = self.__inserted [:]
self.__confirmedDeletes = self.__deleted [:]
Modified: trunk/gnue-appserver/src/geasSession.py
===================================================================
--- trunk/gnue-appserver/src/geasSession.py 2005-02-12 23:29:37 UTC (rev
7018)
+++ trunk/gnue-appserver/src/geasSession.py 2005-02-13 15:39:50 UTC (rev
7019)
@@ -477,13 +477,13 @@
table = classdef.table
# Only query the main table here. geasInstance.get will do the rest.
- fieldlist = []
+ fields = {}
for p in propertylist:
pdef = classdef.properties [string.split (p, '.') [0]]
- if not pdef.isCalculated and not pdef.column in fieldlist:
- fieldlist.append (pdef.column)
+ if not fields.has_key (pdef.column) and not pdef.isCalculated:
+ fields [pdef.column] = True
- record = self.__connection.findRecord (table, object_id, fieldlist)
+ record = self.__connection.findRecord (table, object_id, fields.keys ())
if record is None:
raise InstanceNotFoundError, (classdef.fullName, object_id)
Modified: trunk/gnue-appserver/src/geasSessionManager.py
===================================================================
--- trunk/gnue-appserver/src/geasSessionManager.py 2005-02-12 23:29:37 UTC
(rev 7018)
+++ trunk/gnue-appserver/src/geasSessionManager.py 2005-02-13 15:39:50 UTC
(rev 7019)
@@ -64,6 +64,11 @@
self._modulepath = modulepath or \
os.path.join (paths.data, "share", "gnue", "appserver")
+ #import profile
+ #prof = profile.Profile ()
+ #prof.runctx ('self.updateRepository (haltOnError = True)', globals (),
+ #locals ())
+ #prof.dump_stats ('appserver.profile')
self.updateRepository (haltOnError = True)
cfg = gConfigDict (section = 'appserver')
@@ -266,12 +271,12 @@
def request (self, session_id, classname, conditions, sortorder,
propertylist):
- gBeginFunc ()
+ gBeginFunc (4)
s = self._getSession (session_id)
result = s.request (classname, conditions, sortorder, propertylist)
- gEndFunc (1, result)
+ gEndFunc (4, result)
return result
@@ -281,11 +286,11 @@
def count (self, session_id, list_id):
- gBeginFunc ()
+ gBeginFunc (4)
s = self._getSession (session_id)
result = s.count (list_id)
- gEndFunc (1, result)
+ gEndFunc (4, result)
return result
@@ -295,11 +300,11 @@
def fetch (self, session_id, list_id, start, count, close = False):
- gBeginFunc ()
+ gBeginFunc (4)
s = self._getSession (session_id)
result = s.fetch (list_id, start, count)
- gEndFunc (1, result)
+ gEndFunc (4, result)
return result
@@ -309,12 +314,12 @@
def load (self, session_id, classname, obj_id_list, propertylist):
- gBeginFunc ()
+ gBeginFunc (4)
s = self._getSession (session_id)
result = s.load (classname, obj_id_list, propertylist)
- gEndFunc (1, result)
+ gEndFunc (4, result)
return result
# ---------------------------------------------------------------------------
@@ -323,11 +328,11 @@
def store (self, session_id, classname, obj_id_list, propertylist, data):
- gBeginFunc ()
+ gBeginFunc (4)
s = self._getSession (session_id)
result = s.store (classname, obj_id_list, propertylist, data)
- gEndFunc (1, result)
+ gEndFunc (4, result)
return result
@@ -337,12 +342,12 @@
def delete (self, session_id, classname, obj_id_list):
- gBeginFunc ()
+ gBeginFunc (4)
s = self._getSession (session_id)
s.delete (classname, obj_id_list)
- gEndFunc (hasResult = False)
+ gEndFunc (4, hasResult = False)
# ---------------------------------------------------------------------------
@@ -352,12 +357,12 @@
def call (self, session_id, classname, obj_id_list, procedurename,
parameters):
- gBeginFunc ()
+ gBeginFunc (4)
s = self._getSession (session_id)
result = s.call (classname, obj_id_list, procedurename, parameters)
- gEndFunc (1, result)
+ gEndFunc (4, result)
return result
@@ -368,10 +373,10 @@
def getFilters (self, language):
- gBeginFunc ()
+ gBeginFunc (4)
result = self._filter.getFilter (language)
- gEndFunc (1, result)
+ gEndFunc (4, result)
return result
Modified: trunk/gnue-appserver/src/language/Object.py
===================================================================
--- trunk/gnue-appserver/src/language/Object.py 2005-02-12 23:29:37 UTC (rev
7018)
+++ trunk/gnue-appserver/src/language/Object.py 2005-02-13 15:39:50 UTC (rev
7019)
@@ -51,74 +51,96 @@
def __init__ (self, session, classname, objectId = None):
# we won't trigger __setattr__ here ...
- self.__dict__['objectId'] = objectId
- self.__dict__['_Object__session'] = session
- self.__dict__['_Object__class'] = classname
+ self.__dict__ ['objectId'] = objectId
+ self.__dict__ ['_Object__session'] = session
+ self.__dict__ ['_Object__class'] = classname
+ self.__dict__ ['_Object__sm'] = session.getSessionManager ()
+ self.__dict__ ['_Object__sid'] = session.getSessionId ()
+ self.__dict__ ['_Object__datatype'] = {}
if self.objectId is None:
# Create new object
- sm = self.__session.getSessionManager ()
- sid = self.__session.getSessionId ()
-
- res = sm.store (sid, self.__class, [None], [], [[]])
+ res = self.__sm.store (self.__sid, self.__class, [None], [], [[]])
self.objectId = res [0]
+ self.__dict__ ['gnue_id'] = self.objectId
+
# -------------------------------------------------------------------------
# Return an attribute's value; if not available in cache load from server
# -------------------------------------------------------------------------
def __getattr__ (self, attr):
+
+ gBeginFunc (6)
+
name = self.__session.qualify (attr)
+
if name == "gnue_id":
- return self.objectId
+ result = self.objectId
+ gEndFunc (6, result)
+ return result
- sm = self.__session.getSessionManager ()
- sid = self.__session.getSessionId ()
-
try:
- datatype = sm.load (sid, self.__class, [''], [name]) [0][0]
+ # TODO: move the datatype-dictionary into the session, but keep a
+ # per-instance pointer to it. This way we could reduce the amount of
+ # loads to a per-class/per-session minimum
+ if not self.__datatype.has_key (name):
+ self.__datatype [name] = self.__sm.load (self.__sid, self.__class,
+ [''], [name]) [0][0]
+ datatype = self.__datatype [name]
except KeyError:
raise MemberNotFoundError, (self.__class, name)
if datatype == 'procedure':
- return Procedure (self.__session, self.objectId, self.__class, name)
+ result = Procedure (self.__session, self.objectId, self.__class, name)
else:
- res = sm.load (sid, self.__class, [self.objectId], [name])
+ res = self.__sm.load (self.__sid, self.__class, [self.objectId], [name])
value = res [0][0]
# Convert reference fields to object references
if '_' in datatype and value is not None:
- return Object (self.__session, datatype, value)
+ result = Object (self.__session, datatype, value)
elif value is None:
if '_' in datatype:
- return NullObject (self.__session, datatype)
+ result = NullObject (self.__session, datatype)
else:
- return None
+ result = None
else:
- return value
+ result = value
+ gEndFunc (6, result)
+ return result
+
# -------------------------------------------------------------------------
# Set an attribute's value
# -------------------------------------------------------------------------
def __setattr__ (self, attr, value):
+ gBeginFunc (6)
+
if self.__dict__.has_key (attr):
self.__dict__ [attr] = value
+ # Make sure to keep in sync between objectId and gnue_id
+ if attr == 'objectId':
+ self.__dict__ ['gnue_id'] = value
+ elif attr == 'gnue_id':
+ self.__dict__ ['objectId'] = value
- else:
+ if not self.__dict__.has_key (attr) or attr == 'gnue_id':
name = self.__session.qualify (attr)
- sm = self.__session.getSessionManager ()
- sid = self.__session.getSessionId ()
try:
- datatype = sm.load (sid, self.__class, [''], [name]) [0][0]
+ if not self.__datatype.has_key (name):
+ self.__datatype [name] = self.__sm.load (self.__sid, self.__class,
+ [''], [name]) [0][0]
+ datatype = self.__datatype [name]
except KeyError:
raise MemberNotFoundError, (self.__class, name)
@@ -132,14 +154,18 @@
else:
__value = value
- sm.store (sid, self.__class, [self.objectId], [name], [[__value]])
+ self.__sm.store (self.__sid, self.__class, [self.objectId], [name],
+ [[__value]])
+ gEndFunc (6, hasResult = False)
+
# -------------------------------------------------------------------------
# Return the Object-ID as string representation
# -------------------------------------------------------------------------
def __str__ (self):
+
if self.objectId:
return self.objectId
else:
@@ -151,6 +177,7 @@
# -------------------------------------------------------------------------
def __repr__ (self):
+
if self.objectId:
return '<%s instance with id %s>' % (self.__class, self.objectId)
else:
@@ -162,8 +189,11 @@
# -------------------------------------------------------------------------
def __getitem__ (self, item):
+
return self.__getattr__ (item)
+
def __setitem__ (self, item, value):
+
self.__setattr__ (item, value)
@@ -181,11 +211,16 @@
# -------------------------------------------------------------------------
def delete (self):
- self.__session.getSessionManager ().delete (
- self.__session.getSessionId (), self.__class, [self.objectId])
+
+ gBeginFunc (6)
+
+ self.__sm.delete (self.__sid, self.__class, [self.objectId])
self.objectId = None
+ gEndFunc (6, hasResult = False)
+
+
# =============================================================================
# Class implementing None values for reference-properties
# =============================================================================
@@ -198,8 +233,11 @@
def __init__ (self, session, classname):
- self.__session = session
- self.__class = classname
+ self.__session = session
+ self.__class = classname
+ self.__sm = session.getSessionManager ()
+ self.__sid = session.getSessionId ()
+ self.__datatype = {}
# ---------------------------------------------------------------------------
@@ -216,18 +254,22 @@
@return: self for reference properties, None for non-reference properties.
"""
- sm = self.__session.getSessionManager ()
- sid = self.__session.getSessionId ()
+ gBeginFunc (6)
+
name = self.__session.qualify (attr)
- datatype = sm.load (sid, self.__class, [''], [name]) [0][0]
-
- if '_' in datatype:
- self.__class = datatype
- return self
+ if not self.__datatype.has_key (name):
+ self.__datatype [name] = self.__sm.load (self.__sid, self.__class,
+ [''], [name]) [0][0]
+ if '_' in self.__datatype [name]:
+ self.__class = self.__datatype [name]
+ result = self
else:
- return None
+ result = None
+ gEndFunc (6, result)
+ return result
+
# ---------------------------------------------------------------------------
# Truth-test
# ---------------------------------------------------------------------------
Modified: trunk/gnue-appserver/src/language/Procedure.py
===================================================================
--- trunk/gnue-appserver/src/language/Procedure.py 2005-02-12 23:29:37 UTC
(rev 7018)
+++ trunk/gnue-appserver/src/language/Procedure.py 2005-02-13 15:39:50 UTC
(rev 7019)
@@ -40,8 +40,12 @@
# Delegate calls of this object to the session manager
# ---------------------------------------------------------------------------
def __call__ (self, **params):
+ gBeginFunc (6)
+
sm = self.__session.getSessionManager ()
sid = self.__session.getSessionId ()
- return sm.call (sid, self.__class, [self.__objectId], self.method,
+ result = sm.call (sid, self.__class, [self.__objectId], self.method,
params) [0]
+ gEndFunc (6, result)
+ return result
Modified: trunk/gnue-appserver/src/language/Session.py
===================================================================
--- trunk/gnue-appserver/src/language/Session.py 2005-02-12 23:29:37 UTC
(rev 7018)
+++ trunk/gnue-appserver/src/language/Session.py 2005-02-13 15:39:50 UTC
(rev 7019)
@@ -79,63 +79,95 @@
# Ensure the given name is fully qualified using the current context
# -------------------------------------------------------------------------
def qualify (self, name):
+
if '_' in name:
- return name
+ result = name
else:
if self.__context is None:
raise NoContextError (name)
else:
- return "%s_%s" % (self.__context, name)
+ result = "%s_%s" % (self.__context, name)
+ return result
+
# -------------------------------------------------------------------------
# Close the session
# -------------------------------------------------------------------------
def close (self):
+
+ gBeginFunc (6)
+
if self.__sm is not None:
self.__sm.close (self.__session_id, None)
self.__sm = self.__session_id = None
+ gEndFunc (6, hasResult = False)
+
+
# -------------------------------------------------------------------------
# Commit the current transaction
# -------------------------------------------------------------------------
def commit (self):
+
+ gBeginFunc (6)
+
if self.__session_id is not None:
self.__sm.commit (self.__session_id)
+ gEndFunc (6, hasResult = False)
+
+
# -------------------------------------------------------------------------
# Revoke the current transaction
# -------------------------------------------------------------------------
def rollback (self):
+
+ gBeginFunc (6)
+
if self.__session_id is not None:
self.__sm.rollback (self.__session_id)
+ gEndFunc (6, hasResult = False)
+
# -------------------------------------------------------------------------
# Return a collection of 'classname' matching the given arguments
# -------------------------------------------------------------------------
def find (self, classname, conditions = None,
sortorder = [('gnue_id', False)], properties = []):
- return ObjectList (self, self.qualify (classname), conditions, sortorder,
+
+ gBeginFunc (6)
+ result = ObjectList (self, self.qualify (classname), conditions, sortorder,
properties)
+ gEndFunc (6, result)
+ return result
# -------------------------------------------------------------------------
# Create a new instance of classname
# -------------------------------------------------------------------------
def new (self, classname):
- return Object (self, self.qualify (classname))
+ gBeginFunc (6)
+ result = Object (self, self.qualify (classname))
+ gEndFunc (6, result)
+ return result
+
# -------------------------------------------------------------------------
# Get a message from the message catalogue
# -------------------------------------------------------------------------
def message (self, messageName, *args):
+
+ gBeginFunc (6)
+
languages = ['C']
current = self.parameters.get ('_language', 'C')
if '_' in current:
add = current.split ('_') [0]
if not add in languages:
languages.insert (0, add)
+
if not current in languages:
languages.insert (0, current)
@@ -158,6 +190,7 @@
else:
text = text % args
+ gEndFunc (6, text)
return text
raise MessageNotFoundError, self.qualify (messageName)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnue] r7019 - in trunk/gnue-appserver/src: . classrep language,
johannes <=