Skip to content

Commit

Permalink
Merge pull request #476 from bashtage/mstar-date-bug
Browse files Browse the repository at this point in the history
BUG: Fix date conversion bug in Morningstar
  • Loading branch information
bashtage committed Jan 24, 2018
2 parents 39b5b16 + 251f7fb commit ee605cb
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 13 deletions.
21 changes: 9 additions & 12 deletions pandas_datareader/mstar/daily.py
@@ -1,12 +1,13 @@
import time
from datetime import datetime, timedelta
from datetime import datetime
from warnings import warn

import requests
from pandas import DataFrame

from pandas_datareader._utils import SymbolWarning
from pandas_datareader.base import _BaseReader
import pandas as pd


class MorningstarDailyReader(_BaseReader):
Expand Down Expand Up @@ -149,13 +150,9 @@ def _dl_mult_symbols(self, symbols):
return dfx

@staticmethod
def _convert_index2date(enddate, indexvals):
i = 0
while i < len(indexvals):
days = indexvals[len(indexvals) - 1] - indexvals[i]
d = enddate - timedelta(days=days)
i += 1
yield d.strftime("%Y-%m-%d")
def _convert_index2date(indexvals):
base = pd.to_datetime('1900-1-1')
return [base + pd.to_timedelta(iv, unit='d') for iv in indexvals]

def _restruct_json(self, symbol, jsondata):
if jsondata is None:
Expand All @@ -166,11 +163,11 @@ def _restruct_json(self, symbol, jsondata):
dateidx = jsondata["PriceDataList"][0]["DateIndexs"]
volumes = jsondata["VolumeList"]["Datapoints"]

date_ = self._convert_index2date(enddate=self.end, indexvals=dateidx)
dates = self._convert_index2date(indexvals=dateidx)
barss = []
for p in range(len(pricedata)):
bar = pricedata[p]
d = next(date_)
d = dates[p]
bardict = {
"Symbol": symbol, "Date": d, "Close": bar[0], "High": bar[1],
"Low": bar[2], "Open": bar[3]
Expand All @@ -180,8 +177,8 @@ def _restruct_json(self, symbol, jsondata):
else:
events = []
for x in divdata:
delta = (datetime.strptime(x["Date"], "%Y-%m-%d") -
datetime.strptime(d, "%Y-%m-%d"))
delta = (datetime.strptime(x["Date"], "%Y-%m-%d")
- d.to_pydatetime())
if delta.days == 0:
events.append(x)
for e in events:
Expand Down
2 changes: 1 addition & 1 deletion pandas_datareader/tests/mstar/test_daily.py
Expand Up @@ -114,7 +114,7 @@ def test_mstar_reader_class(self):
dr = MorningstarDailyReader(symbols="GOOG", interval="d")
df = dr.read()

assert df.Close[('GOOG', '2017-12-13')] == 1040.61
assert df.Close['GOOG']['2017-12-13'] == 1040.61

session = requests.Session()

Expand Down

0 comments on commit ee605cb

Please sign in to comment.