commit-gnue
[Top][All Lists]
Advanced

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

gnue common/src/dbdrivers/appserver/DBdriver.py...


From: Jan Ischebeck
Subject: gnue common/src/dbdrivers/appserver/DBdriver.py...
Date: Sun, 26 May 2002 05:22:15 -0400

CVSROOT:        /cvsroot/gnue
Module name:    gnue
Changes by:     Jan Ischebeck <address@hidden>  02/05/26 05:22:15

Modified files:
        common/src/dbdrivers/appserver: DBdriver.py 
        appserver/grpc : GEAS.grpc 
        appserver/src  : geasInstance.py geasList.py geasSession.py 

Log message:
        update appserver/DBdriver to support writing, inserting and deleting 
records
        added functions for inserting and deleting records to appserver
        for appserver v0.01 just geasConditions support is missing

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/common/src/dbdrivers/appserver/DBdriver.py.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/appserver/grpc/GEAS.grpc.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/appserver/src/geasInstance.py.diff?tr1=1.3&tr2=1.4&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/appserver/src/geasList.py.diff?tr1=1.3&tr2=1.4&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/appserver/src/geasSession.py.diff?tr1=1.4&tr2=1.5&r1=text&r2=text

Patches:
Index: gnue/appserver/grpc/GEAS.grpc
diff -c gnue/appserver/grpc/GEAS.grpc:1.2 gnue/appserver/grpc/GEAS.grpc:1.3
*** gnue/appserver/grpc/GEAS.grpc:1.2   Sun May 19 18:34:59 2002
--- gnue/appserver/grpc/GEAS.grpc       Sun May 26 05:22:15 2002
***************
*** 34,49 ****
                </method>
                <method name="firstInstance" 
return="&lt;SessionManager.geasInstance&gt;"/>     
                  <method name="nextInstance" 
return="&lt;SessionManager.geasInstance&gt;"/>    
          </object>
          <object name="geasInstance">
            <attribute name="classname" type="string" readonly=""/>
              <method name="get" return="string">
                  <argument name="fieldname" type="string"/>
                </method>
!               <method name="set">
                  <argument name="fieldname" type="string"/>
                  <argument name="value" type="string"/>
                </method>
          </object>
    </service>
  </gnurpc>
--- 34,54 ----
                </method>
                <method name="firstInstance" 
return="&lt;SessionManager.geasInstance&gt;"/>     
                  <method name="nextInstance" 
return="&lt;SessionManager.geasInstance&gt;"/>    
+                 <method name="insertNewInstance" 
return="&lt;SessionManager.geasInstance&gt;"/>       
          </object>
          <object name="geasInstance">
            <attribute name="classname" type="string" readonly=""/>
              <method name="get" return="string">
                  <argument name="fieldname" type="string"/>
                </method>
!               <method name="put">
                  <argument name="fieldname" type="string"/>
                  <argument name="value" type="string"/>
                </method>
+               <method name="call">
+                 <argument name="methodname" type="string"/>
+               </method>
+               <method name="delete"/>
          </object>
    </service>
  </gnurpc>
Index: gnue/appserver/src/geasInstance.py
diff -c gnue/appserver/src/geasInstance.py:1.3 
gnue/appserver/src/geasInstance.py:1.4
*** gnue/appserver/src/geasInstance.py:1.3      Wed May 22 11:25:10 2002
--- gnue/appserver/src/geasInstance.py  Sun May 26 05:22:15 2002
***************
*** 19,25 ****
  # write to the Free Software Foundation, Inc., 59 Temple Place 
  # - Suite 330, Boston, MA 02111-1307, USA.
  #
! # $Id: geasInstance.py,v 1.3 2002/05/22 15:25:10 siesel Exp $
  
  # 
=============================================================================
  # Instance class
--- 19,25 ----
  # write to the Free Software Foundation, Inc., 59 Temple Place 
  # - Suite 330, Boston, MA 02111-1307, USA.
  #
! # $Id: geasInstance.py,v 1.4 2002/05/26 09:22:15 siesel Exp $
  
  # 
=============================================================================
  # Instance class
***************
*** 60,62 ****
--- 60,70 ----
  
    def call (self, methodname):
      pass
