Source code for mymoney.institutions.venmo

import logging

import numpy as np
import pandas as pd

from mymoney.institutions import institution_base


logging.basicConfig(
    level=logging.INFO,
    format="%(name)s\t[%(asctime)s] %(levelname)s: %(message)s",
    datefmt="%b/%d/%y %I:%M:%S %p",
    # filename="logs.log",
)


[docs] class Venmo(institution_base.Institution): """docs here!""" _this_institution_name = "venmo" def __init__(self) -> None: super().__init__() def _third_party_cleaning( self, input_df: pd.DataFrame, account_name: str ) -> pd.DataFrame: """docs here!""" def is_transfer_finder(val): if val == "Standard Transfer": return "transfer" elif val in ["Payment", "Charge", "Merchant Transaction"]: return "expense" else: return "consider" def amount_finder(val): return float( str(val).replace(" $", "").replace(",", "") ) def description_finder(row): if row["Type"] == "Standard Transfer": return f"transfer to {row['Destination']}" elif row["Type"] == "Merchant Transaction": return row["To"] elif row["Type"] == "Payment": return f"{row['From']} -> {row['To']}: {row['Note']}" elif row["Type"] == "Charge": return f"{row['To']} -> {row['From']}: {row['Note']}" else: return f"Consider: {row['Note']}: {row['From']} -> {row['To']}. (Type: {row['Type']})" input_df["_new_Description"] = input_df.apply(description_finder, axis=1) input_df["_new_Amount"] = input_df["Amount (total)"].map(amount_finder) input_df["_new_Date"] = input_df["Datetime"].copy(deep=True) input_df["_new_InstitutionCategory"] = pd.Series([np.nan] * len(input_df)) input_df["_new_MyCategory"] = pd.Series([np.nan] * len(input_df)) input_df["_new_Institution"] = pd.Series([f"Venmo {account_name}"] * len(input_df)) input_df["_new_IsTransfer"] = input_df["Type"].map(is_transfer_finder) # TODO: input_df["_new_IsCompatible"] = return input_df.dropna(subset=["_new_Date"])