commit-gnue
[Top][All Lists]
Advanced

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

r5859 - in trunk: gnue-common/src/datasources gnue-common/src/datasource


From: jcater
Subject: r5859 - in trunk: gnue-common/src/datasources gnue-common/src/datasources/drivers/Base gnue-forms/src/GFObjects
Date: Thu, 3 Jun 2004 17:46:19 -0500 (CDT)

Author: jcater
Date: 2004-06-03 17:46:18 -0500 (Thu, 03 Jun 2004)
New Revision: 5859

Modified:
   trunk/gnue-common/src/datasources/GDataSource.py
   trunk/gnue-common/src/datasources/drivers/Base/ResultSet.py
   trunk/gnue-forms/src/GFObjects/GFBlock.py
Log:
Added support for record.duplicateRecord() and block.duplicateRecord() 
[untested; will test tonight]


Modified: trunk/gnue-common/src/datasources/GDataSource.py
===================================================================
--- trunk/gnue-common/src/datasources/GDataSource.py    2004-06-02 22:02:21 UTC 
(rev 5858)
+++ trunk/gnue-common/src/datasources/GDataSource.py    2004-06-03 22:46:18 UTC 
(rev 5859)
@@ -70,7 +70,7 @@
     #
     # trigger support
     #
-    self._triggerGlobal = 1
+    self._triggerGlobal = True
     self._triggerFunctions = 
{'createResultSet':{'function':self.createResultSet,
                                                  },
                               
'simpleQuery':{'function':self.triggerSimpleQuery,
@@ -105,7 +105,7 @@
 
     try:
       for field in string.split(self.explicitfields,','):
-        self._fieldReferences[field] = 1
+        self._fieldReferences[field] = True
     except AttributeError:
       pass
     try:
@@ -114,7 +114,7 @@
       for field in string.split(self.order_by,','):
         if field[-5:].lower() == ' desc':
           field = field[:-5]
-        self._fieldReferences[field] = 1
+        self._fieldReferences[field] = True
     except AttributeError:
       pass
     return GObjects.GObj._buildObject(self)
@@ -127,11 +127,11 @@
 
   def triggerSimpleQuery(self,maskDict):
     queryDict = {}
-    okToProcess = 1
+    okToProcess = True
     for key in maskDict.keys():
       queryDict[key]= str(maskDict[key])
       if not len(queryDict[key]):
-        okToProcess = 0
+        okToProcess = False
         break
 
     conditions = 
GConditions.buildConditionFromDict(queryDict,GConditions.GClike)
@@ -225,7 +225,7 @@
     try:
       dataObject._primaryIdField = self.primarykey
       dataObject._primaryIdFormat = "%s = '%%s'" % self.primarykey
-      dataObject._primaryIdChecked = 1
+      dataObject._primaryIdChecked = True
     except AttributeError:
       pass
 
@@ -238,7 +238,7 @@
         dataObject._rawSQL = child
         hasRaw = True
 
-      
+
     if self.type == "sql" and not hasRaw:
       raise Exceptions.InvalidDatasourceDefintion, \
         _("Datasource %s is sql-based, but has no <sql> definition.") % 
self.name
@@ -286,7 +286,7 @@
 
   def referenceUnboundField(self, field, defaultValue=None):
     GDebug.printMesg(7,'Field %s implicitly referenced' % field)
-    self._unboundFieldReferences[field] = 1
+    self._unboundFieldReferences[field] = True
 
     if defaultValue != None:
       self._defaultValues[field] = defaultValue
@@ -299,7 +299,7 @@
   def hasMaster(self):
     return self._dataObject != None and self._dataObject.hasMaster()
 
-  def createResultSet(self, conditions={}, readOnly=0, sql=""):
+  def createResultSet(self, conditions={}, readOnly=False, sql=""):
       resultSet= self._dataObject.createResultSet(conditions,readOnly,sql=sql)
       self.__setResultSet( resultSet )
       return resultSet
@@ -307,7 +307,7 @@
   def addDetailDataObject(self, dataObject, handler=None):
       self._dataObject.addDetailDataObject(dataObject, handler)
 
-  def createEmptyResultSet(self, readOnly=0,masterRecordSet=None):
+  def createEmptyResultSet(self, readOnly=False,masterRecordSet=None):
       resultSet = self._dataObject.createEmptyResultSet(readOnly, 
masterRecordSet=masterRecordSet)
       self.__setResultSet( resultSet )
       return resultSet
@@ -605,7 +605,7 @@
 # Wrapper for standalone DataSources
 # (i.e., not in context of a GObj tree)
 #
-def DataSourceWrapper(connections=None, fields=(), attributes={}, init=1, 
unicodeMode=0, sql=""):
+def DataSourceWrapper(connections=None, fields=(), attributes={}, init=True, 
unicodeMode=False, sql=""):
   source = _DataSourceWrapper()
 
   if sql:

Modified: trunk/gnue-common/src/datasources/drivers/Base/ResultSet.py
===================================================================
--- trunk/gnue-common/src/datasources/drivers/Base/ResultSet.py 2004-06-02 
22:02:21 UTC (rev 5858)
+++ trunk/gnue-common/src/datasources/drivers/Base/ResultSet.py 2004-06-03 
22:46:18 UTC (rev 5859)
@@ -49,7 +49,7 @@
      self._cachedRecords = []
      self._currentRecord = -1
      self._masterRecordSet = masterRecordSet
-     self._readonly = 0
+     self._readonly = False
      self._recordCount = 0
      self._postingRecord = None
 
@@ -91,9 +91,9 @@
   def isLastRecord(self):
     if self._currentRecord < len(self._cachedRecords) - 1 or \
        self._cacheNextRecord():
-      return 0
+      return False
     else:
-      return 1
+      return True
 
 
   # returns -1=No records in memory, #=Current record #
@@ -134,7 +134,7 @@
       self.notifyDetailObjects()
       return self.current
 
-  # returns 1=New record loaded, 0=No more records
+  # returns next record, or None if no more records
   def nextRecord(self):
     if self._currentRecord + 1 == len(self._cachedRecords):
       if not self._cacheNextRecord():
@@ -199,23 +199,59 @@
 
       # Set any dataobject-wide default values
       for field in self._dataObject._defaultValues.keys():
-        self.current.setField(field, self._dataObject._defaultValues[field],0)
+        self.current.setField(field, 
self._dataObject._defaultValues[field],False)
 
       # Set any resultset specific values
       for field in self._defaultValues.keys():
-        self.current.setField(field, self._defaultValues[field],0)
+        self.current.setField(field, self._defaultValues[field],False)
 
       # Pull any primary keys from a master record set
       if self._masterRecordSet != None and hasattr(self._dataObject, 
'_masterfields'):
         i = 0
         for field in self._dataObject._masterfields:
-          
self.current.setField(self._dataObject._detailfields[i],self._masterRecordSet.getField(field),0)
+          
self.current.setField(self._dataObject._detailfields[i],self._masterRecordSet.getField(field),False)
           i += 1
 
       self.notifyDetailObjects()
       return self.current
 
 
+  def duplicateRecord(self, exclude=(), include=()):
+    current = self.current
+    inserted = self.insertRecord()
+
+    # If include= is specified, then that is our base list.
+    # Otherwise, get the base list as the fields in the table
+    if include:
+      fields = list(include)
+    else:
+      fields = list(current._fields.keys())
+
+    # Exclude all the fields in exclude=
+    for field in exclude:
+      try:
+        fields.pop(exclude)
+      except:
+        pass
+
+    # Do not duplicate the primary key field,
+    # unless it was named in the include= parameter
+    try:
+      for field in self._dataObject._primaryIdField:
+        if field not in include:
+          try:
+            fields.pop(field)
+          except:
+            pass
+    except AttributeError:
+      pass
+
+    # Copy the fields over
+    for field in fields:
+      inserted[field] = current[field]
+
+    return inserted
+
   # Returns 1=DataObject, or a detail resultset, has uncommitted changes
   def isPending(self):
     for rec in (self._cachedRecords):
@@ -224,8 +260,8 @@
       else:
         for detail in rec._cachedDetailResultSets.values():
           if detail.isPending():
-            return 1
-    return 0
+            return True
+    return False
 
 
   # Returns 1=DataObject has uncommitted changes
@@ -253,14 +289,14 @@
         # default fields are included in insert statements
         if self._postingRecord.isPending():
           for field in self._dataObject._defaultValues.keys():
-            self._postingRecord._modifiedFlags[field] = 1
+            self._postingRecord._modifiedFlags[field] = True
 
         for field in foreign_keys.keys():
           self._postingRecord._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 self._postingRecord._insertFlag:
-            self._postingRecord._modifiedFlags[field] = 1
+            self._postingRecord._modifiedFlags[field] = True
 
         recordPosition += 1
       else:
@@ -295,7 +331,7 @@
   # Returns 1=Field is bound to a database field
   def isFieldBound(self, fieldName):
     if self._dataObject._fieldReferences.has_key(fieldName):
-      return 1
+      return True
     else:
       #TODO: the string.lower() line should never be called but is left
       #TODO: here untill the code is cleaned up
@@ -318,7 +354,7 @@
 
   # Load cacheCount number of new records
   def _loadNextRecord(self):
-    return 0
+    return False
 
   # Create an empty recordset
   def _createEmptyRecord(self):
@@ -342,8 +378,8 @@
 class _ResultSetIter:
   def __init__(self, resultset):
     self.resultset = resultset
-    self.used = 0
-    self.done = 0
+    self.used = False
+    self.done = False
 
   def __iter__(self):
     return self

Modified: trunk/gnue-forms/src/GFObjects/GFBlock.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFBlock.py   2004-06-02 22:02:21 UTC (rev 
5858)
+++ trunk/gnue-forms/src/GFObjects/GFBlock.py   2004-06-03 22:46:18 UTC (rev 
5859)
@@ -108,8 +108,12 @@
                   'description':''},
         'commit':{'function':self.commit,
                   'description':''},
+        'newRecord':{'function':self.newRecord,
+                      'description':''},
         'deleteRecord':{'function':self.deleteRecord,
                         'description':''},
+        'duplicateRecord':{'function':self.duplicateRecord,
+                        'description':'Duplicates the current (non-empty) 
record into a new record.'},
         'gotoRecord':{'function':self.jumpRecord,
                       'description':''},
         'firstRecord':{'function':self.firstRecord,
@@ -120,8 +124,6 @@
                     'description':'Returns True if block contains no modified 
records.'},
         'lastRecord':{'function':self.lastRecord,
                   'description':'Navigates the block to the last record it 
contains.'},
-        'newRecord':{'function':self.newRecord,
-                      'description':''},
         'nextRecord':{'function':self.nextRecord,
                       'description':'Navigates the block to the next record in 
sequence.'},
         'prevRecord':{'function':self.prevRecord,
@@ -370,6 +372,9 @@
 
       self.processTrigger('POST-FOCUSIN')
 
+  def duplicateRecord(self, exclude=(), include=()):
+    self._resultSet.duplicateRecord(exclude=exclude, include=include)
+
   def isLastRecord(self):
     return self._resultSet.isLastRecord()
 





reply via email to

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