[Top][All Lists]
[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()
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- r5859 - in trunk: gnue-common/src/datasources gnue-common/src/datasources/drivers/Base gnue-forms/src/GFObjects,
jcater <=