diff options
Diffstat (limited to 'util/protolib.py')
-rw-r--r-- | util/protolib.py | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/util/protolib.py b/util/protolib.py index e085a90f2..e0507cdd4 100644 --- a/util/protolib.py +++ b/util/protolib.py @@ -71,8 +71,33 @@ # with protobuf python messages. For eg, the decode scripts for different # types of proto objects can use the same function to decode a single message +import gzip import struct +def openFileRd(in_file): + """ + This opens the file passed as argument for reading using an appropriate + function depending on if it is gzipped or not. It returns the file + handle. + """ + try: + # First see if this file is gzipped + try: + # Opening the file works even if it is not a gzip file + proto_in = gzip.open(in_file, 'rb') + + # Force a check of the magic number by seeking in the + # file. If we do not do it here the error will occur when + # reading the first message. + proto_in.seek(1) + proto_in.seek(0) + except IOError: + proto_in = open(in_file, 'rb') + except IOError: + print "Failed to open ", in_file, " for reading" + exit(-1) + return proto_in + def DecodeVarint(in_file): """ The decoding of the Varint32 is copied from |