thejunglejane/datums

View on GitHub
bin/datums

Summary

Maintainability
Test Coverage
#!/usr/bin/env python
from __future__ import with_statement

import argparse
import glob
import json
import sys
import os

from datums import __version__
from datums import pipeline
from datums import models
from datums.models import base

'''bin/datums provides entry point main().'''


def create_parser():
    # Breaking out argument parsing for easier testing
    parser = argparse.ArgumentParser(
        prog='datums', description='PostgreSQL pipeline for Reporter.',
        usage='%(prog)s [options]')
    parser.add_argument('-V', '--version', action='store_true')
    parser.add_argument(
        '--setup', action='store_true', help='Setup the datums database')
    parser.add_argument(
        '--teardown', action='store_true',
        help='Tear down the datums database')
    parser.add_argument(
        '-A', '--add', help='Add the reports in file(s) specified')
    parser.add_argument(
        '-U', '--update', help='Update the reports in the file(s) specified')
    parser.add_argument(
        '-D', '--delete', help='Delete the reports in the file(s) specified')
    return parser


def main():
    '''Runs program and handles command line options.'''
    parser = create_parser()
    args = parser.parse_args()

    if args.version:
        print __version__
    if args.setup:
        base.database_setup(base.engine)
    if args.teardown:
        base.database_teardown(base.engine)
    if args.add:
        files = glob.glob(os.path.expanduser(args.add))
        for file in files:
            with open(file, 'r') as f:
                day = json.load(f)
            # Add questions first because responses need them
            for question in day['questions']:
                pipeline.QuestionPipeline(question).add()
            for snapshot in day['snapshots']:
                pipeline.SnapshotPipeline(snapshot).add()
    if args.update:
        files = glob.glob(os.path.expanduser(args.update))
        for file in files:
            with open(file, 'r') as f:
                day = json.load(f)
            for snapshot in day['snapshots']:
                pipeline.SnapshotPipeline(snapshot).update()
    if args.delete:
        files = glob.glob(os.path.expanduser(args.delete))
        for file in files:
            with open(file, 'r') as f:
                day = json.load(f)
            for snapshot in day['snapshots']:
                pipeline.SnapshotPipeline(snapshot).delete()


if __name__ == '__main__':
    main()