commit-gnue
[Top][All Lists]
Advanced

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

[gnue] r9972 - trunk/gnue-forms/src/GFObjects


From: reinhard
Subject: [gnue] r9972 - trunk/gnue-forms/src/GFObjects
Date: Thu, 15 Oct 2009 16:32:44 -0500 (CDT)

Author: reinhard
Date: 2009-10-15 16:32:44 -0500 (Thu, 15 Oct 2009)
New Revision: 9972

Modified:
   trunk/gnue-forms/src/GFObjects/GFBlock.py
   trunk/gnue-forms/src/GFObjects/GFEntry.py
Log:
Behave as reasonable as possible if there is no resultset behind the block.


Modified: trunk/gnue-forms/src/GFObjects/GFBlock.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFBlock.py   2009-10-15 13:12:49 UTC (rev 
9971)
+++ trunk/gnue-forms/src/GFObjects/GFBlock.py   2009-10-15 21:32:44 UTC (rev 
9972)
@@ -25,6 +25,7 @@
 Classes making up the Block object.
 """
 
+from gnue.common.apps import errors
 from gnue.common.datasources import GConditions
 from gnue.common.definitions import GParser
 from gnue.common import events
@@ -354,14 +355,15 @@
 
         self.__resultset = event.resultSet
 
-        recno = self.__resultset.getRecordNumber()
-        if recno == -1:
-            self.__scrolling_blocked = True
-            try:
-                if not self.__resultset.firstRecord():
-                    self.__resultset.insertRecord(self._lastValues)
-            finally:
-                self.__scrolling_blocked = False
+        if self.__resultset is not None:
+            recno = self.__resultset.getRecordNumber()
+            if recno == -1 and self.editable in ('Y', 'new'):
+                self.__scrolling_blocked = True
+                try:
+                    if not self.__resultset.firstRecord():
+                        self.__resultset.insertRecord(self._lastValues)
+                finally:
+                    self.__scrolling_blocked = False
 
         self.__current_record_changed(True)
 
@@ -682,6 +684,9 @@
         if self.mode == 'query':
             return
 
+        if self.__resultset is None:
+            return
+
         if self.__resultset.isFirstRecord():
             return
 
@@ -704,6 +709,9 @@
         if self.mode == 'query':
             return False
 
+        if self.__resultset is None:
+            return
+
         if self.__resultset.isFirstRecord():
             return False
 
@@ -731,6 +739,9 @@
         if self.mode == 'query':
             return False
 
+        if self.__resultset is None:
+            return
+
         if self.__resultset.isLastRecord():
             if self.autoCreate and self.get_record_status() != 'empty' and \
                     not self.editable in('update', 'N'):
@@ -756,6 +767,9 @@
         if self.mode == 'query':
             return
 
+        if self.__resultset is None:
+            return
+
         if self.__resultset.isLastRecord():
             return
 
@@ -778,6 +792,9 @@
         if self.mode == 'query':
             return
 
+        if self.__resultset is None:
+            return
+
         # If record_number is negative, move relative to last record
         if record_number < 0:
             record_number += self.__resultset.getRecordCount()
@@ -804,6 +821,9 @@
         @param count: the number of records to move from the current record.
         """
 
+        if self.__resultset is None:
+            return
+
         record_number = self.__resultset.getRecordNumber() + count
 
         record_number = max(record_number, 0)
@@ -826,6 +846,9 @@
         if self.mode == 'query':
             return False
 
+        if self.__resultset is None:
+            return
+
         # First, convert the fieldname/value pairs to column/value pairs.
         cond = {}
         for (fieldname, value) in params.iteritems():
@@ -892,7 +915,10 @@
         Return the number of records in this block.
         """
 
-        return self.__resultset.getRecordCount()
+        if self.__resultset is not None:
+            return self.__resultset.getRecordCount()
+        else:
+            return 0
 
     # -------------------------------------------------------------------------
 
@@ -988,6 +1014,9 @@
         Return True if the current record is the first one in the result set.
         """
 
+        if self.__resultset is None:
+            return True
+
         return self.__resultset.isFirstRecord()
 
     # -------------------------------------------------------------------------
