From b8ad8abffe3a5395c353d273a7149ee95564f63d Mon Sep 17 00:00:00 2001 From: Noah Levitt Date: Fri, 15 Nov 2013 22:35:32 -0800 Subject: [PATCH] working on packaging --- dump-anydbm.py => bin/dump-anydbm | 2 +- setup.py | 18 +++++++++ warcprox/__init__.py | 0 warcprox/tests/__init__.py | 0 warcprox.py => warcprox/warcprox.py | 62 +++++++++++++++++------------ 5 files changed, 56 insertions(+), 26 deletions(-) rename dump-anydbm.py => bin/dump-anydbm (96%) create mode 100644 setup.py create mode 100644 warcprox/__init__.py create mode 100644 warcprox/tests/__init__.py rename warcprox.py => warcprox/warcprox.py (98%) mode change 100755 => 100644 diff --git a/dump-anydbm.py b/bin/dump-anydbm similarity index 96% rename from dump-anydbm.py rename to bin/dump-anydbm index d0a0405..4cc9aff 100755 --- a/dump-anydbm.py +++ b/bin/dump-anydbm @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python # vim:set sw=4 et: # diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..63cef59 --- /dev/null +++ b/setup.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python +# vim: set sw=4 et: + +import setuptools + +setuptools.setup(name='warcprox', + version='1.0', + description='WARC writing MITM HTTP/S proxy', + url='https://github.com/internetarchive/warcprox', + author='Noah Levitt', + author_email='nlevitt@archive.org', + long_description=open('README.md').read(), + license='GPL', + packages=['warcprox'], + install_requires=['pyopenssl', 'gdbm', 'warctools'], + scripts=['bin/dump-anydbm', 'bin/warcprox'], + zip_safe=False) + diff --git a/warcprox/__init__.py b/warcprox/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/warcprox/tests/__init__.py b/warcprox/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/warcprox.py b/warcprox/warcprox.py old mode 100755 new mode 100644 similarity index 98% rename from warcprox.py rename to warcprox/warcprox.py index 8d522a4..3719e2e --- a/warcprox.py +++ b/warcprox/warcprox.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python # vim:set sw=4 et: # """ @@ -940,9 +940,33 @@ class PlaybackIndexDb(object): return None -if __name__ == '__main__': +def run_until_shutdown(proxy, warc_writer, dedup_db, playback_proxy, playback_index_db): + stop = threading.Event() + signal.signal(signal.SIGTERM, stop.set) - arg_parser = argparse.ArgumentParser( + try: + while not stop.is_set(): + time.sleep(0.5) + except: + pass + finally: + warc_writer.stop.set() + proxy.shutdown() + proxy.server_close() + + if playback_proxy is not None: + playback_proxy.shutdown() + playback_proxy.server_close() + + if dedup_db is not None: + dedup_db.close() + + if playback_index_db is not None: + playback_index_db.close() + + +def _build_arg_parser(prog=sys.argv[0]): + arg_parser = argparse.ArgumentParser(prog=prog, description='warcprox - WARC writing MITM HTTP/S proxy', formatter_class=argparse.ArgumentDefaultsHelpFormatter) arg_parser.add_argument('-p', '--port', dest='port', default='8000', @@ -984,7 +1008,13 @@ if __name__ == '__main__': # [--description=warcinfo description] # [--operator=warcinfo operator] # [--httpheader=warcinfo httpheader] - args = arg_parser.parse_args() + + return arg_parser + + +def main(argv=sys.argv): + arg_parser = _build_arg_parser(prog=argv[0]) + args = arg_parser.parse_args(args=argv[1:]) if args.verbose: loglevel = logging.DEBUG @@ -1040,26 +1070,8 @@ if __name__ == '__main__': proxy_thread.start() warc_writer.start() - stop = threading.Event() - signal.signal(signal.SIGTERM, stop.set) + run_until_shutdown(proxy, warc_writer, dedup_db, playback_proxy, playback_index_db) - try: - while not stop.is_set(): - time.sleep(0.5) - except: - pass - finally: - warc_writer.stop.set() - proxy.shutdown() - proxy.server_close() - - if playback_proxy is not None: - playback_proxy.shutdown() - playback_proxy.server_close() - - if dedup_db is not None: - dedup_db.close() - - if playback_index_db is not None: - playback_index_db.close() +if __name__ == '__main__': + main()