From eab5cc608e8ee69550fe8590c3e9eecf0e295823 Mon Sep 17 00:00:00 2001
From: "Pieter J. Kersten"
Date: Thu, 10 Mar 2011 16:25:05 +0100
Subject: [PATCH] [IMP] account_banking, account_banking_nl_clieop: improved
casting of data
---
account_banking/__terp__.py | 2 +-
account_banking/record.py | 21 +++++++------
account_banking_fi_patu/__terp__.py | 2 +-
account_banking_nl_clieop/__terp__.py | 2 +-
account_banking_nl_clieop/wizard/clieop.py | 36 +++++++++++++---------
account_banking_nl_girotel/__terp__.py | 2 +-
account_banking_nl_multibank/__terp__.py | 2 +-
7 files changed, 38 insertions(+), 29 deletions(-)
diff --git a/account_banking/__terp__.py b/account_banking/__terp__.py
index 913b363c2..9c931b771 100644
--- a/account_banking/__terp__.py
+++ b/account_banking/__terp__.py
@@ -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',
diff --git a/account_banking/record.py b/account_banking/record.py
index 694672b98..8baa9b317 100644
--- a/account_banking/record.py
+++ b/account_banking/record.py
@@ -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')
diff --git a/account_banking_fi_patu/__terp__.py b/account_banking_fi_patu/__terp__.py
index 8ba0c0363..bb183cd78 100644
--- a/account_banking_fi_patu/__terp__.py
+++ b/account_banking_fi_patu/__terp__.py
@@ -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',
diff --git a/account_banking_nl_clieop/__terp__.py b/account_banking_nl_clieop/__terp__.py
index cc279b66e..c0e528755 100644
--- a/account_banking_nl_clieop/__terp__.py
+++ b/account_banking_nl_clieop/__terp__.py
@@ -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',
diff --git a/account_banking_nl_clieop/wizard/clieop.py b/account_banking_nl_clieop/wizard/clieop.py
index b37151e4d..a7afd262f 100644
--- a/account_banking_nl_clieop/wizard/clieop.py
+++ b/account_banking_nl_clieop/wizard/clieop.py
@@ -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),
diff --git a/account_banking_nl_girotel/__terp__.py b/account_banking_nl_girotel/__terp__.py
index 64c4e641c..f212feb8f 100644
--- a/account_banking_nl_girotel/__terp__.py
+++ b/account_banking_nl_girotel/__terp__.py
@@ -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',
diff --git a/account_banking_nl_multibank/__terp__.py b/account_banking_nl_multibank/__terp__.py
index cc2dcda67..dbc7f64b5 100644
--- a/account_banking_nl_multibank/__terp__.py
+++ b/account_banking_nl_multibank/__terp__.py
@@ -25,7 +25,7 @@
##############################################################################
{
'name': 'Account Banking',
- 'version': '0.53',
+ 'version': '0.54',
'license': 'GPL-3',
'author': 'EduSense BV',
'website': 'http://www.edusense.nl',