def test_parse_csv_file(): csv_file = io.StringIO( 'DateTime,Location,Transaction,Product,Amount\n' 'Nov-27-2015 09:00 AM,Main Street Stn,Tap out at Main Street Stn,' 'Stored Value,-1.05\n' 'Nov-27-2015 05:00 PM,Main Street Stn,Tap in at Main Street Stn,' 'Stored Value,0\n' ) txn_list = list(parse_csv_file(csv_file)) assert txn_list == [ Transaction( datetime.datetime(2015, 11, 27, 9, 00), Location('Main Street Stn'), TransactionType.tap_out, Product.stored_value, -105 ), Transaction( datetime.datetime(2015, 11, 27, 17, 00), Location('Main Street Stn'), TransactionType.tap_in, Product.stored_value, 0 ), ]
def main(): """Main entry point.""" parser = argparse.ArgumentParser() parser.add_argument('csvfile') txn_type_names = [member.name for member in transaction.TransactionType] parser.add_argument('--transaction-type', action='append', choices=txn_type_names) parser.add_argument('--location', action='append') parser.add_argument('--sum-amounts', action='store_true') args = parser.parse_args() with open(args.csvfile) as csv_file: txns = filter_txns(transaction.parse_csv_file(csv_file), args.transaction_type, args.location) if args.sum_amounts: print(sum(txn.amount for txn in txns)) else: for txn in txns: print(txn)