#!/usr/bin/env python
import sys
import argparse
import logging.config
from ConfigParser import ConfigParser

from path import path

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('-c', '--config', default='config.ini')
    parser.add_argument('-r', '--requirement', required=True)
    parser.add_argument('-d', '--pdb', action='store_true')

    options = parser.parse_args()

    if options.pdb:
        sys.excepthook = postmortem_hook
    
    cp = ConfigParser(defaults=dict(
            remote_package_index='http://pypi.python.org/simple',
            local_cache='~/var/eggcelerator/packages',
            build_cache='~/var/eggcelerator/build',
            s3_bucket=None,
            s3_config='~/.s3cfg'))
    cp.read(options.config)
    logging.config.fileConfig(options.config)

    from eggcelerator import Eggcelerator
    app = Eggcelerator(
        requirement=options.requirement,
        remote_package_index=cp.get('eggcelerator', 'remote_package_index'),
        local_cache=cp.get('eggcelerator', 'local_cache'),
        build_cache=cp.get('eggcelerator', 'build_cache'),
        s3_cache=cp.get('eggcelerator', 's3_cache'),
        s3_config=cp.get('eggcelerator', 's3_config'),
        )

    app.run_all()

def postmortem_hook(etype, value, tb): # pragma no cover
    import pdb, traceback
    try:
        from IPython.core.debugger import Pdb
        sys.stderr.write('Entering post-mortem IPDB shell\n')
        p = Pdb(color_scheme='Linux')
        p.reset()
        p.setup(None, tb)
        p.print_stack_trace()
        sys.stderr.write('%s: %s\n' % ( etype, value))
        p.cmdloop()
        p.forget()
    except ImportError:
        sys.stderr.write('Entering post-mortem PDB shell\n')
        traceback.print_exception(etype, value, tb)
        pdb.post_mortem(tb)

if __name__ == '__main__':
   main()

