commit-gnue
[Top][All Lists]
Advanced

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

gnue/gnuef/src GFForm.py GFObjects.py UIwxpytho...


From: James Thompson
Subject: gnue/gnuef/src GFForm.py GFObjects.py UIwxpytho...
Date: Mon, 29 Jan 2001 19:31:00 -0800

CVSROOT:        /cvs
Module name:    gnue
Changes by:     James Thompson <address@hidden> 01/01/29 19:31:00

Modified files:
        gnuef/src      : GFForm.py GFObjects.py UIwxpython.py 
        gnuef/src/drivers/postgresql: DBdriver.py 
Added files:
        gnuef/src      : GFError.py 

Log message:
        Started adding support for DBError exceptions
        Enhanced login support
        Transactions now supported on commit

CVSWeb URLs:
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/GFError.py.diff?r1=NONE&r2=1.1
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/GFForm.py.diff?r1=1.64&r2=1.65
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/GFObjects.py.diff?r1=1.56&r2=1.57
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/UIwxpython.py.diff?r1=1.55&r2=1.56
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/drivers/postgresql/DBdriver.py.diff?r1=1.11&r2=1.12

Patches:
Index: gnue/gnuef/src/GFForm.py
diff -u gnue/gnuef/src/GFForm.py:1.64 gnue/gnuef/src/GFForm.py:1.65
--- gnue/gnuef/src/GFForm.py:1.64       Mon Jan 29 14:50:34 2001
+++ gnue/gnuef/src/GFForm.py    Mon Jan 29 19:31:00 2001
@@ -20,6 +20,7 @@
 from GFEvent import *
 from GFParser import *
 import GFDebug
+from GFError import DBError
 
 class GFForm(GFObj, GFEventAware):
   def __init__(self, parent=None):
@@ -164,20 +165,28 @@
       
     if object.getObjectType() =='GFDatabase':
       self.databaseDictionary[object.name]=object
-
-      #Login
-      authcode = ["", "", object]
-      self.dispatchEvent( GFEvent('getLogin', authcode) )
-      user = authcode[0]
-      passwd = authcode[1]
-      
-      try:
-        object.initialize(user,passwd)
-      except:
-        if sys.platform != 'win32':
-          os.system("stty sane")
-        print "Unexpected error:", sys.exc_info()[0], sys.exc_info()[1]
-        sys.exit()
+      while 1:
+        try:
+          #Login
+          authcode = ["", "", object]
+          self.dispatchEvent( GFEvent('getLogin', authcode) )
+          user = authcode[0]
+          passwd = authcode[1]
+
+          object.initialize(user,passwd)
+          
+        except DBError:
+          message = GFMsgBox(self,"Database initialization error:\n%s\n%s " % 
(sys.exc_info()[0], sys.exc_info()[1]))
+          message.show()
+                                  
+
+        except:
+          if sys.platform != 'win32':
+            os.system("stty sane")
+          print "Unexpected error:", sys.exc_info()[0], sys.exc_info()[1]
+          sys.exit()
+        else:
+          break
         
   def initTriggers(self, object):
     if object.getObjectType() == "GFTrigger":
@@ -328,21 +337,27 @@
     self.updateStatus()
 
   def executeCommit(self, event):
-    for key in self.datasourceDictionary.keys():
-      self.datasourceDictionary[key].beginTransaction()
-
-    if not hasattr(self,'readonly'):
-      for block in self.blockList:
-        GFDebug.printMesg(1, "Saving %s"%block.name)
-        block.processCommit()
-      self.updateRecordStatus()
-      self.updateRecordCounter()
-    else:
-      self.dispatchEvent(GFEvent('formALERT','Form is readonly'))
+    for key in self.databaseDictionary.keys():
+      self.databaseDictionary[key].beginTransaction()
 
