From fddf107b7803b61a34d5170e022634f221fd5a09 Mon Sep 17 00:00:00 2001 From: Sergio Morillo Date: Mon, 29 Apr 2019 17:01:31 +0200 Subject: [PATCH] Replace assert by AssertionError --- retrofix/exception.py | 5 +++++ retrofix/fields.py | 47 +++++++++++++++++++++++------------------- retrofix/formatting.py | 9 +++++--- retrofix/record.py | 18 +++++++++------- 4 files changed, 47 insertions(+), 32 deletions(-) diff --git a/retrofix/exception.py b/retrofix/exception.py index 852244d..c277c28 100644 --- a/retrofix/exception.py +++ b/retrofix/exception.py @@ -20,3 +20,8 @@ class RetrofixException(Exception): pass + + +def raise_assert_error(value, message): + if not value: + raise AssertionError(message) diff --git a/retrofix/fields.py b/retrofix/fields.py index 94bb58d..16db3c3 100644 --- a/retrofix/fields.py +++ b/retrofix/fields.py @@ -33,7 +33,7 @@ from datetime import datetime from stdnum.es.ccc import is_valid from .formatting import format_string, format_number -from .exception import RetrofixException +from .exception import RetrofixException, raise_assert_error __all__ = ['Field', 'Char', 'Const', 'Account', 'Number', 'Numeric', 'Integer', 'Date', 'Selection', 'Boolean', 'SIGN_DEFAULT', 'SIGN_12', 'SIGN_N', @@ -47,9 +47,10 @@ class Field(object): self._size = None def set_from_file(self, value): - assert len(value) == self._size, ('Invalid length of field "%s". ' + raise_assert_error(len(value) == self._size, ( + 'Invalid length of field "%s". ' 'Expected "%d" but got "%d".' % (self._name, self._size, - len(value))) + len(value)))) return value def get_for_file(self, value): @@ -87,8 +88,9 @@ class Const(Char): self._const = const def set_from_file(self, value): - assert value == self._const, ('Invalid value "%s" in Const field ' - '"%s". Expected "%s".' % (value, self._name, self._const)) + raise_assert_error(value == self._const, ( + 'Invalid value "%s" in Const field ' + '"%s". Expected "%s".' % (value, self._name, self._const))) return super(Const, self).set_from_file(value) def get_for_file(self, value): @@ -98,8 +100,8 @@ class Const(Char): return self._const def set(self, value): - assert value == self._const, ('Invalid value for field "%s"' - % self._name) + raise_assert_error(value == self._const, ('Invalid value for field "%s"' + % self._name)) return super(Const, self).set(value) @@ -130,15 +132,15 @@ class Number(Char): self._align = align def set_from_file(self, value): - assert re.match('[0-9]*$', value), ( - 'Non-number value "%s" in field "%s"' % (value, self._name)) + raise_assert_error(re.match('[0-9]*$', value), ( + 'Non-number value "%s" in field "%s"' % (value, self._name))) return super(Number, self).set_from_file(value) def set(self, value): if value is None: value = '' - assert re.match('[0-9]*$', value), ( - 'Non-number value "%s" in field "%s"' % (value, self._name)) + raise_assert_error(re.match('[0-9]*$', value), ( + 'Non-number value "%s" in field "%s"' % (value, self._name))) l = self._size - len(value) if self._align == 'right': @@ -171,8 +173,9 @@ class Numeric(Field): if self._sign == SIGN_N_BLANK: return ' ' if value >= Decimal('0.0') else 'N' if self._sign == SIGN_POSITIVE: - assert value >= Decimal('0.0'), ('Field "%s" must be >= 0.0 but ' - 'got "%.2f"' % (self._name, value)) + raise_assert_error(value >= Decimal('0.0'), ( + 'Field "%s" must be >= 0.0 but ' + 'got "%.2f"' % (self._name, value))) return '' def set_from_file(self, value): @@ -193,9 +196,9 @@ class Numeric(Field): value = Decimal('0') sign = self.get_sign(value) length = self._size - len(sign) - assert length > 0, ('Number formatting error. Field size ' - '"%d" but only "%d" characters left for formatting field "%s".') % ( - self._size, length, self._name) + raise_assert_error(length > 0, ('Number formatting error. Field size ' + '"%d" but only "%d" characters left for formatting field "%s".' + ) % (self._size, length, self._name)) return sign + format_number(abs(value), length, self._decimals) def set(self, value): @@ -238,7 +241,7 @@ class Date(Field): def set(self, value): if value is not None: - assert value, datetime + raise_assert_error(value, datetime) return super(Date, self).set(value) @@ -253,13 +256,15 @@ class Selection(Char): return super(Selection, self).get_for_file(value) def set_from_file(self, value): - assert value in self._keys, ('Value "%s" not found in selection field ' - '"%s". Expected one of: %s' % (value, self._name, self._keys)) + raise_assert_error(value in self._keys, ( + 'Value "%s" not found in selection field ' + '"%s". Expected one of: %s' % (value, self._name, self._keys))) return super(Selection, self).set_from_file(value) def set(self, value): - assert value in self._values, ('Value "%s" not found in selection field ' - '"%s". Expected one of: %s' % (value, self._name, self._values)) + raise_assert_error(value in self._values, ( + 'Value "%s" not found in selection field ' + '"%s". Expected one of: %s' % (value, self._name, self._values))) value = self._values[value] return super(Selection, self).set(value) diff --git a/retrofix/formatting.py b/retrofix/formatting.py index 11b8a39..380bbda 100644 --- a/retrofix/formatting.py +++ b/retrofix/formatting.py @@ -18,6 +18,7 @@ # ############################################################################## from decimal import Decimal +from .exception import raise_assert_error def format_string(text, length, fill=' ', align='<'): @@ -30,7 +31,8 @@ def format_string(text, length, fill=' ', align='<'): if len(text) > length: text = text[:length] text = '{0:{1}{2}{3}s}'.format(text, fill, align, length) - assert len(text) == length, 'Formatted string must match the given length' + raise_assert_error(len(text) == length, + 'Formatted string must match the given length') return text @@ -41,6 +43,7 @@ def format_number(number, size, decimals=0): length += 1 text = '{0:{1}{2}{3}.{4}f}'.format(number, '0', '>', length, decimals) text = text.replace('.', '') - assert len(text) == size, ('Formatted number "%s" must match the given ' - 'length "%d". Got: "%s".' % (number, size, text)) + raise_assert_error(len(text) == size, ( + 'Formatted number "%s" must match the given ' + 'length "%d". Got: "%s".' % (number, size, text))) return text diff --git a/retrofix/record.py b/retrofix/record.py index 6432b8b..e630b08 100755 --- a/retrofix/record.py +++ b/retrofix/record.py @@ -20,7 +20,7 @@ from .fields import Field -from .exception import RetrofixException +from .exception import RetrofixException, raise_assert_error BLANK = ' ' @@ -49,7 +49,7 @@ class Record(object): field = field() field._size = size field._name = name - assert name not in keys, 'Duplicate field name "%s".' % name + raise_assert_error(name not in keys, 'Duplicate field name "%s".' % name) keys.add(name) self._fields[name] = field @@ -60,13 +60,13 @@ class Record(object): self._values[name] = self._fields[name].set_from_file(value) def __getattr__(self, name): - assert name in self._fields, 'Field "%s" does not exist.' % name + raise_assert_error(name in self._fields, 'Field "%s" does not exist.' % name) return self._fields[name].get(self._values.get(name)) def __setattr__(self, name, value): if name.startswith('_'): return super(Record, self).__setattr__(name, value) - assert name in self._fields, 'Field "%s" does not exist.' % name + raise_assert_error(name in self._fields, 'Field "%s" does not exist.' % name) self._values[name] = self._fields[name].set(value) def load(self, line, first_position=1): @@ -102,12 +102,14 @@ class Record(object): value = self.get_for_file(name) - assert len(value) == length, ('Field "%s" should be of size "%d" ' + raise_assert_error(len(value) == length, ( + 'Field "%s" should be of size "%d" ' 'but got "%d" on record "%s".' % (name, length, len(value), - str(self))) - assert start >= current_position, ('Error writing field "%s". ' + str(self)))) + raise_assert_error(start >= current_position, ( + 'Error writing field "%s". ' 'Start: %d, Current Position: %d' % (name, start, - current_position)) + current_position))) text += BLANK * (start - current_position) text += value current_position = len(text)