#!/opt/osstech/bin/python2.7
# -*- coding: utf-8 -*-

# unicornidm-patchsql-executer.py
#
# Copyright (C) TAMURA Kohei @ Open Source Solution Technology Co. Ltd.
# License: GNU General Public License version 2 or later
# Date: 2012-02-08

import os, subprocess, sys, pwd
import sqlite3
from optparse import OptionParser

def main():
    HTTPDUSER = "apache"

    try:
        webuser = pwd.getpwnam(HTTPDUSER)
    except KeyError, e:
        sys.stderr.write("user %s does not exist on this system.\n" % HTTPDUSER)

    ruid = os.getuid()
    if ruid != 0 and ruid != webuser.pw_uid:
        sys.stderr.write("You are not permited.\n")
        sys.exit(1)

    usage = "usage: %prog -n <Patch No>"

    parser = OptionParser(usage=usage)
    parser.add_option("-n", "--no", dest="no", help="Patch No")

    (opts, args) = parser.parse_args(sys.argv)

    if not args:
        parser.print_help()
        sys.exit(1)

    if not opts.no:
        sys.stderr.write("Patch No is not specified.\n")
        parser.print_help()
        sys.exit(1)
    else:
        patchNo = opts.no

    try:
        insertTemplates(patchNo)
    except Exception, e:
        sys.stderr.write("Failed to execute sql. \n%s\n" % str(e))
        sys.exit(1)

    return


def insertTemplates(patchNo):
    try:
        try:
            con = sqlite3.connect("/var/opt/osstech/lib/unicornIDM/unicornIDM.db")

            try:
                ifd = open("/opt/osstech/lib/unicornIDM/patchsql/patch" + patchNo + ".sql", 'r')
                for line in ifd.readlines():
                    if line[len(line)-1:] == "\n":
                        line = line[:len(line)-1]
                    if not line:
                        continue
                    con.execute(line)

                con.commit()
                #con.rollback()

            finally:
                try:
                    ifd.close()
                except:
                    pass

        except Exception, e:
            try:
                con.rollback()
                raise e
            except:
                pass
    finally:
        try:
            con.close()
        except:
            pass

main()
