Source code for snowex_db.cli

import argparse

import pandas as pd

from snowexsql.tables import *
from snowexsql.db import get_db


[docs] def clear_dataset(): # Add tool arguments parser = argparse.ArgumentParser( description='Delete sections of the database by dataset name and observers') parser.add_argument('table_class', metavar='C', type=str, choices=['ImageData', 'Site', 'PointData', 'LayerData'], help='TableClass name to query') parser.add_argument( '--types', '-t', dest='types', nargs='+', help='Names of the data to delete') parser.add_argument( '--observers', '-s', dest='observers', help='Name of the observers to filter the data to delete') parser.add_argument( '--date', '-d', dest='date', help='Date of the data to file by') parser.add_argument( '--doi', dest='doi', help='Entries can be filtered by a DOI value') parser.add_argument( '--database', '-db', dest='db', default='localhost/snowex', help='name of the postgres database to connect to') parser.add_argument( '--credentials', '-c', dest='credentials', default='./credentials.json', help='path to a json containing username and password keys') args = parser.parse_args() print('\n SNOWEX DB Deletion Tool') print('==============================\n') # Get the DB table tables = { 'ImageData': ImageData, 'SiteData': Site, 'PointData': PointData, 'LayerData': LayerData} TableClass = tables[args.table_class] print('Using the {} table to query...'.format( args.table_class.replace('data', ''))) # Grab database session engine, session = get_db(args.db, credentials=args.credentials) # Form the query q = session.query(TableClass) # Filter by data names if args.types: print( 'Filtering results to data types in {}...'.format( ', '.join( args.types))) q = q.filter(TableClass.type.in_(args.types)) # Filter by observer if args.observers is not None: print('Filtering results to observers {}...'.format(args.observers)) q = q.filter(TableClass.observers == args.observers) # Filter by date if args.date is not None: d = pd.to_datetime(args.date).date() print('Filtering results to the date {}...'.format(d)) q = q.filter(TableClass.date == d) # Filter by date if args.doi is not None: print('Filtering results to doi = {}...'.format(args.doi)) q = q.filter(TableClass.doi == args.doi) # Form a count query count = q.count() if count > 0: question = ('\nYou are about delete {} {} records. Continue? (Y/n) ' ''.format(count, args.table_class.replace('Data', ' Data'))) ans = input(question) if ans == 'Y': print("Deleting {} records...".format(count)) q.delete() session.commit() print('Complete!\n') else: print('Aborting.\n') else: print('No records to delete!\n') session.close()