bin/datums
#!/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()