Skip to content

Commit

Permalink
Allow data_summary to filter by station id
Browse files Browse the repository at this point in the history
  • Loading branch information
Wason1797 committed Jan 29, 2025
1 parent 35dd1cf commit 6f4404a
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 25 deletions.
24 changes: 9 additions & 15 deletions server/app/managers/aiq_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,27 +156,21 @@ async def get_sensor_data_by_id(session_maker: AsyncSessionMaker, id: int) -> Op
return result.scalar_one_or_none()

@staticmethod
async def get_summary(session_maker: AsyncSessionMaker) -> str:
query = select(StationData).order_by(StationData.id.desc()).limit(1)
async with session_maker() as session:
result = (await session.scalars(query)).first()
if not result:
return "Database is empty"
count = await session.scalar(select(func.count()).select_from(StationData))

return _render_summary_template(result, count or 0)
async def get_summary(session_maker: AsyncSessionMaker, station_id: Optional[int] = None) -> str:
query = select(StationData)

@staticmethod
async def get_summary_by_station_id(session_maker: AsyncSessionMaker, station_id: int) -> str:
query = select(StationData).where(StationData.station_id == station_id).order_by(StationData.id.desc()).limit(1)
if station_id is not None:
query = query.where(StationData.station_id == station_id)

query = query.order_by(StationData.id.desc()).limit(1)
async with session_maker() as session:
result = (await session.scalars(query)).first()

if not result:
return f"Results for sensor {station_id} not found"
return "Database is empty" if station_id is None else f"Results for sensor {station_id} not found"

return _render_summary_template(result, 1)
count = await session.scalar(select(func.count()).select_from(StationData))

return _render_summary_template(result, count or 0)

@staticmethod
async def truncate_db(session_maker: AsyncSessionMaker) -> str:
Expand Down
17 changes: 16 additions & 1 deletion server/app/telegram/bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,23 @@ async def command_summary_handler(message: Message, command: CommandObject):
await message.answer("Command not supported")

callback = ManagementBot.get_command(command.command)

station_id: Optional[int] = None

if command.args:
cmd_args = command.args.split()
if len(cmd_args) > 1:
await message.answer("Incorrect number of arguments, only station_id is needed")
return

try:
station_id = int(cmd_args[0])
except TypeError:
await message.answer(f"station_id: {station_id} is not a valid int")
return

try:
result = await callback()
result = await callback(station_id)
except Exception:
trace = traceback.format_exc()
await message.answer(f"An error occurred in summary:\n {trace}")
Expand Down
6 changes: 3 additions & 3 deletions server/tests/managers/aiq_manager_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,11 @@ async def test_get_summary_with_full_data(main_db_session: AsyncSessionMaker, fu


@pytest.mark.asyncio
async def test_get_summary_by_station_id(main_db_session: AsyncSessionMaker, scd41_data_from_station: AiqDataFromStation):
async def test_get_summary_by_station_with_station_id(main_db_session: AsyncSessionMaker, scd41_data_from_station: AiqDataFromStation):
await AiqDataManager.save_sensor_data(main_db_session, scd41_data_from_station)
null_summary = await AiqDataManager.get_summary_by_station_id(main_db_session, -1)
null_summary = await AiqDataManager.get_summary(main_db_session, -1)
assert "not found" in null_summary
summary = await AiqDataManager.get_summary_by_station_id(
summary = await AiqDataManager.get_summary(
main_db_session,
scd41_data_from_station.station_id,
)
Expand Down
4 changes: 2 additions & 2 deletions server/tests/resources/station_data_forwarder_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ async def test_render_put_in_br_from_end_device_no_backups(

assert result.code == CHANGED

summary_backup = await AiqDataManager.get_summary_by_station_id(backup_db_session, mock_station_id)
summary_backup = await AiqDataManager.get_summary(backup_db_session, mock_station_id)

assert "not found" in summary_backup

Expand All @@ -56,6 +56,6 @@ async def test_render_put_in_br_from_end_device_with_backup(
)
assert result.code == CHANGED

summary_main = await AiqDataManager.get_summary_by_station_id(backup_db_session, mock_station_id)
summary_main = await AiqDataManager.get_summary(backup_db_session, mock_station_id)

assert "not found" not in summary_main
8 changes: 4 additions & 4 deletions server/tests/resources/station_data_storage_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@ async def test_render_put_in_main_server_from_br(

assert result.code == CHANGED

summary_main = await AiqDataManager.get_summary_by_station_id(main_db_session, mock_station_id)
summary_main = await AiqDataManager.get_summary(main_db_session, mock_station_id)

assert "not found" not in summary_main

summary_backup = await AiqDataManager.get_summary_by_station_id(backup_db_session, mock_station_id)
summary_backup = await AiqDataManager.get_summary(backup_db_session, mock_station_id)

assert "not found" not in summary_backup

Expand All @@ -55,10 +55,10 @@ async def test_render_put_in_main_server_from_end_device(

assert result.code == CHANGED

summary_main = await AiqDataManager.get_summary_by_station_id(main_db_session, mock_station_id)
summary_main = await AiqDataManager.get_summary(main_db_session, mock_station_id)

assert "not found" not in summary_main

summary_backup = await AiqDataManager.get_summary_by_station_id(backup_db_session, mock_station_id)
summary_backup = await AiqDataManager.get_summary(backup_db_session, mock_station_id)

assert "not found" not in summary_backup

0 comments on commit 6f4404a

Please sign in to comment.