+ 
+ 
+   # 
---------------------------------------------------------------------------
+   #  Delete this instance 
+   # 
---------------------------------------------------------------------------
+ 
+   def delete(self):
+     self._record.delete()
Index: gnue/appserver/src/geasList.py
diff -c gnue/appserver/src/geasList.py:1.3 gnue/appserver/src/geasList.py:1.4
*** gnue/appserver/src/geasList.py:1.3  Sun May 19 18:34:59 2002
--- gnue/appserver/src/geasList.py      Sun May 26 05:22:15 2002
***************
*** 19,25 ****
  # write to the Free Software Foundation, Inc., 59 Temple Place 
  # - Suite 330, Boston, MA 02111-1307, USA.
  #
! # $Id: geasList.py,v 1.3 2002/05/19 22:34:59 siesel Exp $
  
  from gnue.common import GDataSource
  import geasInstance
--- 19,25 ----
  # write to the Free Software Foundation, Inc., 59 Temple Place 
  # - Suite 330, Boston, MA 02111-1307, USA.
  #
! # $Id: geasList.py,v 1.4 2002/05/26 09:22:15 siesel Exp $
  
  from gnue.common import GDataSource
  import geasInstance
***************
*** 39,45 ****
      self._classname = classname
      self._prefetch = []
      self._conditions = []
-     self._sort = []
  
    # 
---------------------------------------------------------------------------
    # Actually these 3 only set variables
--- 39,44 ----
***************
*** 68,78 ****
--- 67,84 ----
  
      # bug fix should be moved into common after the freeze
      self._datasource._datasourceDictionary={}
+ 
+     # set the field to sort (has to be called before phase init
+     if hasattr(self,"_sort"):
+       self._datasource.order_by=self._sort
+     
      
      self._datasource.phaseInit ()
      # TODO: get the column names from the prefetch field names
      for field in self._prefetch:
        self._datasource.referenceField (field)
+       
+       
      self._resultset = self._datasource.createResultSet ()
  
    # 
---------------------------------------------------------------------------
***************
*** 94,96 ****
--- 100,112 ----
        return geasInstance.geasInstance (self._classname, 
self._resultset.current)
      else:
        return None
+ 
+ 
+   # 
---------------------------------------------------------------------------
+   # insert a new empty instance in the list and return it 
+   # 
---------------------------------------------------------------------------
+ 
+   def insertNewInstance (self):
+     self._resultset.insertRecord()
+     return geasInstance.geasInstance (self._classname, 
self._resultset.current)
+ 
Index: gnue/appserver/src/geasSession.py
diff -c gnue/appserver/src/geasSession.py:1.4 
gnue/appserver/src/geasSession.py:1.5
*** gnue/appserver/src/geasSession.py:1.4       Wed May 22 11:25:10 2002
--- gnue/appserver/src/geasSession.py   Sun May 26 05:22:15 2002
***************
*** 19,25 ****
  # write to the Free Software Foundation, Inc., 59 Temple Place 
  # - Suite 330, Boston, MA 02111-1307, USA.
  #
! # $Id: geasSession.py,v 1.4 2002/05/22 15:25:10 siesel Exp $
  
  import geasList
  
--- 19,25 ----
  # write to the Free Software Foundation, Inc., 59 Temple Place 
  # - Suite 330, Boston, MA 02111-1307, USA.
  #
! # $Id: geasSession.py,v 1.5 2002/05/26 09:22:15 siesel Exp $
  
  import geasList
  
***************
*** 55,58 ****
  
    def rollback (self):  
      for l in self._activelists:
!       l._datasource.abort()    
--- 55,58 ----
  
    def rollback (self):  
      for l in self._activelists:
!       l._datasource.rollback()    
Index: gnue/common/src/dbdrivers/appserver/DBdriver.py
diff -c gnue/common/src/dbdrivers/appserver/DBdriver.py:1.1 
gnue/common/src/dbdrivers/appserver/DBdriver.py:1.2
*** gnue/common/src/dbdrivers/appserver/DBdriver.py:1.1 Sun May 19 18:34:59 2002
--- gnue/common/src/dbdrivers/appserver/DBdriver.py     Sun May 26 05:22:14 2002
***************
*** 35,51 ****
  import md5
  import sys
  
! class GEASv2_RecordSet(GDataObjects.RecordSet): 
!   def _postChanges(self): 
!     values = []
!     fields = []
!     fieldString = ""
!     for field in (self._modifiedFields.keys()): 
!       fields.append(field + " = %s")
!       values.append(self._fields[field])
      
