"""
factfiles-to-facts - insert facts from flat file to database
Copyright (C) 2010  Brian S. Stephan

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
"""

import argparse
import getpass
import os
import sqlite3
import socket
import sys

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('-f', '--factfile')
    parser.add_argument('-c', '--category')
    args = parser.parse_args()

    if args.factfile == None or args.category == None:
        print('script needs both -c (category) and -f (filename)')
        sys.exit(2)

    # database
    dbfile = 'dr.botzo.data'
    db = sqlite3.connect(dbfile)

    # open file
    if os.path.isfile(args.factfile):
        with open(args.factfile, 'r') as file:
            lines = file.readlines()
            for line in lines:
                try:
                    line = line.rstrip()
                    print('inserting \'' + line + '\'')
                    db.execute('''INSERT INTO facts_facts (category, fact, who, userhost)
                        VALUES (?,?,?,?)''', (args.category, line.decode('utf-8', 'ignore'), getpass.getuser(), getpass.getuser() + '@' + socket.getfqdn()))
                except sqlite3.Error as e:
                    db.rollback()
                    print("sqlite error: " + str(e))
                    sys.exit(2)

            db.commit()
    else:
        print('filename \'' + whats[0] + '\' doesn\'t exist')


# vi:tabstop=4:expandtab:autoindent
# kate: indent-mode python;indent-width 4;replace-tabs on;