-    for key in self.datasourceDictionary.keys():
-      self.datasourceDictionary[key].commit()
-      
+    try:
+      if not hasattr(self,'readonly'):
+        for block in self.blockList:
+          GFDebug.printMesg(1, "Saving %s"%block.name)
+          block.processCommit()
+        self.updateRecordStatus()
+        self.updateRecordCounter()
+      else:
+        self.dispatchEvent(GFEvent('formALERT','Form is readonly'))
+
+      for key in self.databaseDictionary.keys():
+        self.databaseDictionary[key].commit()
+
+    except DBError:
+      for key in self.databaseDictionary.keys():
+        self.databaseDictionary[key].rollback()
+      message = GFMsgBox(self,"Database commit error:\n%s\n%s " % 
(sys.exc_info()[0], sys.exc_info()[1]))
+      message.show()
 
   def executeAbout(self,event):
      version = GFOptions.VERSION
Index: gnue/gnuef/src/GFObjects.py
diff -u gnue/gnuef/src/GFObjects.py:1.56 gnue/gnuef/src/GFObjects.py:1.57
--- gnue/gnuef/src/GFObjects.py:1.56    Mon Jan 29 14:50:34 2001
+++ gnue/gnuef/src/GFObjects.py Mon Jan 29 19:31:00 2001
@@ -209,7 +209,7 @@
         for count in range(self.recordCount+1):
           self.dataSourceLink.setField(count,self.detail,fieldValue, TRUE)
     
-    #self.dataSourceLink.commit()
+    self.dataSourceLink.commit()
 
     self.recordCount = self.dataSourceLink.getLastRecordNumber()
 
@@ -513,7 +513,7 @@
               self.resultSet[count][newkey] = result[newkey]
               print newkey, self.resultSet[count][newkey]
               
-      self.dataConnection.commit()
+      #self.dataConnection.commit()
 
       # Clean up record list
       count = 0
@@ -604,6 +604,12 @@
     results = self.link.query(table,mask,order_by)
     return results
 
+  def beginTransaction(self):
+    self.link.beginTransaction()
+    
+  def rollback(self):
+    self.link.rollback()
+    
   def commit(self):
     self.link.commit()
 
Index: gnue/gnuef/src/UIwxpython.py
diff -u gnue/gnuef/src/UIwxpython.py:1.55 gnue/gnuef/src/UIwxpython.py:1.56
--- gnue/gnuef/src/UIwxpython.py:1.55   Mon Jan 29 14:50:34 2001
+++ gnue/gnuef/src/UIwxpython.py        Mon Jan 29 19:31:00 2001
@@ -598,7 +598,6 @@
     self.frame.Close()
 
   def exitApplication(self,event):
-    print "Wassup"
     self.frame.Close(true)
 
 
@@ -656,17 +655,18 @@
 
     
   #
-  # Login support (not activated in this code)
+  # Login support
   #
   def getLogin(self, event):
     self.logindata = event.data
-    self.dlg = wxDialog(NULL, -1, "Login Required for %s" % 
str(event.data[2].dbname),wxPoint(-1,-1),wxSize(150,200))
+    self.dlg = wxDialog(NULL, -1, "Login Required for %s" % 
str(event.data[2].dbname),wxPoint(-1,-1),wxSize(250,150))
     self.dlg.SetBackgroundColour(wxWHITE)
     self.dlg.SetAutoLayout(true)
     
     bmp = wxImage(GFOptions.smallBMP, wxBITMAP_TYPE_BMP).ConvertToBitmap()
+    dlgWidth, dlgHeight = self.dlg.GetSizeTuple()
     
-    wxStaticBitmap(self.dlg,-1, bmp, wxPoint(5, 10),wxSize(bmp.GetWidth(), 
bmp.GetHeight()))
+    wxStaticBitmap(self.dlg,-1, bmp, wxPoint((dlgWidth-bmp.GetWidth())/2, 
10),wxSize(bmp.GetWidth(), bmp.GetHeight()))
     wxStaticText(self.dlg, 1010, "Username",wxPoint(5, 25+ bmp.GetHeight()), 
wxSize(75, 20))
     self.usernameEntry = wxTextCtrl(self.dlg, 1020,"",wxPoint(80, 25+ 
bmp.GetHeight()), wxSize(150, 20))
     wxStaticText(self.dlg, 1010, "Password",wxPoint(5, 50+ bmp.GetHeight()), 
wxSize(75, 20))
@@ -703,7 +703,11 @@
 
 
   def msgBox(self, event):
