#!/usr/bin/env python
#
# sleeptill - A tool that sleeps until a specified time.
#
# Written in 2004 by Daniel Jacob Pearson <daniel@nanoo.org>.
#
# To the extent possible under law, the author(s) have dedicated all copyright
# and related and neighboring rights to this software to the public domain
# worldwide. This software is distributed without any warranty.
#
# You should have received a copy of the CC0 Public Domain Dedication along with
# this software. If not, see http://creativecommons.org/publicdomain/zero/1.0/.

import sys, time, os
try:
    from optparse import OptionParser
except ImportError:
    print "Python version 2.3 or higher is required to run this program."
    sys.exit(1)
try:
    from parsetime import parsetime
except ImportError:
    print '''\
This program requires the "parsetime" module, which can be obtained from
http://www.nanoo.org/software/parsetime/.'''
    sys.exit(1)

def main(argv):
    usage = "usage: %prog [options] <time>"
    description = "A simple tool that merely sleeps until a specified time."
    parser = OptionParser(usage=usage, description=description)
    parser.add_option('-v', '--verbose', action="store_true", dest="verbose",
                default=False, help="describe what's being done as it happens")
    options, args = parser.parse_args(argv[1:])

    if not args:
        print usage.replace('%prog', os.path.basename(argv[0]))
        sys.exit(1)

    try:
        till = parsetime(*args)
    except ValueError, e:
        print e
        sys.exit(1)

    if options.verbose:
        print "Sleeping until", time.ctime(till)
    try:
        while time.time() < till:
            time.sleep(0.1)
    except KeyboardInterrupt:
        if options.verbose:
            print "Sleep cancelled early."
        sys.exit(2)
    if options.verbose:
        print "Finished sleeping."

if __name__ == '__main__':
    main(sys.argv)