-     # statement = 'UPDATE %s SET %s WHERE %s = %s'
- 
  # GEASv2_ResultSet
  #
  # Notes:
--- 35,60 ----
  import md5
  import sys
  
! class GEASv2_RecordSet(GDataObjects.RecordSet):
!   def setAssoziatedInstance(self,instance):
!     self._instance=instance
!     
!   def _postChanges(self):
!     if self._deleteFlag:
!       GDebug.printMesg(5, 'GEASv2: Instance deleted')
!       self._instance.delete()
! 
!     if self._insertFlag:      
!       GDebug.printMesg(5, 'GEASv2: new Instance created and inserted')
!       self._instance=self._parent._cursor.insertNewInstance()
!       
!     for field in (self._modifiedFlags.keys()):      
!       self._instance.put(field,self._fields[field])
!       
!     self._updateFlag = 0
!     self._insertFlag = 0
!     self._deleteFlag = 0
      
  # GEASv2_ResultSet
  #
  # Notes:
***************
*** 60,77 ****
      self._recordSetClass = GEASv2_RecordSet
      
      # Populate field names
!     self._fieldNames = self._dataObject.getFields(self._dataObject.table)
! 
!     # load first record
!     if self._cursor==3:
!         Instance=self._cursor.firstInstance()
!         if (Instance!=None) and (Instance!=1):
!             dict = {}
!             for fieldName in self._fieldNames:
!                 dict[fieldName] = Instance.get(fieldName)
!             self._cachedRecords.append (self._recordSetClass(parent=self, \
!                                                          initialData=dict))
!     
  
      GDebug.printMesg(5, 'ResultSet created')
  
--- 69,75 ----
      self._recordSetClass = GEASv2_RecordSet
      
      # Populate field names
!     self._fieldNames = self._dataObject.getFields(self._dataObject.table)    
  
      GDebug.printMesg(5, 'ResultSet created')
  
***************
*** 80,102 ****
      if self._cursor:
     
        # Populate the result set
!       # for recordSet in resultSet.objects:
!       # load all records into the cache
        
        Instance=self._cursor.nextInstance()
        dict = {}
          
!       # xmlrpc GNURPC driver changes None to 1
        while (Instance!=None) and (Instance!=1):
          dict = {}
          for fieldName in self._fieldNames:
              dict[fieldName] = Instance.get(fieldName)
!         self._cachedRecords.append (self._recordSetClass(parent=self, \
!                                                          initialData=dict))
          Instance=self._cursor.nextInstance()
        if dict != {}:
!         return 1
      return 0
  
  class GEASv2_DataObject(GDataObjects.DataObject):
    # ConditionalName (min args, max args, field creation, bypass function )
--- 78,157 ----
      if self._cursor:
     
        # Populate the result set
!     
!       # load all instances into the cache
        
        Instance=self._cursor.nextInstance()
        dict = {}
          
!       # xmlrpc GNURPC driver changes None into 1
!       # so we have to check for None or 1
        while (Instance!=None) and (Instance!=1):
          dict = {}
          for fieldName in self._fieldNames:
              dict[fieldName] = Instance.get(fieldName)
!             
!         record=self._recordSetClass(parent=self,initialData=dict)
!         record.setAssoziatedInstance(Instance)
!         self._cachedRecords.append (record)
! 
!         # increase record count by one
!         # (should be replaced by a geasList.getQueryCount() later)
!         self._recordCount=self._recordCount+1
! 
!         # try to load next instance
          Instance=self._cursor.nextInstance()
+ 
+       # check if an record has added to the cache
        if dict != {}:
!         return 1 
! 
!     # if no record returned return a zero
      return 0
