commit-gnue
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

gnue-common/src/datasources/drivers/appserver/a...


From: Jan Ischebeck
Subject: gnue-common/src/datasources/drivers/appserver/a...
Date: Sat, 06 Sep 2003 08:05:23 -0400

CVSROOT:        /cvsroot/gnue
Module name:    gnue-common
Branch:         
Changes by:     Jan Ischebeck <address@hidden>  03/09/06 08:05:23

Modified files:
        src/datasources/drivers/appserver/appserver: Driver.py 

Log message:
        Appserver DB driver update:
        - add introspection support
        - name change: replace GEASv2 with Appserver

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-common/src/datasources/drivers/appserver/appserver/Driver.py.diff?tr1=1.16&tr2=1.17&r1=text&r2=text

Patches:
Index: gnue-common/src/datasources/drivers/appserver/appserver/Driver.py
diff -c gnue-common/src/datasources/drivers/appserver/appserver/Driver.py:1.16 
gnue-common/src/datasources/drivers/appserver/appserver/Driver.py:1.17
*** gnue-common/src/datasources/drivers/appserver/appserver/Driver.py:1.16      
Mon Sep  1 15:08:19 2003
--- gnue-common/src/datasources/drivers/appserver/appserver/Driver.py   Sat Sep 
 6 08:05:23 2003
***************
*** 43,49 ****
  import md5
  import sys
  
! class GEASv2_Connector:
    def __init__(self, connectData):
      
      user = connectData['_username']
--- 43,49 ----
  import md5
  import sys
  
! class Appserver_Connector:
    def __init__(self, connectData):
      
      user = connectData['_username']
***************
*** 73,86 ****
        tmsg = _("Error loging into appserver")
        raise GDataObjects.ConnectionError, tmsg
  
!     self._updateCursor = GEASv2_UpdateCursor(self)
       
    def cursor(self):
      return self._updateCursor
  
    def request(self,table,filter,sort,fieldlist):
      listid = self._sm.request(self._sess_id,table,filter,sort,fieldlist)
!     return GEASv2_ListCursor(self,listid,fieldlist)
  
    def call(self,classname,obj_id_list,methodname,parameters):
      self._sm.call(self._sess_id,classname,obj_id_list,methodname,parameters)
--- 73,86 ----
        tmsg = _("Error loging into appserver")
        raise GDataObjects.ConnectionError, tmsg
  
!     self._updateCursor = Appserver_UpdateCursor(self)
       
    def cursor(self):
      return self._updateCursor
  
    def request(self,table,filter,sort,fieldlist):
      listid = self._sm.request(self._sess_id,table,filter,sort,fieldlist)
!     return Appserver_ListCursor(self,listid,fieldlist)
  
    def call(self,classname,obj_id_list,methodname,parameters):
      self._sm.call(self._sess_id,classname,obj_id_list,methodname,parameters)
***************
*** 96,102 ****
    def close(self,commit):
      self._sm.close(self._sess_id,commit)
  
! class GEASv2_ListCursor:
    def __init__(self,dataCon,listid,fieldlist):
      self._dataCon=dataCon
      self._listid=listid
--- 96,102 ----
    def close(self,commit):
      self._sm.close(self._sess_id,commit)
  
! class Appserver_ListCursor:
    def __init__(self,dataCon,listid,fieldlist):
      self._dataCon=dataCon
      self._listid=listid
***************
*** 136,143 ****
  
      return self._count
  
  
! class GEASv2_UpdateCursor:
    def __init__(self,dataCon):
      self._dataCon=dataCon
      self._deleteList={}
--- 136,146 ----
  
      return self._count
  
+   def close(self):
+     pass
+     # TODO: Implement List Close command
  
! class Appserver_UpdateCursor:
    def __init__(self,dataCon):
      self._dataCon=dataCon
      self._deleteList={}
***************
*** 190,196 ****
        self._updateKeyList[classname]=[] 
  
  
! class GEASv2_RecordSet(GDataObjects.RecordSet):
    def _postChanges(self):
      if self._deleteFlag:
        GDebug.printMesg(5, 'AppServer database driver: Instance deleted')
--- 193,199 ----
        self._updateKeyList[classname]=[] 
  
  
! class Appserver_RecordSet(GDataObjects.RecordSet):
    def _postChanges(self):
      if self._deleteFlag:
        GDebug.printMesg(5, 'AppServer database driver: Instance deleted')
***************
*** 229,246 ****
                                                    name,params)
  
    
