Source code for msg_parser.cli
# -*- coding: utf-8 -*-
"""Console script for msg_parser."""
import os.path
import sys
from argparse import Action
from argparse import ArgumentParser
from argparse import ArgumentTypeError
from argparse import FileType
from pprint import pprint
from msg_parser import MsOxMessage
[docs]class FullPaths(Action):
"""Expand user- and relative-paths"""
def __call__(self, parser, namespace, values, option_string=None):
setattr(namespace, self.dest, os.path.abspath(os.path.expanduser(values)))
[docs]def is_dir(dir_name):
"""Checks if a path is an actual directory"""
if not os.path.isdir(dir_name):
msg = "{0} is not a directory".format(dir_name)
raise ArgumentTypeError(msg)
else:
return dir_name
[docs]def create_parser(args):
parser = ArgumentParser(description="Microsoft Message Parser")
parser.add_argument(
"-i",
"--input",
dest="input_file",
required=True,
help="msg file path",
metavar="FILE",
type=FileType(),
)
parser.add_argument(
"-j",
"--json",
help="output parsed msg as json to console",
dest="json_output",
action="store_true",
)
parser.add_argument(
"-e",
"--eml",
help="provide email file path to save as eml file.",
dest="eml_file",
action=FullPaths,
type=is_dir,
)
return parser.parse_args(args)
[docs]def main():
args = create_parser(sys.argv[1:])
input_file = args.input_file
json_output = args.json_output
if json_output:
ms_msg = MsOxMessage(input_file)
pprint(ms_msg.get_message_as_json())
eml_file = args.eml_file
if eml_file:
ms_msg = MsOxMessage(input_file)
ms_msg.save_email_file(eml_file)
if __name__ == "__main__":
sys.exit(main())