almost there
This commit is contained in:
+6
-1
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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",
|
||||||
|
|||||||
Reference in New Issue
Block a user