! # GEASv2_ResultSet
  #
  # Notes:
! # In the GEASv2 driver a CURSOR is simply the List handle returned
  # via the query interface
  #
! class GEASv2_ResultSet(GDataObjects.ResultSet): 
    def __init__(self, dataObject, cursor=None, \
          defaultValues={}, masterRecordSet=None): 
      GDataObjects.ResultSet.__init__(
             self,dataObject,cursor,defaultValues,masterRecordSet)
!     self._recordSetClass = GEASv2_RecordSet
      GDebug.printMesg(5, 'ResultSet created')
  
    def _loadNextRecord(self): 
--- 232,249 ----
                                                    name,params)
  
    
! # Appserver_ResultSet
  #
  # Notes:
! # In the Appserver driver a CURSOR is simply the List handle returned
  # via the query interface
  #
! class Appserver_ResultSet(GDataObjects.ResultSet): 
    def __init__(self, dataObject, cursor=None, \
          defaultValues={}, masterRecordSet=None): 
      GDataObjects.ResultSet.__init__(
             self,dataObject,cursor,defaultValues,masterRecordSet)
!     self._recordSetClass = Appserver_RecordSet
      GDebug.printMesg(5, 'ResultSet created')
  
    def _loadNextRecord(self): 
***************
*** 265,285 ****
      return more
  
  
! class GEASv2_DataObject(GDataObjects.DataObject):
  
    def __init__(self):
      GDataObjects.DataObject.__init__(self)
  
      GDebug.printMesg (1,"AppServer database driver backend initializing")
!     self._resultSetClass = GEASv2_ResultSet
      self._DatabaseError = GComm.Error
  
    def connect(self, connectData={}): 
      GDebug.printMesg(1,"AppServer database driver connecting...")
  
!     self._dataConnection = GEASv2_Connector(connectData)
    
!     self.triggerExtensions =  GEASv2_TriggerExtensions(self._dataConnection)
  
    # We only need the basics -- username and password -- to log in
    def getLoginFields(self): 
--- 268,288 ----
      return more
  
  
! class Appserver_DataObject(GDataObjects.DataObject):
  
    def __init__(self):
      GDataObjects.DataObject.__init__(self)
  
      GDebug.printMesg (1,"AppServer database driver backend initializing")
!     self._resultSetClass = Appserver_ResultSet
      self._DatabaseError = GComm.Error
  
    def connect(self, connectData={}): 
      GDebug.printMesg(1,"AppServer database driver connecting...")
  
!     self._dataConnection = Appserver_Connector(connectData)
    
!     self.triggerExtensions =  
Appserver_TriggerExtensions(self._dataConnection)
  
    # We only need the basics -- username and password -- to log in
    def getLoginFields(self): 
***************
*** 363,411 ****
        tmsg = _("Error during Rollback")
        raise GDataObjects.ConnectionError, tmsg
  
! ### The folowing methods are not working and just copies from the old geas
! ### driver
! 
! ### TODO add introspection support to geas
  
    def getSchemaTypes(self):
!       return [('object',_('Objects'),1)]
  
-   # Return a list of Schema objects
    def getSchemaList(self, type=None):
!       includeObjects = (type in ('object','sources', None))
!       
        list = []
!       for classname in self._dataConnection.classes:
!         list.append(self.getSchemaByName(classname))
        return list
  
    def getSchemaByName(self, name, type=None): 
!       classdef = self._dataConnection.getFullClassDefinition(str(name))
!       schema = GDataObjects.Schema(attrs={'id':string.lower(classdef.name),
!                                           'name':classdef.name,
!                                           'type':'object'},
!                                    getChildSchema=self.__getFieldSchema)
        return schema
    
-   # Get fields/methods of a GEAS object
    def __getChildSchema(self, parent):
        list = []
!       c = con.getFullClassDefinition( classnames[idx-1] )
        
    def getFields(self, name):
        # no introspection support for now
        return self._fieldReferences.keys()
  
  supportedDataObjects = { 
!   'object': GEASv2_DataObject
  }
  
  
  #
  #  Extensions to Trigger Namespaces
  #
! class GEASv2_TriggerExtensions:
  
    def __init__(self, dataConnection):
      self._dataCon = dataConnection
--- 366,500 ----
        tmsg = _("Error during Rollback")
        raise GDataObjects.ConnectionError, tmsg
  
