almost there

This commit is contained in:
Jake
2025-04-12 15:20:05 +01:00
parent c0b5e95d98
commit a79c245511
5 changed files with 46 additions and 30 deletions
+6 -1
View File
@@ -1,4 +1,5 @@
import polars as pl import polars as pl
from datetime import date, timedelta
accounts = pl.read_parquet('data/warehouse/accounts.parquet') accounts = pl.read_parquet('data/warehouse/accounts.parquet')
categories = pl.read_parquet('data/warehouse/categories.parquet') categories = pl.read_parquet('data/warehouse/categories.parquet')
@@ -52,4 +53,8 @@ spend_per_payee = master_transactions.sql('''
''' '''
) )
print(spend_per_payee) # print(spend_per_day)
today = date(date.today())
# Convert the dates to datetime objects that are compatible with Polars
start_date = pl.Date(today)
print(start_date)
+2
View File
@@ -35,6 +35,8 @@ def load_config():
except yaml.YAMLError as e: except yaml.YAMLError as e:
logging.error(f'Error loading config.yaml: {e}') logging.error(f'Error loading config.yaml: {e}')
sys.exit(ec.CORRUPTED_CONFIG_FILE) sys.exit(ec.CORRUPTED_CONFIG_FILE)
except Exception as e:
logging.error(f'some other problem {e}')
logger = logging.getLogger("data_pipeline_for_ynab") logger = logging.getLogger("data_pipeline_for_ynab")
os.makedirs('logs', exist_ok=True) os.makedirs('logs', exist_ok=True)
+3 -5
View File
@@ -4,7 +4,7 @@ import pandas as pd
import logging import logging
import sys import sys
import config.exit_codes as ec import config.exit_codes as ec
import datetime # import datetime
try: try:
accounts = pl.read_parquet('data/warehouse/accounts.parquet') accounts = pl.read_parquet('data/warehouse/accounts.parquet')
@@ -30,9 +30,7 @@ except Exception as e:
def update_dates(start_date, end_date): def update_dates(start_date, end_date):
master_data = master_transactions.filter( master_data = master_transactions.filter(
(pl.col('year') >= start_date.year ) & (pl.col('year') <= end_date.year) & pl.col("date").is_between(start_date, end_date)
(pl.col('month') >= start_date.month ) & (pl.col('month') <= end_date.month) &
(pl.col('day') >= start_date.day ) & (pl.col('day') <= end_date.day)
) )
return master_data return master_data
@@ -119,5 +117,5 @@ def update_data(master_data):
"spend_per_category_bar": spend_per_category_bar, "spend_per_category_bar": spend_per_category_bar,
"spend_per_payee_bar": spend_per_payee_bar, "spend_per_payee_bar": spend_per_payee_bar,
"total_spend": total_spend} "total_spend": total_spend}
print(data)
return data return data
+10 -4
View File
@@ -1,21 +1,27 @@
'''Module to create a Dash app that displays visualizations of YNAB data.''' '''Module to create a Dash app that displays visualizations of YNAB data.'''
import dash import dash
from dash import dcc, html from dash import dcc, html
from dash.dependencies import Input, Output from dash.dependencies import Input, Output, State
import dash_bootstrap_components as dbc import dash_bootstrap_components as dbc
from visuals.layout import create_layout from visuals.layout import create_layout
from visuals.components import update_data, update_dates from visuals.components import update_data, update_dates
from datetime import date from datetime import date, timedelta
today = date.today()
one_year_ago = today - timedelta(days=365)
master_data = update_dates(start_date=date(2024, 1, 1), end_date=date(2026, 1, 1)) master_data = update_dates(start_date=one_year_ago, end_date=today)
data = update_data(master_data) data = update_data(master_data)
app = dash.Dash(__name__, external_stylesheets=[dbc.themes.DARKLY]) app = dash.Dash(__name__, external_stylesheets=[dbc.themes.DARKLY])
@app.callback( @app.callback(
Output("layout-container", "children"), Output("spend_per_day","figure"),
Output("spend_per_category","figure"),
Output("spend_per_payee","figure"),
Output("total_spend","children"),
[Input('date-picker-range', 'start_date'), [Input('date-picker-range', 'start_date'),
Input('date-picker-range', 'end_date')] Input('date-picker-range', 'end_date')]
) )
+11 -6
View File
@@ -1,6 +1,10 @@
from dash import html, dcc from dash import html, dcc
from datetime import date from datetime import date
import dash_bootstrap_components as dbc import dash_bootstrap_components as dbc
from datetime import date, timedelta
today = date.today()
one_year_ago = today - timedelta(days=365)
def create_layout(data): def create_layout(data):
@@ -18,8 +22,8 @@ def create_topbar():
dbc.Col( dbc.Col(
dcc.DatePickerRange( dcc.DatePickerRange(
id="date-picker-range", id="date-picker-range",
start_date=date(2024, 1, 1), start_date=one_year_ago,
end_date=date(2026, 1, 1), end_date=today,
), ),
width=4, width=4,
), ),
@@ -54,7 +58,7 @@ def create_main_body(data):
html.H4( html.H4(
"Spend Per Day", className="card-title" "Spend Per Day", className="card-title"
), ),
dcc.Graph(figure=data.spend_per_day_line), dcc.Graph(figure=data['spend_per_day_line'],id='spend_per_day'),
] ]
), ),
className="mb-4", className="mb-4",
@@ -72,7 +76,7 @@ def create_main_body(data):
html.H4( html.H4(
"Spend Per Category", className="card-title" "Spend Per Category", className="card-title"
), ),
dcc.Graph(figure=data.spend_per_category_bar), dcc.Graph(figure=data['spend_per_category_bar'],id='spend_per_category'),
] ]
), ),
className="mb-4", className="mb-4",
@@ -85,10 +89,11 @@ def create_main_body(data):
[ [
dcc.Markdown(f""" dcc.Markdown(f"""
## Total Spend: ## Total Spend:
### £{data.total_spend:,} ### £{data['total_spend']:,}
"""), """),
] ]
), ),
id='total_spend',
className="mb-4", className="mb-4",
), ),
width=2, width=2,
@@ -100,7 +105,7 @@ def create_main_body(data):
html.H4( html.H4(
"Spend Per Payee", className="card-title" "Spend Per Payee", className="card-title"
), ),
dcc.Graph(figure=data.spend_per_payee_bar), dcc.Graph(figure=data['spend_per_payee_bar'],id='spend_per_payee'),
] ]
), ),
className="mb-4", className="mb-4",