Toggle Light / Dark / Auto color theme
Toggle table of contents sidebar
Source code for oasislmf.execution.complex_items_to_csv
import sys
import msgpack
import struct
import csv
"""
Implementation of ktool items conversion tool including
complex item data serialized with msgpack.
"""
[docs]
def items_to_csv ( source , output ):
struct_fmt = 'IIII'
struct_len = struct . calcsize ( struct_fmt )
struct_unpack = struct . Struct ( struct_fmt ) . unpack_from
writer = csv . writer ( output )
writer . writerow (( "item_id" , "coverage_id" , "model_data" , "group_id" ))
while True :
data = source . read ( struct_len )
if not data :
break
item_id , coverage_id , group_id , model_data_len = struct_unpack ( data )
# https://github.com/msgpack/msgpack-python#major-breaking-changes-in-msgpack-10
if msgpack . version >= ( 1 , 0 , 0 ):
model_data = msgpack . unpackb ( source . read ( model_data_len ), raw = False )
writer . writerow (( item_id , coverage_id , model_data , group_id ))
else :
model_data = msgpack . unpackb ( source . read ( model_data_len ))
writer . writerow (( item_id , coverage_id , model_data . decode ( 'utf-8' ), group_id ))
[docs]
def main ():
PY3K = sys . version_info >= ( 3 , 0 )
if PY3K :
source = sys . stdin . buffer
else :
# Python 2 on Windows opens sys.stdin in text mode, and
# binary data that read from it becomes corrupted on \r\n
if sys . platform == "win32" :
# set sys.stdin to binary mode
import os
import msvcrt
msvcrt . setmode ( sys . stdin . fileno (), os . O_BINARY )
source = sys . stdin
items_to_csv ( source , sys . stdout )
if __name__ == "__main__" :
main ()