fix: monday before publish time to return friday

- add relevant test to ensure doesn't happen again
- fix test_today_before_publish_time

Signed-off-by: Ameya Shenoy <shenoy.ameya@gmail.com>
This commit is contained in:
Ameya Shenoy 2021-02-15 13:22:15 +05:30
parent 193bdb1112
commit 72bd0a1a07
Signed by: codingcoffee
GPG key ID: F7D58AAC5DACF8D3
2 changed files with 15 additions and 6 deletions

View file

@ -17,7 +17,7 @@ class TestApp(TestCase):
@mock.patch('app.utils.datetime.datetime', StubDate)
def test_today_before_publish_time(self):
StubDate.now = classmethod(lambda cls: datetime.datetime(2021, 2, 12, 8, 0, 0))
date, _ = verify_date('2021-02-14', '')
date, _ = verify_date('2021-02-12', '')
self.assertEqual(date.date(), datetime.datetime(2021, 2, 11).date())
@mock.patch('app.utils.datetime.datetime', StubDate)
@ -38,3 +38,9 @@ class TestApp(TestCase):
date, _ = verify_date('2021-02-20', '')
self.assertEqual(date.date(), datetime.datetime(2021, 2, 15).date())
@mock.patch('app.utils.datetime.datetime', StubDate)
def test_monday_before_publish_time(self):
StubDate.now = classmethod(lambda cls: datetime.datetime(2021, 2, 15, 8, 0, 0))
date, _ = verify_date('2021-02-15', '')
self.assertEqual(date.date(), datetime.datetime(2021, 2, 12).date())

View file

@ -165,19 +165,22 @@ def verify_date(date: str, ret_message: str) -> Tuple[datetime.datetime, str]:
microsecond=0)
logger.info('Current IST Datetime: %s; Request Datetime: %s; Next Publish: %s',
curr_datetime, req_datetime, next_publish_time)
# Check for day
if (req_datetime.date() == curr_datetime.date()
and curr_datetime < next_publish_time):
logger.info("Today's data not yet present, returning yesterday's data!")
ret_message += "Today's data not yet published, returning yesterday's data. "
req_datetime -= datetime.timedelta(days=1)
# Check for future date
if req_datetime.date() > curr_datetime.date():
logger.info("Future date, resetting it to today!")
ret_message += "Time travel not yet invented! Returning latest available data. "
req_datetime = curr_datetime
# Check for weekend
day_num = req_datetime.weekday()
if day_num in [5, 6]:
logger.info("Weekend, switching it to Friday!")
ret_message += "Markets are closed on weekends. Returning data for Friday. "
req_datetime -= datetime.timedelta(days=day_num-4) # change req to Friday
# Check for day
if (req_datetime.date() == curr_datetime.date()
and curr_datetime < next_publish_time):
ret_message += "Today's data not yet published, returning yesterday's data. "
req_datetime -= datetime.timedelta(days=1)
return req_datetime, ret_message