[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnue] r8661 - in trunk/gnue-forms/src: . GFObjects
From: |
reinhard |
Subject: |
[gnue] r8661 - in trunk/gnue-forms/src: . GFObjects |
Date: |
Mon, 11 Sep 2006 07:42:58 -0500 (CDT) |
Author: reinhard
Date: 2006-09-11 07:42:57 -0500 (Mon, 11 Sep 2006)
New Revision: 8661
Modified:
trunk/gnue-forms/src/GFForm.py
trunk/gnue-forms/src/GFInstance.py
trunk/gnue-forms/src/GFObjects/GFBlock.py
Log:
Restructuring query methods.
Modified: trunk/gnue-forms/src/GFForm.py
===================================================================
--- trunk/gnue-forms/src/GFForm.py 2006-09-06 11:38:57 UTC (rev 8660)
+++ trunk/gnue-forms/src/GFForm.py 2006-09-11 12:42:57 UTC (rev 8661)
@@ -158,6 +158,17 @@
'last_record': {'function': self.last_record},
'ask_record': {'function': self.ask_record},
+ # Record insertion and deletion
+ 'new_record': {'function': self.new_record},
+ 'delete_record': {'function': self.delete_record},
+ 'undelete_record': {'function': self.undelete_record},
+
+ # Queries
+ 'init_query': {'function': self.init_query},
+ 'copy_query': {'function': self.copy_query},
+ 'cancel_query': {'function': self.cancel_query},
+ 'execute_query': {'function': self.execute_query},
+
'commit': {
'function': self.__trigger_commit,
'global': True},
@@ -166,8 +177,6 @@
'global': True},
'printout': {
'function': self.__trigger_printout},
- 'initQuery': {
- 'function': self.__trigger_init_query},
'activateDialog': {
'function': self.__trigger_activate_dialog,
'global': True},
@@ -484,14 +493,6 @@
# -------------------------------------------------------------------------
- def __trigger_init_query(self):
- """
- Set form into query mode.
- """
- self.initQuery()
-
- # -------------------------------------------------------------------------
-
def __trigger_activate_dialog (self, dialogName, parameters={}, modal=0):
"""
Launches a standard or a custom dialog.
@@ -1117,150 +1118,164 @@
# -------------------------------------------------------------------------
- # Check all blocks in the form whether they are saved (committed) or not.
+ # Queries
# -------------------------------------------------------------------------
- def isSaved(self):
+ def init_query(self):
"""
- Checks all block in the form whether they are saved (committed) or not.
- @return: boolean, True if all the blocks are committed.
+ Enters the form into Query mode.
"""
- # Is the current entry changed?
- if (self._currentEntry is not None and \
- self._currentEntry._type != 'GFButton' and \
- self._currentEntry._field._bound and \
- self._currentEntry._displayHandler.isPending()):
- return False
+ if not self.endEditing():
+ return
- # Are there any not yet posted changes in any of the blocks?
+ if self._currentBlock is not None:
+ if self._currentBlock.autoCommit:
+ self.commit()
+
+ if not self.__must_save():
+ # Notify the UI to not show the query button pressed in
+ self.dispatchEvent('endENTERQUERY', _form=self)
+ self.beginEditing()
+ return
+
+ self.dispatchEvent('beginENTERQUERY', _form=self)
+
for block in self._logic._blockList:
- if block.get_record_status() in ('inserted', 'modified', 'deleted'):
- return False
+ block.init_query()
- # Does a connection have any pending (already posted but not yet
- # committed) changes?
- for connection in (self.__get_connections ()).values ():
- if connection.isPending ():
- return False
+ self.status_message(u_('Enter your query criteria.'))
- return True
+ self.refreshDisplay(self)
+ self.dispatchEvent('gotoENTRY', object=self._currentEntry, _form=self)
+ self.beginEditing()
+ self.update_status()
-
# -------------------------------------------------------------------------
- # Enter the form into Query mode
- # -------------------------------------------------------------------------
- def initQuery(self):
+ def copy_query(self):
"""
- Enters the form into Query mode.
+ Copies the Query, ie brings back conditions from the last query.
"""
- if self._currentBlock is None:
+
+ if not self.endEditing():
return
- if self._currentBlock.mode != 'query':
+ if self._currentBlock is not None:
+ if self._currentBlock.autoCommit:
+ self.commit()
- # Auto-commit?
- if self._currentBlock.autoCommit:
- self.commit()
+ if not self.__must_save():
+ # Notify the UI to not show the query button pressed in
+ self.dispatchEvent('endENTERQUERY', _form=self)
+ self.beginEditing()
+ return
- if not self.__must_save():
- return
-
- for block in self._logic._blockList:
- block.processRollback()
- for entry in block._entryList:
- if hasattr(entry, 'queryDefault'):
- assert gDebug (5, "%s will be set to %s" % (entry.name,
entry.queryDefault))
- entry.setValue(entry.queryDefault)
-
self.dispatchEvent('beginENTERQUERY', _form=self)
for block in self._logic._blockList:
- block.initQuery()
+ block.copy_query()
self.status_message(u_('Enter your query criteria.'))
+ self.refreshDisplay(self)
+ self.dispatchEvent('gotoENTRY', object=self._currentEntry, _form=self)
+ self.beginEditing()
+ self.update_status()
# -------------------------------------------------------------------------
- # Cancel Query mode
- # -------------------------------------------------------------------------
- def cancelQuery(self):
+ def cancel_query(self):
"""
Cancels Query mode.
- @return: None
"""
+
+ self.endEditing ()
+
self.dispatchEvent('endENTERQUERY', _form=self)
- #self._instance.dispatchEvent('endENTERQUERY', _form=self)
- message = None #TODO: not used here and in return line /kilo/
+
for block in self._logic._blockList:
- block.cancelQuery()
+ block.cancel_query()
self.status_message(u_('Query canceled.'))
- return message
+ self.refreshDisplay(self)
+ self.dispatchEvent('gotoENTRY', object=self._currentEntry, _form=self)
+ self.beginEditing()
+ self.update_status()
# -------------------------------------------------------------------------
- # Copy Query, ie bring back conditions from the last query
- # -------------------------------------------------------------------------
- def copyQuery(self):
+ def execute_query(self):
"""
- Copies the Query, ie brings back conditions from the last query.
- @return: None
+ Runs the query.
"""
if self._currentBlock is None:
return
- if self._currentBlock.mode != 'query':
- self.initQuery()
+ if not self.endEditing():
+ return
+ # Do a rollback on all connections so the query starts a new
+ # transaction.
+ self.__rollback_all_connections()
+
self.dispatchEvent('endENTERQUERY', _form=self);
- #self._instance.dispatchEvent('endENTERQUERY', _form=self);
- message = None #TODO: not used here and in return line /kilo/
- for block in self._logic._blockList:
- block.copyQuery()
- return message
+ try:
+ try:
+ self._currentBlock.execute_query()
+ except DBError:
+ self.__rollback_all_connections()
+ # TODO: self.__clear_all_blocks()
+ raise
+ finally:
+ self.refreshDisplay (self._currentBlock)
+ if self._currentBlock.is_empty ():
+ self.status_message (u_('Query returned no results.'))
+ else:
+ self.status_message (u_('Query successful.'))
+
+ self.dispatchEvent('gotoENTRY', object=self._currentEntry,
+ _form=self)
+ self.beginEditing()
+ self.update_record_counter()
+ self.update_record_status()
+
+
# -------------------------------------------------------------------------
- # Run the query
+ # Check all blocks in the form whether they are saved (committed) or not.
# -------------------------------------------------------------------------
- def executeQuery (self):
+ def isSaved(self):
"""
- Runs the query.
- @return: None if all went well, error message if there was an error
+ Checks all block in the form whether they are saved (committed) or not.
+ @return: boolean, True if all the blocks are committed.
"""
- if self._currentBlock is None:
- return
- if self._currentBlock.mode != 'query':
- return _("Form not in query mode")
+ # Is the current entry changed?
+ if (self._currentEntry is not None and \
+ self._currentEntry._type != 'GFButton' and \
+ self._currentEntry._field._bound and \
+ self._currentEntry._displayHandler.isPending()):
+ return False
- message = None
- self.dispatchEvent ('endENTERQUERY', _form = self);
+ # Are there any not yet posted changes in any of the blocks?
+ for block in self._logic._blockList:
+ if block.is_pending():
+ return False
- try:
- self._currentBlock.processQuery ()
+ # Does a connection have any pending (already posted but not yet
+ # committed) changes?
+ for connection in (self.__get_connections ()).values ():
+ if connection.isPending ():
+ return False
- except DBError:
- self.rollback (1)
- message = u_("Database query error:\n%(exType)s\n%(exMessage)s") \
- % {'exType' : sys.exc_info ()[0],
- 'exMessage': sys.exc_info ()[1]}
+ return True
- self.refreshDisplay (self._currentBlock)
- if self._currentBlock.is_empty ():
- self.status_message (u_('Query returned no results.'))
- else:
- self.status_message (u_('Query successful.'))
- return message
-
-
# -------------------------------------------------------------------------
# Commit all pending changes
# -------------------------------------------------------------------------
@@ -1359,8 +1374,7 @@
# Call rollback only once per connection (if multiple blocks are
# sharing the same connection)
- for connection in self.__get_connections().values():
- connection.rollback()
+ self.__rollback_all_connections()
for block in self._logic._blockList:
block.processRollback(recover, backendRollback=False)
@@ -1376,6 +1390,13 @@
# -------------------------------------------------------------------------
+
+ def __rollback_all_connections(self):
+
+ for connection in self.__get_connections().values():
+ connection.rollback()
+
+ # -------------------------------------------------------------------------
# Print form
# -------------------------------------------------------------------------
Modified: trunk/gnue-forms/src/GFInstance.py
===================================================================
--- trunk/gnue-forms/src/GFInstance.py 2006-09-06 11:38:57 UTC (rev 8660)
+++ trunk/gnue-forms/src/GFInstance.py 2006-09-11 12:42:57 UTC (rev 8661)
@@ -113,10 +113,10 @@
'requestUNDELETE' : self.__execute_undeleteRecord,
# Queries
- 'requestENTERQUERY' : self.requestQuery,
- 'requestCOPYQUERY' : self.copyQuery,
- 'requestCANCELQUERY' : self.cancelQuery,
- 'requestEXECQUERY' : self.executeQuery,
+ 'requestENTERQUERY' : self.__execute_enterQuery,
+ 'requestCOPYQUERY' : self.__execute_copyQuery,
+ 'requestCANCELQUERY' : self.__execute_cancelQuery,
+ 'requestEXECQUERY' : self.__execute_execQuery,
# Transactions
'requestCOMMIT' : self.executeCommit,
@@ -674,6 +674,33 @@
# ---------------------------------------------------------------------------
+ # Queries
+ # ---------------------------------------------------------------------------
+
+ def __execute_enterQuery(self, event):
+
+ event._form.init_query()
+
+ # ---------------------------------------------------------------------------
+
+ def __execute_copyQuery(self, event):
+
+ event._form.copy_query()
+
+ # ---------------------------------------------------------------------------
+
+ def __execute_cancelQuery(self, event):
+
+ event._form.cancel_query()
+
+ # ---------------------------------------------------------------------------
+
+ def __execute_execQuery(self, event):
+
+ event._form.execute_query()
+
+
+ # ---------------------------------------------------------------------------
# Verify state of data and exit form
# ---------------------------------------------------------------------------
@@ -774,85 +801,6 @@
# ---------------------------------------------------------------------------
- # Initialize a query
- # ---------------------------------------------------------------------------
-
- def requestQuery (self, event):
-
- if not event._form.endEditing ():
- return
-
- message = event._form.initQuery ()
- if message:
- self.displayMessageBox (message, 'Error')
- return
-
- event._form.refreshDisplay (event._form)
- self.dispatchEvent ('gotoENTRY', object = event._form._currentEntry,
- _form = event._form)
- event._form.beginEditing()
- event._form.update_status()
-
-
- # ---------------------------------------------------------------------------
- # Cancel current query
- # ---------------------------------------------------------------------------
-
- def cancelQuery (self, event):
-
- if not event._form.endEditing ():
- return
-
- message = event._form.cancelQuery ()
- if message:
- self.displayMessageBox (message, 'Error')
- return
-
- event._form.refreshDisplay (event._form)
- self.dispatchEvent ('gotoENTRY', object = event._form._currentEntry,
- _form = event._form)
- event._form.beginEditing()
- event._form.update_status()
-
-
- # ---------------------------------------------------------------------------
- # Copy the current query
- # ---------------------------------------------------------------------------
-
- def copyQuery (self, event):
- if not event._form.endEditing ():
- return
-
- message = event._form.copyQuery ()
- if message:
- self.displayMessageBox (message, 'Error')
- return
-
- event._form.refreshDisplay (event._form)
- self.dispatchEvent ('gotoENTRY', object = event._form._currentEntry,
- _form = event._form)
- event._form.beginEditing()
- event._form.update_status()
-
-
- # ---------------------------------------------------------------------------
- # Execute the current query
- # ---------------------------------------------------------------------------
-
- def executeQuery (self, event):
-
- if not event._form.endEditing ():
- return
-
- message = event._form.executeQuery ()
- if message:
- self.displayMessageBox (message, 'Error')
-
- event._form.refreshDisplay (event._form._currentBlock)
- self._entryUpdated (event._form)
-
-
- # ---------------------------------------------------------------------------
# Perform a commit
# ---------------------------------------------------------------------------
Modified: trunk/gnue-forms/src/GFObjects/GFBlock.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFBlock.py 2006-09-06 11:38:57 UTC (rev
8660)
+++ trunk/gnue-forms/src/GFObjects/GFBlock.py 2006-09-11 12:42:57 UTC (rev
8661)
@@ -117,8 +117,8 @@
self._triggerFunctions = {
# Record status
'get_record_status': {'function': self.get_record_status},
+ 'isPending': {'function': self.is_pending},
'isSaved': {'function': self.is_saved}, # deprecated?
- 'isPending': {'function': self.is_pending}, # deprecated?
'isEmpty': {'function': self.is_empty}, # deprecated?
# Record navigation
@@ -135,12 +135,6 @@
'deleteRecord': {'function': self.delete_record},
'undeleteRecord': {'function': self.undelete_record},
- # Queries
- 'initQuery': {'function': self.initQuery},
- 'copyQuery': {'function': self.copyQuery},
- 'cancelQuery': {'function': self.cancelQuery},
- 'executeQuery': {'function': self.processQuery},
-
# Transactions
'commit': {'function': self.commit},
'rollback': {'function': self.processRollback},
@@ -851,102 +845,35 @@
# ---------------------------------------------------------------------------
- # Shared code called whenever focus enters or leaves a record
+ # Queries
# ---------------------------------------------------------------------------
- def __focus_in(self):
+ def init_query(self):
- if self._form.get_focus_block() is self:
- self.processTrigger('PRE-FOCUSIN')
+ self.mode = 'query'
+ self._queryValues = {}
+ self._queryValues.update(self._queryDefaults)
+ self.__switch_record(0)
- self._form.update_record_counter()
- self._form.update_record_status()
-
- self.processTrigger('POST-FOCUSIN')
-
# ---------------------------------------------------------------------------
- def __focus_out(self, do_auto_commit=True):
+ def copy_query(self):
- if self._form.get_focus_block() is self:
- self.processTrigger('PRE-FOCUSOUT')
+ self._queryValues = {}
+ self._queryValues.update(self._lastQueryValues)
+ self.__switch_record(0)
- if do_auto_commit and self.autoCommit and self._resultSet.current:
- self._form.commit()
-
- self.processTrigger('POST-FOCUSOUT')
-
# ---------------------------------------------------------------------------
- # Function and Update
- # ---------------------------------------------------------------------------
- def callFunction (self, name, parameters):
+ def cancel_query(self):
- try:
- # Remember the current record; the record pointer is not reliable between
- # postAll and requeryAll!
- current = self._resultSet.current
- self._dataSourceLink.postAll ()
+ self.mode = 'normal'
+ self.__switch_record(0)
- try:
- res = current.call (name, parameters)
- finally:
- self._dataSourceLink.requeryAll (False)
-
- finally:
- self.__switch_record (0)
-
- return res
-
# ---------------------------------------------------------------------------
- def updateCurrentRecordSet (self):
+ def execute_query(self):
- try:
- self._dataSourceLink.postAll ()
- self._dataSourceLink.requeryAll (False)
-
- finally:
- self.__switch_record (0)
-
-
- # ---------------------------------------------------------------------------
- # Query
- # ---------------------------------------------------------------------------
-
- def initQuery (self):
-
- # If Enter-Query is hit once, enter query mode
- # If Enter-Query is hit twice, bring back conditions from last query.
- # If Enter-Query is hit thrice, cancel the query and go into normal mode.
-
- if self.mode != 'query':
- self.mode = 'query'
- self._query2 = int (gConfigForms ("RememberLastQuery"))
- self._queryValues = {}
- self._queryValues.update (self._queryDefaults)
- self.__switch_record (0)
-
- # ---------------------------------------------------------------------------
-
- def copyQuery (self):
-
- self._query2 = 0
- self._queryValues = {}
- self._queryValues.update (self._lastQueryValues)
- self.__switch_record (0)
-
- # ---------------------------------------------------------------------------
-
- def cancelQuery (self):
-
- self.mode = 'normal'
- self.__switch_record (0)
-
- # ---------------------------------------------------------------------------
-
- def processQuery (self):
-
# Set the maxList to a single master block as a placeholder.
maxList = [self._getTopMasterBlock ()]
@@ -1012,6 +939,66 @@
# ---------------------------------------------------------------------------
+ # Shared code called whenever focus enters or leaves a record
+ # ---------------------------------------------------------------------------
+
+ def __focus_in(self):
+
+ if self._form.get_focus_block() is self:
+ self.processTrigger('PRE-FOCUSIN')
+
+ self._form.update_record_counter()
+ self._form.update_record_status()
+
+ self.processTrigger('POST-FOCUSIN')
+
+ # ---------------------------------------------------------------------------
+
+ def __focus_out(self, do_auto_commit=True):
+
+ if self._form.get_focus_block() is self:
+ self.processTrigger('PRE-FOCUSOUT')
+
+ if do_auto_commit and self.autoCommit and self._resultSet.current:
+ self._form.commit()
+
+ self.processTrigger('POST-FOCUSOUT')
+
+ # ---------------------------------------------------------------------------
+ # Function and Update
+ # ---------------------------------------------------------------------------
+
+ def callFunction (self, name, parameters):
+
+ try:
+ # Remember the current record; the record pointer is not reliable between
+ # postAll and requeryAll!
+ current = self._resultSet.current
+ self._dataSourceLink.postAll ()
+
+ try:
+ res = current.call (name, parameters)
+ finally:
+ self._dataSourceLink.requeryAll (False)
+
+ finally:
+ self.__switch_record (0)
+
+ return res
+
+ # ---------------------------------------------------------------------------
+
+ def updateCurrentRecordSet (self):
+
+ try:
+ self._dataSourceLink.postAll ()
+ self._dataSourceLink.requeryAll (False)
+
+ finally:
+ self.__switch_record (0)
+
+
+ # ---------------------------------------------------------------------------
# Commit and Rollback
# ---------------------------------------------------------------------------
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnue] r8661 - in trunk/gnue-forms/src: . GFObjects,
reinhard <=