#!/usr/bin/python3
import argparse
import sys

from simplestreams import log
from simplestreams import mirrors
from simplestreams import objectstores


def main():
    parser = argparse.ArgumentParser()

    parser.add_argument('--keep', action='store_true', default=False,
                        help='keep items in target up to MAX items '
                             'even after they have fallen out of the source')
    parser.add_argument('--max', type=int, default=None,
                        help='store at most MAX items in the target')
    parser.add_argument('--no-item-download', action='store_true',
                        default=False,
                        help='do not download items with a "path"')
    parser.add_argument('--mirror', action='append', default=[],
                        dest="mirrors",
                        help='additional mirrors to find referenced files')

    parser.add_argument('--verbose', '-v', action='count', default=0)
    parser.add_argument('--log-file', default=sys.stderr,
                        type=argparse.FileType('w'))

    parser.add_argument('source_mirror')
    parser.add_argument('output_d')
    parser.add_argument('path', nargs='?', default="streams/v1/index.sjson")
    args = parser.parse_args()

    mirror_config = {'max_items': args.max, 'keep_items': args.keep,
                     'item_download': not args.no_item_download}

    level = (log.ERROR, log.INFO, log.DEBUG)[min(args.verbose, 2)]
    log.basicConfig(stream=args.log_file, level=level)

    smirror = mirrors.UrlMirrorReader(args.source_mirror, mirrors=args.mirrors)
    tstore = objectstores.FileStore(args.output_d)
    tmirror = mirrors.ObjectStoreMirrorWriter(config=mirror_config,
                                              objectstore=tstore)

    tmirror.sync(smirror.reader, args.path)


if __name__ == '__main__':
    main()

# vi: ts=4 expandtab syntax=python
