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

import os
import sys
import argparse
import psycopg2
from pg_export.parser import Parser
from pg_export.data_dumper import DataDumper


arg_parser = argparse.ArgumentParser(description='Splite pg_dump file to object files for control version system',
                                     epilog='Report bugs to <andrey@ulab.ru>.',
                                     conflict_handler='resolve')
arg_parser.add_argument('--clean', action="store_true", help='clean out_dir if not empty')
arg_parser.add_argument('-h', '--host', type=str, help='host for connect db')
arg_parser.add_argument('-p', '--port', type=str, help='port for connect db')
arg_parser.add_argument('-U', '--username', type=str, default='postgres', help='user for connect db')
arg_parser.add_argument('-W', '--password', type=str, help='password for connect db')
arg_parser.add_argument('dbname', help='source databese name')
arg_parser.add_argument('out_dir', help='directory for object files')
args = arg_parser.parse_args()

args.connect_args = ''
if args.host:
	args.connect_args += ' -h %s' % args.host
if args.port:
	args.connect_args += ' -p %s' % args.port
if args.username:
	args.connect_args += ' -U %s' % args.username
if args.password:
	os.environ['PGPASSWORD'] = args.password

if not os.access(args.out_dir, os.F_OK):
    try:
        os.mkdir(args.out_dir)
    except:
        arg_parser.error("can not access to directory '%s'" % args.out_dir)

if os.listdir(args.out_dir):
    if args.clean:
        os.system('rm -rf %s/*' % args.out_dir)
    else:
        arg_parser.error('distination not empty (you can use option --clean)')

db_connect = psycopg2.connect(dbname=args.dbname, host=args.host, port=args.port, user=args.username, password=args.password)
src_dump = os.popen('pg_dump -s -O %s %s' % (args.connect_args, args.dbname))

p = Parser(db_connect)
p.parse(src_dump)
p.dump_all(args.out_dir)

d = DataDumper(db_connect)
d.dump_all(args.out_dir, args)
