I added weather data as a custom data source (as described here: https://www.quantconnect.com/docs/algorithm-reference/importing-custom-data), but the data is never downloaded. What am I doing wrong?

from Weather import Weather class WeatherSimple(QCAlgorithm): # Taking weather into account using a custom data source (I called it simple because it will not be using the Algorithm Framework) def Initialize(self): # Set Strategy Cash. In live trading, this is ignored and replaced with the actual cash of the account self.SetCash(50 * 1000) # Set start and end date start_date = datetime(year=2017, month=1, day=1) self.SetStartDate(start_date) self.SetEndDate(start_date + timedelta(weeks=12 * 4)) # Set brokerage model self.SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage, AccountType.Margin) # Set benchmark - this is the performance that we want to beat if we aim to "beat the market" self.SetBenchmark("SPY") # Add securities resolution = Resolution.Daily self.tickers = ["AAPL", "IBM", "TSLA", "GOOG"] for ticker in self.tickers: # Request the data symbol = self.AddEquity(ticker, resolution, Market.USA).Symbol # Set data normalization mode self.Securities[ticker].SetDataNormalizationMode(DataNormalizationMode.SplitAdjusted) # SplitAdjusted means that the price is adjusted for splits but dividends are paid directly to my balance # Add WEATHER DATA - as a custom data source self.AddData(Weather, self.tickers[0], resolution) def OnData(self, data): '''OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here. Arguments: data: Slice object keyed by symbol containing the stock data ''' # Set Holdings such that each ticker gets the same fraction of our money num_tickers = len(self.tickers) fraction_per_ticker = 1. / num_tickers self.SetHoldings([PortfolioTarget(ticker, fraction_per_ticker) for ticker in self.tickers]) # Get bars for each ticker trade_bars = data.Bars for ticker in self.tickers: # Sometimes, there is no info for some of the symbols if ticker not in trade_bars: continue bar = trade_bars[ticker] # self.Debug(f"{ticker} price at {self.Time}: {bar}") # Check if dividends were paid out during the current time slice for ticker in self.tickers: if data.Dividends.ContainsKey(ticker): ## Log the dividend distribution distribution = data.Dividends[ticker].Distribution self.Debug(f"{ticker} paid a dividend of {distribution}")class Weather(PythonData): ''' Weather based rebalancing''' def GetSource(self, config, date, isLive): source = "https://www.wunderground.com/history/airport/{0}/{1}/1/1/CustomHistory.html?dayend=31&monthend=12&yearend={1}&format=1".format(config.Symbol, date.year); return SubscriptionDataSource(source, SubscriptionTransportMedium.RemoteFile); def Reader(self, config, line, date, isLive): # If first character is not digit, pass if not (line.strip() and line[0].isdigit()): return None data = line.split(',') weather = Weather() weather.Symbol = config.Symbol weather.Time = datetime.strptime(data[0], '%Y-%m-%d') + timedelta(hours=20) # Make sure we only get this data AFTER trading day - don't want forward bias. weather.Value = decimal.Decimal(data[2]) weather["MaxC"] = float(data[1]) weather["MinC"] = float(data[3]) return weather