From: alexander s. <a1...@us...> - 2006-10-31 18:01:31
|
Update of /cvsroot/dbfpy/dbfpy/dbfpy In directory sc8-pr-cvs12.sourceforge.net:/tmp/cvs-serv24030 Modified Files: fields.py Log Message: support field types 'F' (float), 'I' (integer) and 'Y' (currency); automate export and registration of field classes Index: fields.py =================================================================== RCS file: /cvsroot/dbfpy/dbfpy/dbfpy/fields.py,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** fields.py 12 Oct 2006 05:28:57 -0000 1.6 --- fields.py 31 Oct 2006 18:01:17 -0000 1.7 *************** *** 5,8 **** --- 5,11 ---- """ """History (most recent first): + 31-oct-2006 [als] support field types 'F' (float), 'I' (integer) + and 'Y' (currency); + automate export and registration of field classes 04-jul-2006 [als] added export declaration 10-mar-2006 [als] decode empty values for Date and Logical fields; *************** *** 18,25 **** __date__ = "$Date$"[7:-2] ! __all__ = ["DbfCharacterFieldDef", "DbfNumericFieldDef", ! "DbfLogicalFieldDef", "DbfMemoFieldDef", "DbfDateFieldDef", ! "DbfDateTimeFieldDef", "lookupFor", ! ] import datetime --- 21,25 ---- __date__ = "$Date$"[7:-2] ! __all__ = ["lookupFor",] # field classes added at the end of the module import datetime *************** *** 235,238 **** --- 235,272 ---- return _rv + class DbfFloatFieldDef(DbfNumericFieldDef): + """Definition of the float field - same as numeric.""" + + typeCode = "F" + + class DbfIntegerFieldDef(DbfFieldDef): + """Definition of the integer field.""" + + typeCode = "I" + length = 4 + defaultValue = 0 + + def decodeValue(self, value): + """Return an integer number decoded from ``value``.""" + return struct.unpack("<i", value)[0] + + def encodeValue(self, value): + """Return string containing encoded ``value``.""" + return struct.pack("<i", int(value)) + + class DbfCurrencyFieldDef(DbfFieldDef): + """Definition of the currency field.""" + + typeCode = "Y" + length = 8 + defaultValue = 0.0 + + def decodeValue(self, value): + """Return float number decoded from ``value``.""" + return struct.unpack("<q", value)[0] / 10000. + + def encodeValue(self, value): + """Return string containing encoded ``value``.""" + return struct.pack("<q", round(value * 10000)) class DbfLogicalFieldDef(DbfFieldDef): *************** *** 389,398 **** ## register generic types ! for _cls in ( ! DbfCharacterFieldDef, DbfNumericFieldDef, DbfMemoFieldDef, ! DbfLogicalFieldDef, DbfDateFieldDef, DbfDateTimeFieldDef, ! ): ! registerField(_cls) ! del _cls # vim: et sts=4 sw=4 : --- 423,432 ---- ## register generic types ! for (_name, _val) in globals().items(): ! if isinstance(_val, type) and issubclass(_val, DbfFieldDef) \ ! and (_name != "DbfFieldDef"): ! __all__.append(_name) ! registerField(_val) ! del _name, _val # vim: et sts=4 sw=4 : |