#!/bin/env python
from sqlitefktg import execute, version
import sys
from os import path
from optparse import OptionParser

print "sqlitefk {0} SQLite foreign-key trigger generator.".format(version)
print

parser = OptionParser(usage="usage: %prog [options] sqlite_file" )
parser.add_option ( "-e", "--exclude-tables", dest="excluded", help="comma separated list of tables to exclude", metavar="TABLES" )
parser.add_option ( "-c", "--cascade-delete", dest="cascade", help="comma separated list of foreign keys with ON DELETE CASCADE", metavar="FK" )
parser.add_option ( "-f", "--force", dest="force", action="store_true", help="do not ask for user confirmation", default=False )


options, args = parser.parse_args()

class Help(Exception): pass
class Abort(Exception): pass

try:    
    if len(args) == 0 or len(args) > 1: raise Help
    filename = args[0]
    if path.exists(filename):
        if options.excluded:
            excluded = options.excluded.split(",")
        else:
            excluded = []
        if options.cascade:
            cascade = map(lambda x: tuple(x.split(".")),  options.cascade.split(","))
        else:
            cascade = []
        if not options.force:
            confirm = raw_input("This will modify your database, and may do some irreversible damage. Do you want to continue (y/n)?")
            if not confirm.lower().startswith("y"):
                raise Abort
            print
        print
        print "Adding foreign-key enforcing triggers to the sqlite database: ", filename
        print
        execute (filename, excluded_tables = excluded, cascade_deletes = cascade, verbose=True)
    else:
        print filename,':', "file not found."
        
except Help:
    parser.print_help()
except Abort:
    pass
except Exception, e:
    print "Error: ", `e`
else:
    print
    print "Completed successfully!"





    
