#!python
"""cat files from vospace to stdout"""

from optparse import OptionParser
import sys
import os
import logging
from vos import vos, __version__


def _cat(vospace_uri, cert_filename=None):
    """Cat out the given uri."""

    fh = None
    try:
        if vospace_uri[0:4] == "vos:":
            fh = vos.Client(vospace_certfile=cert_filename).open(vospace_uri, view='data')
        else:
            fh = open(vospace_uri, 'r')
        sys.stdout.write(fh.read())
    finally:
        if fh:
            fh.close()


if __name__ == '__main__':
    usage = "%prog [options] vos:VOSpace/node_name"
    description = "Writes the content of vos:VOSpace/node_name to stdout."

    parser = OptionParser(usage, description=description, version=__version__.version)
    parser.add_option("-v", "--verbose", action="store_true")
    parser.add_option("-d", "--debug",
                      action="store_true",
                      help="set this option to get help solving connection issues")
    parser.add_option("--certfile",
                      help="location of your CADC security certificate file",
                      default=os.path.join(os.getenv("HOME", "."), ".ssl/cadcproxy.pem"))
    parser.add_option("-q", help="run quietly, exit on error without message", action="store_true")

    (opt, args) = parser.parse_args()

    if not len(args) > 0:
        parser.error("no argument given")

    logger = logging.getLogger()
    logger.addHandler(logging.StreamHandler())
    logger.setLevel(logging.ERROR)
    if opt.verbose:
        logger.setLevel(logging.INFO)
    elif opt.debug:
        logger.setLevel(logging.DEBUG)
    exit_code = 0

    for uri in args:
        try:
            _cat(uri, cert_filename=opt.certfile)
        except Exception as e:
            exit_code = getattr(e, 'errno', -1)
            logger.error(getattr(e, 'strerror', uri))

    sys.exit(exit_code)
