doc.py
2.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
from ISO8583.ISO8583 import ISO8583
class BaseISO8583(ISO8583):
def __init__(self, from_iso=None, debug=False):
ISO8583.__init__(self, debug=debug)
self.from_iso = from_iso
bits = self.get_bit_definition()
for bit in bits:
short_name, long_name, type_, size, valueType = bits[bit]
self.redefineBit(
bit, short_name, long_name, type_, size, valueType)
def _ISO8583__setBitTypeANS(self, bit, value): # Override
value = "%s" % value
if len(value) > self.getBitLimit(bit):
value = value[0:self.getBitLimit(bit)]
raise ValueTooLarge('Error: value up to size! Bit[%s] of type %s limit size = %s' % (
bit, self.getBitType(bit), self.getBitLimit(bit)))
data_form = self.getBitFormat(bit)
if data_form == "A":
self.BITMAP_VALUES[bit] = value.ljust(self.getBitLimit(bit)).encode()
elif data_form == "E":
self.BITMAP_VALUES[bit] = value.zfill(self.getBitLimit(bit)).encode('cp1148')
def redefineBit(self, bit, short_name, long_name, type_, size, valueType):
if type_ in ('LL', 'LLL'):
LenForm = 'A' # ASCII
else:
LenForm = '-'
format_ = 'A' # ASCII
ISO8583.redefineBit(
self, bit, short_name, long_name, type_, LenForm, size,
valueType, format_)
def getRawIso(self):
raw = ISO8583.getRawIso(self)
if isinstance(raw, bytes):
raw = raw.decode('utf-8')
return raw.upper()
def setIsoContent(self, raw):
ISO8583.setIsoContent(self, raw.encode('utf-8'))
def get_bit_definition(self):
return {}
def get_value(self, bit):
return self.getBit(bit)
def get_values(self):
r = {}
for item in self.getBitsAndValues():
bit = int(item['bit'])
r[bit] = self.getBit(bit)
return r
def copy(self, bits=[], from_iso=None):
if not from_iso:
from_iso = self.from_iso
values = from_iso.get_values()
for bit in values:
if bits and bit not in bits: # Hanya bit tertentu ?
continue
value = values[bit]
self.setBit(bit, value)