-    parent = wxPyTypeCast( self.frame, 'wxWindow' )
+    if hasattr(self,'frame'):
+      parent = wxPyTypeCast( self.frame, 'wxWindow' )
+    else:
+      parent = NULL
+      
     message = event.data.message
     caption = event.data.caption
     dialog = wxMessageDialog(parent, message, caption, 
style=wxOK|wxICON_EXCLAMATION )
Index: gnue/gnuef/src/drivers/postgresql/DBdriver.py
diff -u gnue/gnuef/src/drivers/postgresql/DBdriver.py:1.11 
gnue/gnuef/src/drivers/postgresql/DBdriver.py:1.12
--- gnue/gnuef/src/drivers/postgresql/DBdriver.py:1.11  Mon Jan 29 14:50:34 2001
+++ gnue/gnuef/src/drivers/postgresql/DBdriver.py       Mon Jan 29 19:31:00 2001
@@ -16,10 +16,11 @@
 import string
 import sys
 from gnue.forms import GFOptions
+from gnue.forms.GFError import DBError
 
 class DBdriver:
   def __init__(self):
-    print "Postgresql database driver initializing"
+  
     if GFOptions.DEBUG:
       print "Postgresql database driver initializing"
     self.connection = None
@@ -28,36 +29,64 @@
   def connect(self, host, dbname, user, passwd):
     if GFOptions.DEBUG:
       print "connecting"
-    self.connection = pg.DB(dbname, host, -1, None, None, user, passwd)
+    try:
+      self.connection = pg.DB(dbname, host, -1, None, None, user, passwd)
+    except pg.error, value:
+      raise DBError, value
+
+    
 
   def disconnect(self):
-    self.connection.close()
+    try:
+      self.connection.close()
+    except pg.error, value:
+      raise DBError, value
 
   def beginTransaction(self):
-    self.connection.query('BEGIN')
+    try:
+      self.connection.query('BEGIN')
+    except pg.error, value:
+      raise DBError, value
 
   def commit(self):
-    self.connection.query('COMMIT')
-    
+    try:
+      self.connection.query('END')
+    except pg.error, value:
+      raise DBError, value
+
   def rollback(self):
-    self.connection.query('ROLLBACK')
+    try:
+      self.connection.query('ROLLBACK')
+    except pg.error, value:
+      raise DBError, value
 
   def insert(self,table,mask):
     for fieldname in mask.keys():
       if mask[fieldname] == None or len(mask[fieldname]) == 0:
         del mask[fieldname]
-        
-    self.connection.insert(table,mask)
+    try:
+      self.connection.insert(table,mask)
+    except pg.error, value:
+      raise DBError, value
     return mask
   
   def delete(self,table,mask):
-    self.connection.delete(table,mask)
+    try:
+      self.connection.delete(table,mask)
+    except pg.error, value:
+      raise DBError, value
 
   def update(self,table,mask):
-    mask = self.connection.update(table,mask)
+    try:
+      mask = self.connection.update(table,mask)
+    except pg.error, value:
+      raise DBError, value
 
   def getFieldList(self,table):
-    return self.connection.get_attnames(table)
+    try:
+      return self.connection.get_attnames(table)
+    except pg.error, value:
+      raise DBError, value
 
   #
   # The code below has been written to be compatible with
@@ -67,7 +96,11 @@
   #
   def query(self,table,mask,order_by=None):
     command = self.constructSQL('query',table, mask,order_by)
-    resultset = self.connection.query(command).dictresult()
+    try:
+      resultset = self.connection.query(command).dictresult()
+    except pg.error, value:
+      raise DBError, value
+
     return resultset
   
   def constructSQL(self, style, table, mask = None, order_by=None):
@@ -96,8 +129,6 @@
               
     else:
       print "constructSQL: unsupport SQL statement type"
-
-
 
     if GFOptions.DEBUG > 50:
       print sql



reply via email to

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