From dc3686956c06033fb26d7db5b64094ca264c5464 Mon Sep 17 00:00:00 2001 From: mcinj <98779161+mcinj@users.noreply.github.com> Date: Wed, 11 May 2022 17:34:40 -0400 Subject: [PATCH] work around utc datetime filter in sqlalchemy with sqlite backend --- requirements.txt | 3 ++- src/tables.py | 18 +++++++++++++----- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/requirements.txt b/requirements.txt index 3374fd5..2bb5028 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,4 +2,5 @@ requests==2.27.1 beautifulsoup4==4.11.1 urllib3==1.26.9 sqlalchemy==1.4.36 -sqlalchemy_utils==0.38.2 \ No newline at end of file +sqlalchemy_utils==0.38.2 +python-dateutil==2.8.2 \ No newline at end of file diff --git a/src/tables.py b/src/tables.py index 9a2e1ed..6a0a508 100644 --- a/src/tables.py +++ b/src/tables.py @@ -1,4 +1,5 @@ -from datetime import datetime +from datetime import datetime, timedelta +from dateutil import tz from sqlalchemy import create_engine, Integer, String, Column, DateTime, Boolean, func, ForeignKey from sqlalchemy.orm import registry, relationship, Session @@ -32,10 +33,17 @@ class TableNotification(Base): @classmethod def get_won_notifications_today(cls): with Session(engine) as session: - return session.query(TableNotification) \ - .filter(func.DATE(TableNotification.created_at) == datetime.utcnow().date()) \ - .filter_by(type='won') \ - .all() + # with how filtering of datetimes works with a sqlite backend I couldn't figure out a better way + # to filter out the dates to local time when they are stored in utc in the db + within_3_days = session.query(TableNotification)\ + .filter(func.DATE(TableNotification.created_at) >= (datetime.utcnow().date() - timedelta(days=1)))\ + .filter(func.DATE(TableNotification.created_at) <= (datetime.utcnow().date() + timedelta(days=1)))\ + .filter_by(type='won').all() + actual = [] + for r in within_3_days: + if r.created_at.replace(tzinfo=tz.tzutc()).astimezone(tz.tzlocal()) == datetime.now(tz=tz.tzlocal()).date(): + actual.append(r) + return actual @classmethod def get_won_notifications(cls):