+     
+   # Post changes to the database
+   # similar function like in GDataObjects, just with an missing line
+   def post(self, foreign_keys={}):
+     # post our changes
+ 
+     recordPosition = 0
+     while recordPosition < len(self._cachedRecords):
+       record = self._cachedRecords[recordPosition]
+ 
+       delete = record._emptyFlag or record._deleteFlag
+       if not delete:
+         # Flip the flag for 'default' values to true so that hidden
+         # default fields are included in insert statements
+         if record.isPending():
+           for field in self._dataObject._defaultValues.keys():
+             record._modifiedFlags[field] = 1
+ 
+         for field in foreign_keys.keys():
+           record._fields[field] = foreign_keys[field]
+           # Some DBs will throw an exception if you update a Primary Key
+           # (even if you are updating to the same value)
+           if record._insertFlag:
+             record._modifiedFlags[field] = 1
+ 
+         recordPosition += 1
+       else:
+         # Adjust the current record if a preceding record
+         # or the current record is deleted
+         if recordPosition <= self._currentRecord:
+           self._currentRecord -= 1
+         self._cachedRecords.pop(recordPosition)
+         self._recordCount -= 1
+ 
+       record.post()
+ 
+     # Move to record 0 if all preceding records were deleted
+     # (or set to -1 if all records were deleted)
+     if self._currentRecord < 0:
+       if len(self._cachedRecords):
+         self._currentRecord = 0
+       else:
+         self._currentRecord = -1
+ 
  
  class GEASv2_DataObject(GDataObjects.DataObject):
    # ConditionalName (min args, max args, field creation, bypass function )
***************
*** 137,156 ****
      user = connectData['_username']
      passwd = connectData['_password']
  
!     print "Opening RPC connection ..."
!     params = { 'host': 'localhost',
!                'port': 8765,
!                'transport': 'http' }
      
!     self._server = GComm.attach('xmlrpc',params)
      
!     print "Setup an link to the session manager"
      sessionManager = self._server.request("SessionManager")
      
!     print "Get the status of the session manager"
!     print "Status: ",sessionManager.Status()
      
!     print "Creating session object ..."  
      self._session=sessionManager.getNewSession()
  
      try:
--- 192,210 ----
      user = connectData['_username']
      passwd = connectData['_password']
  
!     params = { 'host': connectData['host'],
!                'port': connectData['port'],
!                'transport': connectData['transport']}
      
!     self._server = GComm.attach( connectData['rpctype'],params)
      
!     GDebug.printMesg(3,"Setup an link to the session manager")
      sessionManager = self._server.request("SessionManager")
      
!     GDebug.printMesg(3,"Get the status of the session manager")
!     GDebug.printMesg(3,"Status: "+sessionManager.Status())
      
!     GDebug.printMesg(3,"Creating session object ...")  
      self._session=sessionManager.getNewSession()
  
      try:
***************
*** 269,275 ****
    def _createResultSet(self, conditions={}, readOnly=0, masterRecordSet=None):
      print _("Conditions"), conditions # self._buildQuery(conditions)
      try:
!         self._list = self._session.createList ("person")
      except:
          raise GDataObjects.ConnectionError, "Error during creation of object 
list"
      try:
--- 323,329 ----
    def _createResultSet(self, conditions={}, readOnly=0, masterRecordSet=None):
      print _("Conditions"), conditions # self._buildQuery(conditions)
      try:
!         self._list = self._session.createList (self.table)
      except:
          raise GDataObjects.ConnectionError, "Error during creation of object 
list"
      try:
***************
*** 278,289 ****
      except self._DatabaseError, err: 
        raise GDataObjects.ConnectionError, err
    
!     print "Setting up list object ..."
!     self._list.setPrefetch (["name", "street", "city","zip"])
!     #  self._list.setPrefetch (self._fieldlist)
!     self._list.setSort (["zip"])
  
!     print "Populating list ..."
      self._list.populate ()
      
      rs = self._resultSetClass(self, cursor=self._list, masterRecordSet=None)
--- 332,351 ----
      except self._DatabaseError, err: 
        raise GDataObjects.ConnectionError, err
    
!     GDebug.printMesg (5,"Setting up list object ...");
!     
!     # the fieldnames seem to be stored in _fieldReferences
!     fieldlist=self._fieldReferences.keys()
!     self._list.setPrefetch (fieldlist);
!     
!     GDebug.printMesg (5,"Using "+str(fieldlist)+" as fieldlist");
! 
!     if hasattr(self,"order_by"):
!       GDebug.printMesg (5,"Sorting list by field '"+self.order_by+"'");      
!       self._list.setSort (self.order_by)
!     
  
!     GDebug.printMesg (5,"Populating list ...");
      self._list.populate ()
      
      rs = self._resultSetClass(self, cursor=self._list, masterRecordSet=None)



reply via email to

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