#!/usr/bin/env python2.7
"""cat files from vospace directly """


if __name__=='__main__':

    from optparse import OptionParser
    import logging, sys
    import vos, errno, os
    from vos import vos, __version__
    ## handle interupts nicely
    usage = """
    vcat filename

    displays the content of a file

    Version: %s """ % (__version__.version)

    parser=OptionParser(usage)
    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("--version", action="store_true", help="VOS Version %s" % (__version__.version))

    name=sys.argv[0]

    if len(sys.argv) == 1:
        parser.print_help()
        sys.exit()

    (opt,args)=parser.parse_args()

    if opt.version:
        sys.stdout.write("vcat version %s \n\n" % (__version__.version))
        sys.exit()

    if opt.verbose:
        log_level = logging.INFO
    elif opt.debug:
        log_level = logging.DEBUG
    else:
        log_level = logging.ERROR

    logging.getLogger('vos').setLevel(log_level)
    logging.getLogger('vos').addHandler(logging.StreamHandler())

    
    try:
        client=vos.Client(certFile=opt.certfile)
    except Exception as e:
        logging.critical("Conneciton failed:  %s" %  (str(e)))
        sys.exit(e.errno)

    import ssl
    buffsize = 8192
    try: 

      for source in args:
          ### the source must exist, of course...
          if source[0:4] == "vos:" :
              f = client.open(source, view='data')
          else:
              f = open(source,'r')
          while True:
              buff = f.read(buffsize)
              if len(buff) == 0:
                  break              
              sys.stdout.write(buff)
          f.close()

    except ssl.SSLError as e:
        logging.critical("SSL Access error, key %s rejected" % ( opt.certfile))
        sys.exit(-2)
    except (OSError, IOError) as e:
        logging.critical(str(e))
        sys.exit(-e.errno)

    sys.exit(0)
