Source code for personalcapital.database
import structlog
from pymongo import MongoClient
log = structlog.getLogger()
[docs]class Database(object):
DB_PORT = 27017
DB_HOST = 'localhost'
DATE_FORMAT = '%Y-%m-%d'
def __init__(self, host=DB_HOST, port=DB_PORT):
self.host = host
self.port = port
self.conn = None
def __enter__(self):
self.conn = MongoClient(host=self.host, port=self.port)
return self.conn
def __exit__(self, exc_type, exc_val, exc_tb):
self.conn.close()
[docs]def most_recent_transaction():
with Database() as db:
txns = db.banking.transactions
most_recent = txns.find(
{},
{"transactionDate": 1}
).sort("transactionDate", -1).limit(1)
return next(most_recent)
[docs]def insert_transactions(txns):
if len(txns) > 0:
with Database() as db:
log.msg("Inserting {} transactions.".format(len(txns)))
db.banking.transactions.insert_many(txns)
else:
log.msg("Not inserting new transactions, none given.")
[docs]def has_transactions(txns):
txn_map = {
txn["userTransactionId"]: txn
for txn in txns
}
with Database() as db:
matches = db.banking.transactions.find(
{
"userTransactionId": { "$in": list(txn_map.keys()) }
},
{"userTransactionId": 1}
)
return [match["userTransactionId"] in txn_map for match in matches]