Hi Sir,
When i run my app, the callback run immediately to download the stocks from yahoo. Is there a way to prevent the callback to run unless i click on the update stock button? Thank you. Here is my code.
import os
import pandas_datareader.data as web
import pandas as pd
import datetime as dt
import plotly.graph_objs as go
import dash
import dash_html_components as html
import dash_core_components as dcc
from dash.dependencies import Input, Output
import time
external_stylesheets = [‘https://codepen.io/chriddyp/pen/bWLwgP.css’]
app = dash.Dash(name, external_stylesheets=external_stylesheets)
default_path = os.path.dirname(os.path.realpath(‘file’))
INCREASING_COLOR = ‘#17BECF’
DECREASING_COLOR = ‘#7F7F7F’
BACKYEAR=7
WINDOW_SIZE=10
NUM_OF_STD=5
today = dt.datetime.now()
dateparse = lambda x: pd.datetime.strptime(x, ‘%Y-%m-%d’)
ticker = ‘AAPL’
app.layout = html.Div([
dcc.Tabs(
id=“tabs”,
value=‘tab-1’,
#parent_className=‘custom-tabs’,
className=‘custom-tabs-container’,
children=[
dcc.Tab(
label=‘Tab one’,
value=‘tab-1’,
className=‘custom-tab’,
selected_className=‘custom-tab–selected’,
children=[
html.Div([
html.H3(‘Stock Config’),
html.Button(‘Update Stocks’, id=‘updateStockButton’),
dcc.Loading(id=“loading-stocks”, children=[html.Div(id=“loading-output-1”)], type=“default”),
html.Div(id=‘config-container’, children=‘Click to update stocks.’)
])
]
),
dcc.Tab(
label=‘Tab two’,
value=‘tab-2’,
className=‘custom-tab’,
selected_className=‘custom-tab–selected’,
children=[
]
),
]),
html.Div(id='tabs-content')
])
@app.callback(Output(‘config-container’, ‘children’),
[Input(‘updateStockButton’, ‘n_clicks’)])
def download_stocks(n_clicks):
start = dt.datetime(today.year-BACKYEAR, 1, 1)
df_quote = web.DataReader(ticker, ‘yahoo’, start, today)
df_quote.to_csv(default_path+’\data\’+ticker+’.csv’)
return ‘Stocks has downloaded {} times.’.format(
n_clicks
)
@app.callback(Output(“loading-output-1”, “children”),
[Input(“updateStockButton”, “n_clicks”)])
def input_triggers_spinner(n_click):
time.sleep(1)
if name == ‘main’:
app.run_server(debug=True)