@@ -997,6 +1026,9 @@
         Return True if the current record is the last one in the result set.
         """
 
+        if self.__resultset is None:
+            return True
+
         return self.__resultset.isLastRecord()
 
 
@@ -1058,6 +1090,8 @@
         elif self.mode == 'init':
             self.__initializing_record[field.field] = value
 
+        elif self.__resultset is None:
+            raise NoDataInBlockError(self)
         else:
             self.processTrigger('Pre-Change')
             field.processTrigger('Pre-Change')
@@ -1087,6 +1121,9 @@
         if self.mode == 'query':
             return
 
+        if self.__resultset is None:
+            raise NoDataInBlockError(self)
+
         self._focus_out()
 
         self.__resultset.insertRecord(self._lastValues)
@@ -1109,6 +1146,9 @@
         if self.mode == 'query':
             return
 
+        if self.__resultset is None:
+            raise NoDataInBlockError(self)
+
         self._focus_out()
 
         self.__resultset.duplicateRecord(exclude=exclude, include=include)
@@ -1126,6 +1166,9 @@
         if self.mode == 'query':
             return
 
+        if self.__resultset is None:
+            raise NoDataInBlockError(self)
+
         self.__resultset.current.delete()
 
         if self._form.get_focus_block() is self:
@@ -1141,6 +1184,9 @@
         if self.mode == 'query':
             return
 
+        if self.__resultset is None:
+            raise NoDataInBlockError(self)
+
         self.__resultset.current.undelete()
 
         if self._form.get_focus_block() is self:
@@ -1202,6 +1248,9 @@
         @param parameters: Function parameter dictionary.
         """
 
+        if self.__resultset is None:
+            raise NoDataInBlockError(self)
+
         # Remember the current record; the record pointer is not reliable
         # between postAll and requeryAll!
         current = self.__resultset.current
@@ -1225,6 +1274,9 @@
         user, for example to make gnue-appserver recalculate calculated fields.
         """
 
+        if self.__resultset is None:
+            raise NoDataInBlockError(self)
+
         self._dataSourceLink.postAll()
         self._dataSourceLink.requeryAll(False)
 
@@ -1252,6 +1304,9 @@
         @returns: list of dictionaries (one per record)
         """
 
+        if self.__resultset is None:
+            return []
+
         result = []
         if not fieldnames:
             fields = self._fieldMap.values()
@@ -1368,6 +1423,9 @@
         if self.mode == 'query':
             newRecord = 0
             newRecordCount = 1
+        elif self.__resultset is None:
+            newRecord = 0
+            newRecordCount = 0
         else:
             newRecord = self.__resultset.getRecordNumber()
             newRecordCount = self.__resultset.getRecordCount()
@@ -1434,6 +1492,10 @@
             record_number = 1
             record_count = 1
             record_status = 'QRY'
+        elif self.__resultset is None:
+            record_number = 0
+            record_count = 0
+            record_status = 'NUL'
         else:
             record_number = self.__resultset.getRecordNumber()+1
             record_count = self.__resultset.getRecordCount()
@@ -1670,3 +1732,14 @@
                     'datasource': source,
                     'block': block.name},
                 block._url, block._lineNumber)
+
+# =============================================================================
+
+class NoDataInBlockError(errors.ApplicationError):
+    """
+    There is no data in this block loaded.
+    """
+    def __init__(self, source, block):
+        message = u_("There is no data in block '%(block)s'")
+        errors.ApplicationError.__init__(self, message % {
+                    'block': block.name})

Modified: trunk/gnue-forms/src/GFObjects/GFEntry.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFEntry.py   2009-10-15 13:12:49 UTC (rev 
9971)
+++ trunk/gnue-forms/src/GFObjects/GFEntry.py   2009-10-15 21:32:44 UTC (rev 
9972)
@@ -111,7 +111,8 @@
 
     def _is_navigable_(self, mode):
 
-        return self.navigable and self._block.navigable and not self.hidden
+        return self.navigable and self._block.navigable \
+                and self._block.get_record_count() > 0 and not self.hidden
 
 
     # -------------------------------------------------------------------------





reply via email to

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