diff --git a/sijapi/database.py b/sijapi/database.py index cc96110..f581bf2 100644 --- a/sijapi/database.py +++ b/sijapi/database.py @@ -144,12 +144,8 @@ class Database: result = await session.execute(text(query), serialized_kwargs) await session.commit() - # Calculate result checksum - result_str = str(result.fetchall()) - result_checksum = hashlib.md5(result_str.encode()).hexdigest() - # Add the write query to the query_tracking table - await self.add_query_to_tracking(query, serialized_kwargs, result_checksum) + await self.add_query_to_tracking(query, kwargs) # Initiate async operations asyncio.create_task(self._async_sync_operations()) @@ -165,6 +161,7 @@ class Database: l.error(f"Traceback: {traceback.format_exc()}") return None + async def _async_sync_operations(self): try: # Call /db/sync on all online servers @@ -174,20 +171,20 @@ class Database: l.error(f"Traceback: {traceback.format_exc()}") - async def add_query_to_tracking(self, query: str, kwargs: dict, result_checksum: str): + async def add_query_to_tracking(self, query: str, kwargs: dict): async with self.sessions[self.local_ts_id]() as session: new_query = QueryTracking( ts_id=self.local_ts_id, query=query, args=json_dumps(kwargs), - completed_by={self.local_ts_id: True}, - result_checksum=result_checksum + completed_by={self.local_ts_id: True} ) session.add(new_query) await session.commit() + async def pull_query_tracking_from_primary(self): primary_ts_id = await self.get_primary_server() if not primary_ts_id: diff --git a/sijapi/routers/weather.py b/sijapi/routers/weather.py index 49c31b0..b49af86 100644 --- a/sijapi/routers/weather.py +++ b/sijapi/routers/weather.py @@ -205,7 +205,12 @@ async def store_weather_to_db(date_time: dt_datetime, weather_data: dict): if daily_weather_result is None: raise ValueError("Failed to insert daily weather data: no result returned") - daily_weather_id = daily_weather_result.fetchone()[0] + daily_weather_row = daily_weather_result.fetchone() + if daily_weather_row is None: + raise ValueError("Failed to retrieve inserted daily weather ID: fetchone() returned None") + + daily_weather_id = daily_weather_row[0] + l.debug(f"Inserted daily weather data with id: {daily_weather_id}") # Hourly weather insertion @@ -262,8 +267,12 @@ async def store_weather_to_db(date_time: dt_datetime, weather_data: dict): if hourly_result is None: l.warning(f"Failed to insert hourly weather data for {hour_data.get('datetimeEpoch')}") else: - hourly_id = hourly_result.fetchone()[0] - l.debug(f"Inserted hourly weather data with id: {hourly_id}") + hourly_row = hourly_result.fetchone() + if hourly_row is None: + l.warning(f"Failed to retrieve inserted hourly weather ID for {hour_data.get('datetimeEpoch')}") + else: + hourly_id = hourly_row[0] + l.debug(f"Inserted hourly weather data with id: {hourly_id}") return "SUCCESS" except Exception as e: @@ -271,6 +280,7 @@ async def store_weather_to_db(date_time: dt_datetime, weather_data: dict): l.error(f"Traceback: {traceback.format_exc()}") return "FAILURE" + async def get_weather_from_db(date_time: dt_datetime, latitude: float, longitude: float): l.debug(f"Using {date_time.strftime('%Y-%m-%d %H:%M:%S')} as our datetime in get_weather_from_db.") query_date = date_time.date()