From: alexander s. <a1...@us...> - 2010-12-14 11:04:57
|
Update of /cvsroot/dbfpy/dbfpy/dbfpy In directory sfp-cvsdas-3.v30.ch3.sourceforge.com:/tmp/cvs-serv16216 Modified Files: fields.py Log Message: support reading and writing Memo fields; .toString: write field offset Index: fields.py =================================================================== RCS file: /cvsroot/dbfpy/dbfpy/dbfpy/fields.py,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** fields.py 26 May 2009 05:16:51 -0000 1.14 --- fields.py 14 Dec 2010 11:04:49 -0000 1.15 *************** *** 5,8 **** --- 5,10 ---- """ """History (most recent first): + 14-dec-2010 [als] support reading and writing Memo fields; + .toString: write field offset 26-may-2009 [als] DbfNumericFieldDef.decodeValue: strip zero bytes 05-feb-2009 [als] DbfDateFieldDef.encodeValue: empty arg produces empty date *************** *** 35,38 **** --- 37,41 ---- import sys + from memo import MemoData import utils *************** *** 73,76 **** --- 76,82 ---- defaultValue = None + # True if field data is kept in the Memo file + isMemo = property(lambda self: self.typeCode in "GMP") + def __init__(self, name, length=None, decimalCount=None, start=None, stop=None, ignoreErrors=False, *************** *** 145,150 **** _name + self.typeCode + ! #data address ! chr(0) * 4 + chr(self.length) + chr(self.decimalCount) + --- 151,155 ---- _name + self.typeCode + ! struct.pack("<L", self.start) + chr(self.length) + chr(self.decimalCount) + *************** *** 327,344 **** class DbfMemoFieldDef(DbfFieldDef): ! """Definition of the memo field. ! ! Note: memos aren't currenly completely supported. ! ! """ typeCode = "M" ! defaultValue = " " * 10 ! length = 10 def decodeValue(self, value): ! """Return int .dbt block number decoded from the string object.""" ! #return int(value) ! raise NotImplementedError def encodeValue(self, value): --- 332,352 ---- class DbfMemoFieldDef(DbfFieldDef): ! """Definition of the memo field.""" typeCode = "M" ! defaultValue = "\0" * 4 ! length = 4 ! # MemoFile instance. Must be set before reading or writing to the field. ! file = None ! # MemoData type for strings written to the memo file ! memoType = MemoData.TYPE_MEMO def decodeValue(self, value): ! """Return MemoData instance containing field data.""" ! _block = struct.unpack("<L", value)[0] ! if _block: ! return self.file.read(_block) ! else: ! return MemoData("", self.memoType) def encodeValue(self, value): *************** *** 348,353 **** """ ! #return str(value)[:self.length].ljust(self.length) ! raise NotImplementedError --- 356,371 ---- """ ! if value: ! return struct.pack("<L", ! self.file.write(MemoData(value, self.memoType))) ! else: ! return self.defaultValue ! ! ! class DbfGeneralFieldDef(DbfFieldDef): ! """Definition of the general (OLE object) field.""" ! ! typeCode = "G" ! memoType = MemoData.TYPE_OBJECT |