3
3
4
4
import argparse
5
5
import logging
6
+ from collections import OrderedDict
6
7
from pprint import pformat
7
8
8
9
from freezegun import freeze_time
@@ -45,29 +46,44 @@ def get_head(self, telegram_type, key_name, head=None):
45
46
key ,
46
47
)
47
48
48
- def get_line (self , telegram_type , transfer_key_name , package_key_name = False ):
49
+ def get_line (
50
+ self ,
51
+ telegram_type ,
52
+ transfer_key1_name ,
53
+ transfer_key2_name = False ,
54
+ package_key_name = False ,
55
+ ):
49
56
"""Process a list of dict as lines of the transfers
50
57
51
58
Parameters:
52
59
telegram_type: the key to get the list out of data
53
- transfer_key_name : the key in the dict that serves to identify the
60
+ transfer_key1_name : the key in the dict that serves to identify the
54
61
parent in transfers
62
+ transfer_key2_name: the key in the dict that serves to identify a sub-transfer
55
63
package_key_name: the key in the dict that serves to identify the
56
64
related package
57
65
"""
66
+ transfers = {}
58
67
if telegram_type not in self .data :
59
68
raise ValueError ("Missing telegram: %s" % telegram_type )
60
69
61
70
for line in self .data [telegram_type ]:
62
- key = line [transfer_key_name ]
71
+ key = line [transfer_key1_name ]
63
72
if key not in self .transfers :
64
73
_logger .debug (
65
74
"Found %s (line) record for unknown transfer, ignoring: %s" ,
66
75
telegram_type ,
67
76
key ,
68
77
)
69
78
continue
70
- self .transfers [key ].setdefault ("lines" , []).append (line )
79
+
80
+ # Create a key for the sub-transfer
81
+ if transfer_key2_name :
82
+ key = key + line [transfer_key2_name ]
83
+ if key not in transfers :
84
+ # Copy parent transfer data
85
+ transfers [key ] = OrderedDict (self .transfers [line [transfer_key1_name ]])
86
+ transfers [key ].setdefault ("lines" , []).append (line )
71
87
if not package_key_name :
72
88
continue
73
89
package_id = line [package_key_name ]
@@ -80,7 +96,7 @@ def get_line(self, telegram_type, transfer_key_name, package_key_name=False):
80
96
)
81
97
continue
82
98
line ["package" ] = package
83
- self . transfers [key ].setdefault ("packages" , []).append (package )
99
+ transfers [key ].setdefault ("packages" , []).append (package )
84
100
85
101
86
102
def wamas2dict (msg ):
@@ -121,7 +137,7 @@ def dict2ubl(msg_type, data, extra_data=False):
121
137
122
138
if msg_type == "ReceptionResponse" :
123
139
extractor .get_head ("WEAKQ" , "IvWevk_WevId_WevNr" )
124
- extractor .get_line ("WEAPQ" , "IvWevp_WevId_WevNr" )
140
+ extractor .get_line ("WEAPQ" , "IvWevp_WevId_WevNr" , "IvWevp_WEAP_WeaId_WeaNr" )
125
141
elif msg_type == "ReturnResponse" :
126
142
extractor .get_head ("KRETKQ" , "IvKretk_KretId_KretNr" )
127
143
extractor .get_line ("KRETPQ" , "IvKretp_KretId_KretNr" )
@@ -131,7 +147,9 @@ def dict2ubl(msg_type, data, extra_data=False):
131
147
extractor .get_line ("AUSPQ" , "IvAusp_UrAusId_AusNr" )
132
148
else :
133
149
extractor .get_head ("WATEKQ" , "IvTek_TeId" , extractor .packages )
134
- extractor .get_line ("WATEPQ" , "IvAusp_UrAusId_AusNr" , "IvTep_TeId" )
150
+ extractor .get_line (
151
+ "WATEPQ" , "IvAusp_UrAusId_AusNr" , package_key_name = "IvTep_TeId"
152
+ )
135
153
else :
136
154
raise Exception ("Invalid message type: %s" % msg_type )
137
155
0 commit comments