From 81130e1881e9bcb31f6ab219b7ac1ab39e8f994f Mon Sep 17 00:00:00 2001
From: Mohammad Amin <dadgaramin96@gmail.com>
Date: Mon, 20 Jan 2025 09:46:14 +0330
Subject: [PATCH 1/3] chore: update version to 1.4.15 and add timezone support
 in date handling

---
 setup.py                                             | 2 +-
 tc_analyzer_lib/metrics/analyzer_memberactivities.py | 8 +++++---
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/setup.py b/setup.py
index 86d9d4c..fa24cbb 100644
--- a/setup.py
+++ b/setup.py
@@ -6,7 +6,7 @@
 
 setup(
     name="tc-analyzer-lib",
-    version="1.4.14",
+    version="1.4.15",
     author="Mohammad Amin Dadgar, TogetherCrew",
     maintainer="Mohammad Amin Dadgar",
     maintainer_email="dadgaramin96@gmail.com",
diff --git a/tc_analyzer_lib/metrics/analyzer_memberactivities.py b/tc_analyzer_lib/metrics/analyzer_memberactivities.py
index 976ad10..ea2aab6 100644
--- a/tc_analyzer_lib/metrics/analyzer_memberactivities.py
+++ b/tc_analyzer_lib/metrics/analyzer_memberactivities.py
@@ -1,5 +1,5 @@
 import logging
-from datetime import datetime, timedelta
+from datetime import datetime, timedelta, timezone
 
 from tc_analyzer_lib.algorithms.compute_member_activity import compute_member_activity
 from tc_analyzer_lib.metrics.memberactivity_utils import MemberActivityUtils
@@ -73,7 +73,9 @@ def analysis_member_activity(
             return (None, None)
 
         # get date range to be analyzed
-        today = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
+        today = datetime.now().replace(
+            hour=0, minute=0, second=0, microsecond=0, tzinfo=timezone.utc
+        )
 
         logging.info(f"{guild_msg} memberactivities Analysis started!")
 
@@ -87,7 +89,7 @@ def analysis_member_activity(
         load_past_data = load_past_data and not from_start
 
         first_date = self.analyzer_period.replace(
-            hour=0, minute=0, second=0, microsecond=0
+            hour=0, minute=0, second=0, microsecond=0, tzinfo=timezone.utc
         )
         if first_date is None:
             logging.error(

From 2726bf0c732950df9a01a828665763237d1b6ae7 Mon Sep 17 00:00:00 2001
From: Mohammad Amin <dadgaramin96@gmail.com>
Date: Mon, 20 Jan 2025 09:59:46 +0330
Subject: [PATCH 2/3] feat: add timezone support to analyzer_period in
 TCAnalyzer

---
 tc_analyzer_lib/tc_analyzer.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/tc_analyzer_lib/tc_analyzer.py b/tc_analyzer_lib/tc_analyzer.py
index cb24734..d1a2d46 100644
--- a/tc_analyzer_lib/tc_analyzer.py
+++ b/tc_analyzer_lib/tc_analyzer.py
@@ -1,5 +1,5 @@
 import logging
-from datetime import datetime
+from datetime import datetime, timezone
 
 from tc_analyzer_lib.metrics.analyzer_memberactivities import MemberActivities
 from tc_analyzer_lib.metrics.heatmaps import Heatmaps
@@ -105,7 +105,7 @@ async def run_once(self):
             action_config=self.action,
             window_config=self.window,
             analyzer_config=self.analyzer_config,
-            analyzer_period=self.period,
+            analyzer_period=self.period.replace(tzinfo=timezone.utc),
         )
         (
             member_activities_data,
@@ -190,7 +190,7 @@ async def recompute(self):
             action_config=self.action,
             window_config=self.window,
             analyzer_config=self.analyzer_config,
-            analyzer_period=self.period,
+            analyzer_period=self.period.replace(tzinfo=timezone.utc),
         )
         (
             member_activities_data,

From 4ccd1ff8ded24f2e46927b777cfb236d90124e7b Mon Sep 17 00:00:00 2001
From: Mohammad Amin <dadgaramin96@gmail.com>
Date: Mon, 20 Jan 2025 10:41:58 +0330
Subject: [PATCH 3/3] feat: add timezone handling for member activity dates

---
 tc_analyzer_lib/algorithms/member_activity_history.py | 9 +++------
 tc_analyzer_lib/metrics/analyzer_memberactivities.py  | 3 +++
 tc_analyzer_lib/models/MemberActivityModel.py         | 3 ++-
 3 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/tc_analyzer_lib/algorithms/member_activity_history.py b/tc_analyzer_lib/algorithms/member_activity_history.py
index c26486f..72505d2 100644
--- a/tc_analyzer_lib/algorithms/member_activity_history.py
+++ b/tc_analyzer_lib/algorithms/member_activity_history.py
@@ -1,6 +1,6 @@
 # checking the past history of member activities
 
-from datetime import datetime, timedelta
+from datetime import datetime, timedelta, timezone
 
 from tc_analyzer_lib.algorithms.utils.member_activity_history_utils import (
     MemberActivityPastUtils,
@@ -106,11 +106,8 @@ def check_past_history(
         # db_analysis_start_date = None
         db_analysis_end_date = None
 
-    # # the input date_range in format of datetime
-    # # converting the dates into datetime format
-    # date_format = "%y/%m/%d"
-    # date_range_start = datetime.datetime.strptime(date_range[0], date_format)
-    # date_range_end = datetime.datetime.strptime(date_range[1], date_format)
+    if db_analysis_end_date:
+        db_analysis_end_date = db_analysis_end_date.replace(tzinfo=timezone.utc)
 
     new_date_range: list[datetime]
     # if for the requested date_range, its results were available in db
diff --git a/tc_analyzer_lib/metrics/analyzer_memberactivities.py b/tc_analyzer_lib/metrics/analyzer_memberactivities.py
index ea2aab6..703a28c 100644
--- a/tc_analyzer_lib/metrics/analyzer_memberactivities.py
+++ b/tc_analyzer_lib/metrics/analyzer_memberactivities.py
@@ -138,6 +138,9 @@ def analysis_member_activity(
         if not from_start:
             # first date of storing the data
             first_storing_date = member_activity_c.get_last_date()
+            if first_storing_date:
+                first_storing_date = first_storing_date.replace(tzinfo=timezone.utc)
+
             activities = self.utils.refine_memberactivities_data(
                 activities, first_storing_date
             )
diff --git a/tc_analyzer_lib/models/MemberActivityModel.py b/tc_analyzer_lib/models/MemberActivityModel.py
index c6f4121..0156340 100644
--- a/tc_analyzer_lib/models/MemberActivityModel.py
+++ b/tc_analyzer_lib/models/MemberActivityModel.py
@@ -1,5 +1,6 @@
 #!/usr/bin/env python3
 import logging
+from datetime import datetime
 
 import pymongo
 from tc_analyzer_lib.models.BaseModel import BaseModel
@@ -12,7 +13,7 @@ def __init__(self, database=None):
             raise Exception("Database should not be None")
         super().__init__(collection_name="memberactivities", database=database)
 
-    def get_last_date(self):
+    def get_last_date(self) -> datetime | None:
         """
         Gets the date of the last document
         """