commit-gnue
[Top][All Lists]
Advanced

[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]




reply via email to

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