[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnue/appserver/src/classrep Class.py Module.py ...
From: |
Johannes Vetter |
Subject: |
gnue/appserver/src/classrep Class.py Module.py ... |
Date: |
Sat, 08 Mar 2003 12:41:58 -0500 |
CVSROOT: /cvsroot/gnue
Module name: gnue
Changes by: Johannes Vetter <address@hidden> 03/03/08 12:41:55
Modified files:
appserver/src/classrep: Class.py Module.py __init__.py
Added files:
appserver/src/classrep: Property.py Namespace.py dtest.py
Log message:
Basic class repository without caching algorithm (caches everything)
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/appserver/src/classrep/Property.py?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/appserver/src/classrep/Namespace.py?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/appserver/src/classrep/dtest.py?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/appserver/src/classrep/Class.py.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/appserver/src/classrep/Module.py.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/appserver/src/classrep/__init__.py.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
Patches:
Index: gnue/appserver/src/classrep/Class.py
diff -c gnue/appserver/src/classrep/Class.py:1.1
gnue/appserver/src/classrep/Class.py:1.2
*** gnue/appserver/src/classrep/Class.py:1.1 Mon Feb 24 11:46:02 2003
--- gnue/appserver/src/classrep/Class.py Sat Mar 8 12:41:52 2003
***************
*** 19,108 ****
# write to the Free Software Foundation, Inc., 59 Temple Place
# - Suite 330, Boston, MA 02111-1307, USA.
#
! # $Id: Class.py,v 1.1 2003/02/24 16:46:02 jvetter Exp $
#
=============================================================================
! # Dictionary with all classes
#
=============================================================================
class ClassDict:
#
---------------------------------------------------------------------------
# Create a dictionary with all classes [from a specified module]
#
---------------------------------------------------------------------------
! def __init__ (self, session, module = None):
self._session = session
self._module = module
! if self._module:
! cond = [["eq", ""], ["field", "gnue_module"], ["const",
self._module.id]]
! else:
! cond = []
! self._list = session.find ("gnue_class", cond, ["gnue_name"],
! ["gnue_module", "gnue_name"])
#
---------------------------------------------------------------------------
! # Return a class object if it exists, or default otherwise
#
---------------------------------------------------------------------------
! def get (self, name, default = None):
# is the class already cached ?
! for aClass in self._list:
! # FIXME: find a better way to verify a match (e.g. fully qualified
names)
! if (aClass.gnue_name == name):
! return Class (self._session, aClass, self._module)
# since we had no match cached, ask for it
! res = self._session.find ("gnue_class",
! [["eq", ""], ["field", "gnue_name"],
! ["const", name]],
! ["gnue_id", "gnue_module", "gnue_name"],
! ["gnue_module", "gnue_name"])
! if len (res) <> 1:
! return default
! else:
! # don't forget to update the cache
! self._list.append (res [0])
! return Class (self._session, res [0], self._module)
#
---------------------------------------------------------------------------
# Get the keys
#
---------------------------------------------------------------------------
def keys (self):
! return [cls.gnue_name for cls in self._list]
#
---------------------------------------------------------------------------
# Get the values
#
---------------------------------------------------------------------------
def values (self):
! return [Class (self._session, cls) for cls in self._list]
#
---------------------------------------------------------------------------
# Get the (key, value) pairs
#
---------------------------------------------------------------------------
def items (self):
! return [(cls, Class(self._session, cls)) for cls in self._list]
#
---------------------------------------------------------------------------
# Return wether the given key (class) exists
#
---------------------------------------------------------------------------
def has_key (self, name):
! return self.get (name) <> None
#
---------------------------------------------------------------------------
# Get the number of classes Use len (aClassDict) to get this value
#
---------------------------------------------------------------------------
def __len__ (self):
! return len (self._list)
#
---------------------------------------------------------------------------
# Get a specific item by name
#
---------------------------------------------------------------------------
def __getitem__ (self, name):
! result = self.get (name)
! if result:
! return result
! else:
! raise KeyError, name
--- 19,140 ----
# write to the Free Software Foundation, Inc., 59 Temple Place
# - Suite 330, Boston, MA 02111-1307, USA.
#
! # $Id: Class.py,v 1.2 2003/03/08 17:41:52 jvetter Exp $
!
! from Namespace import *
! from Property import *
#
=============================================================================
! # Dictionary with classes
#
=============================================================================
class ClassDict:
#
---------------------------------------------------------------------------
# Create a dictionary with all classes [from a specified module]
#
---------------------------------------------------------------------------
! def __init__ (self, session, moduleDict, module = None):
! self.modules = moduleDict
self._session = session
self._module = module
+ self._cache = {}
+
+ if module:
+ self._updateCache (self._requestData (module.id))
! #
---------------------------------------------------------------------------
! # Update the cache with all business objects in list
! #
---------------------------------------------------------------------------
! def _updateCache (self, list):
! for item in list:
! klass = self._class_from_cache (item)
! self._cache [klass.fullName] = klass
!
! #
---------------------------------------------------------------------------
! # Request a list of matching business objects
! #
---------------------------------------------------------------------------
! def _requestData (self, moduleId, className=None):
! print "DEBUG: Class: requestData %s, %s" % (moduleId, className)
! cond = [["eq", ""], ["field", "gnue_module"], ["const", moduleId]]
! if className:
! cond += [["eq", ""], ["field", "gnue_name"], ["const", className]]
!
! return self._session.find ("gnue_class", cond,
! ["gnue_module", "gnue_name"],
! ["gnue_module", "gnue_name"])
!
! #
---------------------------------------------------------------------------
! # Return an item from the cache using the ModuleDict for module verification
! #
---------------------------------------------------------------------------
! def _class_from_cache (self, item):
! module = self._module_from_cache (item)
! return Class (self, module, item)
!
! #
---------------------------------------------------------------------------
! # Return the module of a cached item
! #
---------------------------------------------------------------------------
! def _module_from_cache (self, item):
! for module in self.modules.values ():
! if module.id == item.gnue_module:
! return module
! raise EBadReference (item.name, "gnue_module")
#
---------------------------------------------------------------------------
! # Return a class object if it exists
#
---------------------------------------------------------------------------
! def get (self, name):
! (moduleName, className) = splitName (name)
! module = self.modules [moduleName]
!
# is the class already cached ?
! if self.has_key (name):
! return self._cache [name]
# since we had no match cached, ask for it
! print "DEBUG: Class: REFETCH %s, %s" % (module.id, className)
! res = self._requestData (module.id, className)
!
! if len (res) == 1:
! self._updateCache (res)
! return self._cache [name]
!
! raise EClassNotFound (name)
#
---------------------------------------------------------------------------
# Get the keys
#
---------------------------------------------------------------------------
def keys (self):
! return self._cache.keys ()
#
---------------------------------------------------------------------------
# Get the values
#
---------------------------------------------------------------------------
def values (self):
! return self._cache.values ()
#
---------------------------------------------------------------------------
# Get the (key, value) pairs
#
---------------------------------------------------------------------------
def items (self):
! return self._cache.items ()
#
---------------------------------------------------------------------------
# Return wether the given key (class) exists
#
---------------------------------------------------------------------------
def has_key (self, name):
! return self._cache.has_key (name)
#
---------------------------------------------------------------------------
# Get the number of classes Use len (aClassDict) to get this value
#
---------------------------------------------------------------------------
def __len__ (self):
! return len (self._cache)
#
---------------------------------------------------------------------------
# Get a specific item by name
#
---------------------------------------------------------------------------
def __getitem__ (self, name):
! return self.get (name)
***************
*** 111,125 ****
#
=============================================================================
class Class:
! def __init__ (self, session, object, module = None):
! self._session = session
! self._object = object
! self._module = module
def __getattr__ (self, attr):
! # FIXME: experimental: building fully qualified names must be discussed
! # in more detail.
! if attr == 'fqName':
! return "%s_%s" % (self._module.name, self.name)
! else:
! return getattr (self._object, "gnue_" + attr)
--- 143,167 ----
#
=============================================================================
class Class:
! #
---------------------------------------------------------------------------
! # Wrapping a business object class
! #
---------------------------------------------------------------------------
! def __init__ (self, classDict, module, object):
! self._object = object
! self.classes = classDict
! self.module = module
! self.properties = PropertyDict (classDict._session, classDict.modules,
self)
+ self.fullName = createName (self.module.name, self.name)
+
+ #
---------------------------------------------------------------------------
+ # Attribute access is redirected into the gnue-namespace
+ #
---------------------------------------------------------------------------
def __getattr__ (self, attr):
! return getattr (self._object, createName ("gnue", attr))
!
! #
---------------------------------------------------------------------------
! # Return a property by name
! #
---------------------------------------------------------------------------
! def findProp (self, name):
! return self.properties [name]
Index: gnue/appserver/src/classrep/Module.py
diff -c gnue/appserver/src/classrep/Module.py:1.2
gnue/appserver/src/classrep/Module.py:1.3
*** gnue/appserver/src/classrep/Module.py:1.2 Mon Feb 24 11:44:34 2003
--- gnue/appserver/src/classrep/Module.py Sat Mar 8 12:41:52 2003
***************
*** 19,26 ****
# write to the Free Software Foundation, Inc., 59 Temple Place
# - Suite 330, Boston, MA 02111-1307, USA.
#
! # $Id: Module.py,v 1.2 2003/02/24 16:44:34 jvetter Exp $
from Class import ClassDict
#
=============================================================================
--- 19,28 ----
# write to the Free Software Foundation, Inc., 59 Temple Place
# - Suite 330, Boston, MA 02111-1307, USA.
#
! # $Id: Module.py,v 1.3 2003/03/08 17:41:52 jvetter Exp $
+
+ from Namespace import *
from Class import ClassDict
#
=============================================================================
***************
*** 34,103 ****
#
---------------------------------------------------------------------------
def __init__ (self, session):
self._session = session
! self._list = session.find ("gnue_module", [], ["gnue_name"],
["gnue_name"])
#
---------------------------------------------------------------------------
! # Return a Module object if the given module exists, or default (None)
! # otherwise
#
---------------------------------------------------------------------------
! def get (self, name, default = None):
! # is the requested module in the cache ?
! for module in self._list:
! if module.gnue_name == name:
! return Module (self._session, module)
# since it isn't cached we've to ask for it
! list = self._session.find ("gnue_module",
! [["eq", ""], ["field", "gnue_name"],
! ["const", name]],
! ["gnue_id", "gnue_name"], ["gnue_name"])
! if len (list) <> 1:
! return default
! else:
! # extend the cache and return the requested instance
! self._list.append (list [0])
! return Module (self._session, list [0])
#
---------------------------------------------------------------------------
# Get the keys
#
---------------------------------------------------------------------------
def keys (self):
! return [module.gnue_name for module in self._list]
#
---------------------------------------------------------------------------
# Get the values
#
---------------------------------------------------------------------------
def values (self):
! return [Module (self._session, module) for module in self._list]
#
---------------------------------------------------------------------------
# Get the (key, value) pairs
#
---------------------------------------------------------------------------
def items (self):
! return [(mod.gnue_name, Module (self._session, mod)) for mod in
self._list]
#
---------------------------------------------------------------------------
! # Return whether the given key exists
#
---------------------------------------------------------------------------
def has_key (self, name):
! return self.get (name) <> None
#
---------------------------------------------------------------------------
# Get the count of modules. Call len (myModuleDict) to get this value.
#
---------------------------------------------------------------------------
def __len__ (self):
! return len (self._list)
#
---------------------------------------------------------------------------
# Get a specific module by name
#
---------------------------------------------------------------------------
def __getitem__ (self, name):
! result = self.get (name)
! if result:
! return result
! else:
! raise KeyError, name
#
=============================================================================
--- 36,125 ----
#
---------------------------------------------------------------------------
def __init__ (self, session):
self._session = session
! self._cache = {}
!
! self._updateCache (self._requestData ())
!
! #
---------------------------------------------------------------------------
! # Integrate a list of business objects into the cache
! #
---------------------------------------------------------------------------
! def _updateCache (self, list):
! for item in list:
! module = self._module_from_cache (item)
! self._cache [module.fullName] = module
!
! #
---------------------------------------------------------------------------
! # Internal: Request modules from datasource (optional matching a name)
! #
---------------------------------------------------------------------------
! def _requestData (self, name = None):
! print "DEBUG: Module: requestData (%s)" % name
!
! cond = []
! if name:
! cond = [["eq", ""], ["field", "gnue_name"], ["const", name]]
! return self._session.find ("gnue_module", cond, ["gnue_name"],
! ["gnue_name", "gnue_id"])
!
! #
---------------------------------------------------------------------------
! # Internal: create an instance from a cached object
! #
---------------------------------------------------------------------------
! def _module_from_cache (self, item):
! return Module (self, item)
#
---------------------------------------------------------------------------
! # Return a Module object if the given module exists
#
---------------------------------------------------------------------------
! def get (self, name):
! # is the requested module cached?
! if self.has_key (name):
! return self._cache [name]
# since it isn't cached we've to ask for it
! print "DEBUG: Module: REFETCH (%s)" % name
! list = self._requestData (name)
+ # if we have an exact match extend the cache
+ if len (list) == 1:
+ self._updateCache (list)
+ return self._cache [name]
+
+ raise EModuleNotFound (name)
#
---------------------------------------------------------------------------
# Get the keys
#
---------------------------------------------------------------------------
def keys (self):
! return self._cache.keys ()
#
---------------------------------------------------------------------------
# Get the values
#
---------------------------------------------------------------------------
def values (self):
! return self._cache.values ()
#
---------------------------------------------------------------------------
# Get the (key, value) pairs
#
---------------------------------------------------------------------------
def items (self):
! return self._cache.items ()
#
---------------------------------------------------------------------------
! # Return wether the given key exists
#
---------------------------------------------------------------------------
def has_key (self, name):
! return self._cache.has_key (name)
#
---------------------------------------------------------------------------
# Get the count of modules. Call len (myModuleDict) to get this value.
#
---------------------------------------------------------------------------
def __len__ (self):
! return len (self._cache)
#
---------------------------------------------------------------------------
# Get a specific module by name
#
---------------------------------------------------------------------------
def __getitem__ (self, name):
! return self.get (name)
#
=============================================================================
***************
*** 105,124 ****
#
=============================================================================
class Module:
! def __init__ (self, session, object):
! # _session is a valid LI session
# _object is the underlying business object
! self._session = session
self._object = object
#
---------------------------------------------------------------------------
# Return an attribute's value
#
---------------------------------------------------------------------------
def __getattr__ (self, attr):
! return getattr (self._object, "gnue_" + attr)
- #
---------------------------------------------------------------------------
- # Return a dictionary with all classes associated with this instance
- #
---------------------------------------------------------------------------
- def classes (self):
- return ClassDict (self._session, self)
--- 127,149 ----
#
=============================================================================
class Module:
! def __init__ (self, modDict, object):
# _object is the underlying business object
! self.modules = modDict
self._object = object
+ self._classes = None
+
+ self.fullName = self.name
#
---------------------------------------------------------------------------
# Return an attribute's value
#
---------------------------------------------------------------------------
def __getattr__ (self, attr):
! if attr == 'classes':
! if not self._classes:
! self._classes = ClassDict (self.modules._session, self.modules, self)
! return self._classes
!
! else:
! return getattr (self._object, createName ("gnue", attr))
Index: gnue/appserver/src/classrep/__init__.py
diff -c gnue/appserver/src/classrep/__init__.py:1.1
gnue/appserver/src/classrep/__init__.py:1.2
*** gnue/appserver/src/classrep/__init__.py:1.1 Sun Feb 16 18:10:12 2003
--- gnue/appserver/src/classrep/__init__.py Sat Mar 8 12:41:53 2003
***************
*** 0 ****
--- 1,42 ----
+ # GNU Enterprise Application Server - Class Repository
+ #
+ # Copyright 2003 Free Software Foundation
+ #
+ # This file is part of GNU Enterprise.
+ #
+ # GNU Enterprise is free software; you can redistribute it
+ # and/or modify it under the terms of the GNU General Public
+ # License as published by the Free Software Foundation; either
+ # version 2, or (at your option) any later version.
+ #
+ # GNU Enterprise is distributed in the hope that it will be
+ # useful, but WITHOUT ANY WARRANTY; without even the implied
+ # warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ # PURPOSE. See the GNU General Public License for more details.
+ #
+ # You should have received a copy of the GNU General Public
+ # License along with program; see the file COPYING. If not,
+ # write to the Free Software Foundation, Inc., 59 Temple Place
+ # - Suite 330, Boston, MA 02111-1307, USA.
+ #
+ # $Id: __init__.py,v 1.2 2003/03/08 17:41:53 jvetter Exp $
+
+ from Module import *
+ from Class import *
+ from Namespace import *
+
+ Modules = None
+ Classes = None
+
+ #
-----------------------------------------------------------------------------
+ # find a class in the class repository
+ #
-----------------------------------------------------------------------------
+ def findClass (className, session):
+ global Modules, Classes
+
+ if not Modules:
+ Modules = ModuleDict (session)
+ if not Classes:
+ Classes = ClassDict (session, Modules)
+
+ return Classes [className]
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- gnue/appserver/src/classrep Class.py Module.py ...,
Johannes Vetter <=