[IMP] account_banking, account_banking_nl_clieop: improved casting of data

This commit is contained in:
Pieter J. Kersten
2011-03-10 16:25:05 +01:00
parent eb423205c1
commit eab5cc608e
7 changed files with 38 additions and 29 deletions

View File

@@ -25,7 +25,7 @@
##############################################################################
{
'name': 'Account Banking',
'version': '0.1.53',
'version': '0.1.54',
'license': 'GPL-3',
'author': 'EduSense BV',
'website': 'http://www.edusense.nl',

View File

@@ -43,20 +43,21 @@ import unicodedata
class Field(object):
'''Base Field class - fixed length left aligned string field in a record'''
def __init__(self, name, length=1, fillchar=' '):
def __init__(self, name, length=1, fillchar=' ', cast=str):
self.name = name.replace(' ', '_')
self.length = length
self.fillchar = fillchar
self.cast = cast
def format(self, value):
value = str(value)
value = self.cast(value)
if len(value) > self.length:
return value[:self.length]
return value.ljust(self.length, self.fillchar)
def take(self, buffer):
offset = hasattr(self, 'offset') and self.offset or 0
return buffer[offset:offset + self.length].rstrip(self.fillchar)
return self.cast(buffer[offset:offset + self.length].rstrip(self.fillchar))
def __repr__(self):
return '%s "%s"' % (self.__class__.__name__, self.name)
@@ -64,7 +65,7 @@ class Field(object):
class Filler(Field):
'''Constant value field'''
def __init__(self, name, length=1, value=' '):
super(Filler, self).__init__(name, length)
super(Filler, self).__init__(name, length, cast=str)
self.value = str(value)
def take(self, buffer):
@@ -77,9 +78,9 @@ class Filler(Field):
class DateField(Field):
'''Variable date field'''
def __init__(self, name, format='%Y-%m-%d', auto=False):
def __init__(self, name, format='%Y-%m-%d', auto=False, cast=str):
length = len(date.today().strftime(format))
super(DateField, self).__init__(name, length)
super(DateField, self).__init__(name, length, cast=cast)
self.dateformat = format
self.auto = auto
@@ -94,7 +95,7 @@ class DateField(Field):
def take(self, buffer):
value = super(DateField, self).take(buffer)
if value:
return strpdate(value, self.dateformat)
return self.cast(strpdate(value, self.dateformat))
return self.auto and date.today() or None
class RightAlignedField(Field):
@@ -106,7 +107,7 @@ class RightAlignedField(Field):
def take(self, buffer):
offset = hasattr(self, 'offset') and self.offset or 0
return buffer[offset:offset + self.length].lstrip(self.fillchar)
return self.cast(buffer[offset:offset + self.length].lstrip(self.fillchar))
class NumberField(RightAlignedField):
'''Deviation of Field: left zero filled'''
@@ -115,7 +116,7 @@ class NumberField(RightAlignedField):
super(NumberField, self).__init__(*args, **kwargs)
def format(self, value):
return super(NumberField, self).format(value and str(value) or '')
return super(NumberField, self).format(self.cast(value or ''))
class RecordType(object):
fields = []
@@ -186,7 +187,7 @@ class Record(object):
return self._recordtype.format(self._value)
def __unicode__(self):
return unicode(str(self))
return unicode(self.cast(self))
def asciify(str):
return unicodedata.normalize('NFKD', str).encode('ascii', 'ignore')

View File

@@ -26,7 +26,7 @@
##############################################################################
{
'name': 'Account Banking PATU module',
'version': '0.53',
'version': '0.54',
'license': 'GPL-3',
'author': 'Sami Haahtinen',
'website': 'http://ressukka.net',

View File

@@ -25,7 +25,7 @@
##############################################################################
{
'name': 'Account Banking NL ClieOp',
'version': '0.53',
'version': '0.54',
'license': 'GPL-3',
'author': 'EduSense BV',
'website': 'http://www.edusense.nl',

View File

@@ -28,12 +28,20 @@ __all__ = ['DirectDebitBatch', 'PaymentsBatch', 'DirectDebit', 'Payment',
'OrdersFile',
]
class StringField(record.Field):
def take(self, buffer):
return convert.to_swift(super(StringField, self).take(buffer))
class SWIFTField(record.Field):
'''
A SWIFTField does not assume 'ascii' data. It actively converts data to
SWIFT-specs.
'''
def __init__(self, *args, **kwargs):
kwargs['cast'] = convert.to_swift
super(SWIFTField, self).__init__(*args, **kwargs)
#def take(self, buffer):
# return convert.to_swift(super(SWIFTField, self).take(buffer))
def format(self, value):
return convert.to_swift(super(StringField, self).format(value))
#def format(self, value):
# return convert.to_swift(super(SWIFTField, self).format(value))
def eleven_test(s):
'''
@@ -60,7 +68,7 @@ class HeaderRecord(record.Record): #{{{
record.Filler('variantcode', 1, 'A'),
record.DateField('creation_date', '%d%m%y', auto=True),
record.Filler('filename', 8, 'CLIEOP03'),
StringField('sender_id', 5),
SWIFTField('sender_id', 5),
record.Field('file_id', 4),
record.Field('duplicatecode', 1),
record.Filler('filler', 21),
@@ -90,7 +98,7 @@ class BatchHeaderRecord(record.Record):
record.NumberField('accountno_sender', 10),
record.NumberField('batch_tracer', 4),
record.Filler('currency_order', 3, 'EUR'),
StringField('batch_id', 16),
SWIFTField('batch_id', 16),
record.Filler('filler', 10),
]
@@ -110,7 +118,7 @@ class FixedMessageRecord(record.Record):
_fields = [
record.Filler('recordcode', 4, '0020'),
record.Filler('variantcode', 1, 'A'),
StringField('fixed_message', 32),
SWIFTField('fixed_message', 32),
record.Filler('filler', 13),
]
@@ -122,7 +130,7 @@ class SenderRecord(record.Record):
# NAW = Name, Address, Residence
record.Field('NAWcode', 1),
record.DateField('preferred_execution_date', '%d%m%y', auto=True),
StringField('name_sender', 35),
SWIFTField('name_sender', 35),
record.Field('testcode', 1),
record.Filler('filler', 2),
]
@@ -144,7 +152,7 @@ class NamePayerRecord(record.Record):
_fields = [
record.Filler('recordcode', 4, '0110'),
record.Filler('variantcode', 1, 'B'),
StringField('name', 35),
SWIFTField('name', 35),
record.Filler('filler', 10),
]
@@ -153,7 +161,7 @@ class PaymentReferenceRecord(record.Record):
_fields = [
record.Filler('recordcode', 4, '0150'),
record.Filler('variantcode', 1, 'A'),
StringField('paymentreference', 16),
SWIFTField('paymentreference', 16),
record.Filler('filler', 29),
]
@@ -162,7 +170,7 @@ class DescriptionRecord(record.Record):
_fields = [
record.Filler('recordcode', 4, '0160'),
record.Filler('variantcode', 1, 'A'),
StringField('description', 32),
SWIFTField('description', 32),
record.Filler('filler', 13),
]
@@ -171,7 +179,7 @@ class NameBeneficiaryRecord(record.Record):
_fields = [
record.Filler('recordcode', 4, '0170'),
record.Filler('variantcode', 1, 'B'),
StringField('name', 35),
SWIFTField('name', 35),
record.Filler('filler', 10),
]
@@ -179,7 +187,7 @@ class OrderRecord(record.Record):
'''Order details'''
_fields = [
record.Filler('recordcode', 6, 'KAE092'),
StringField('name_transactioncode', 18),
SWIFTField('name_transactioncode', 18),
record.NumberField('total_amount', 13),
record.Field('accountno_sender', 10),
record.NumberField('total_accountnos', 5),

View File

@@ -25,7 +25,7 @@
##############################################################################
{
'name': 'Account Banking - Girotel',
'version': '0.53',
'version': '0.54',
'license': 'GPL-3',
'author': 'EduSense BV',
'website': 'http://www.edusense.nl',

View File

@@ -25,7 +25,7 @@
##############################################################################
{
'name': 'Account Banking',
'version': '0.53',
'version': '0.54',
'license': 'GPL-3',
'author': 'EduSense BV',
'website': 'http://www.edusense.nl',