!   ####
!   #
!   # Introspection support (works through direct access on gnue_module, 
gnue_class und gnue_property tables
!   #
!   # TODO: Move to Introspection Subdir
  
    def getSchemaTypes(self):
!       return [('object',_('Business Object Class'),1)]
! 
!   #############
!   #
!   #  get list of all business classes
!   #
  
    def getSchemaList(self, type=None):
!       if not(type in ('object',None)):
!         return []
! 
!       try:
!         listcursor = 
self._dataConnection.request('gnue_class',[],['gnue_module'],['gnue_name','gnue_comment','gnue_module'])
!       except Exception, msg:
!         print "error %s" %msg
!         GDebug.printMesg(1,_("Error creating introspection module list \n\n 
--- %s ---)") % msg)
!         return []
! 
        list = []
!       data = ['1']
!       while len(data):
!         data = listcursor.fetch()                         
!         for classdef in data:
!           print classdef
!           schema = 
GDataObjects.Schema(attrs={'id':string.lower(classdef['gnue_name']),
!                                               'name':classdef['gnue_name'],
!                                               'type':'object',
!                                               'gnue_id':classdef['gnue_id']},
!                                        getChildSchema=self.__getChildSchema)
!           list.append(schema)
! 
! 
!       listcursor.close()
!       
        return list
  
+   #############
+   #
+   #  get schema for one single business class
+   #
+   
    def getSchemaByName(self, name, type=None): 
!       try:
!         listcursor = self._dataConnection.request('gnue_class', [["eq", ""], 
["field", "gnue_name"], ["const", name]],
!                                                   
['gnue_module'],['gnue_name','gnue_comment','gnue_module'])
!       except Exception, msg:
!         print "error %s" %msg
!         GDebug.printMesg(1,_("Error fetching class %s \n\n --- %s ---)") % 
(name,msg))
!         return []
! 
!       data = listcursor.fetch()                         
!       if len(data):
!         classdef = data[0]
!         print classdef
!         schema = 
GDataObjects.Schema(attrs={'id':string.lower(classdef['gnue_name']),
!                                             'name':classdef['gnue_name'],
!                                             'type':'object',
!                                             'gnue_id':classdef['gnue_id']},
!                                      getChildSchema=self.__getChildSchema)
!       listcursor.close()
!       
        return schema
+     
+   #############
+   #
+   #  get schema for one single business class
+   #
    
    def __getChildSchema(self, parent):
+       try:
+         # fetch all properties used by class "parent"
+         listcursor = self._dataConnection.request('gnue_property',  # class
+                                                   [["eq", ""], ["field", 
"gnue_class"],
+                                                                ["const", 
parent.gnue_id]], # condition
+                                                   ['gnue_module'],  # sort
+                                                   
['gnue_name','gnue_comment','gnue_module','gnue_class','gnue_type',
+                                                    
'gnue_length','gnue_scale'])  
+         
+       except Exception, msg:
+         print "error %s" %msg
+         GDebug.printMesg(1,_("Error while loading class properties for class 
%s \n\n --- %s ---)") % (parent.name,msg))
+         return []
+ 
        list = []
!       data = ['1']
!       while len(data):
!         data = listcursor.fetch()                         
!         for propdef in data:
!           print propdef
!           attrs={'id': "%s.%s" % (parent.id, 
string.lower(propdef['gnue_name'])),
!                  'name': propdef['gnue_name'],
!                  'precision': propdef['gnue_scale'],   # TODO: check if scale 
and precision is the same
!                  'datatype':propdef['gnue_type'],
!                  'nativetype': 'unknown',
!                  'required': 0 }                       # TODO: classrep has 
no  'required' field
! 
!           # TODO: make classrep types a bit more straigtforward
!           if propdef['gnue_type'] =='id' or propdef['gnue_type'] 
=='gnue_module' \
!                  or propdef['gnue_type'] =='gnue_class':
!             attrs['length'] =  32
!           else:
!             attrs['length'] =  propdef['gnue_length']
!         
!           list.append(GDataObjects.Schema(attrs=attrs))
! 
!       listcursor.close()
!       
!       return list
        
    def getFields(self, name):
        # no introspection support for now
        return self._fieldReferences.keys()
  
  supportedDataObjects = { 
!   'object': Appserver_DataObject
  }
  
  
  #
  #  Extensions to Trigger Namespaces
  #
! class Appserver_TriggerExtensions:
  
    def __init__(self, dataConnection):
      self._dataCon = dataConnection




reply via email to

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