Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions goosebit/device_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,10 +99,12 @@ async def update_last_connection(device: Device, last_seen: int, last_ip: str |
await DeviceManager.save_device(device, update_fields=["last_seen"])
elif ":" in last_ip:
device.last_ipv6 = last_ip
await DeviceManager.save_device(device, update_fields=["last_seen", "last_ipv6"])
device.last_ip = None
await DeviceManager.save_device(device, update_fields=["last_seen", "last_ipv6", "last_ip"])
else:
device.last_ip = last_ip
await DeviceManager.save_device(device, update_fields=["last_seen", "last_ip"])
device.last_ipv6 = None
await DeviceManager.save_device(device, update_fields=["last_seen", "last_ip", "last_ipv6"])

@staticmethod
async def update_update(device: Device, update_mode: UpdateModeEnum, software: Software | None) -> None:
Expand Down
10 changes: 8 additions & 2 deletions goosebit/schema/devices.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from enum import Enum, IntEnum, StrEnum
from typing import Annotated

from pydantic import BaseModel, BeforeValidator, ConfigDict, computed_field
from pydantic import BaseModel, BeforeValidator, ConfigDict, Field, computed_field

from goosebit.db.models import UpdateModeEnum, UpdateStateEnum
from goosebit.schema.software import HardwareSchema, SoftwareSchema
Expand Down Expand Up @@ -42,7 +42,8 @@ class DeviceSchema(BaseModel):
last_state: Annotated[UpdateStateSchema, BeforeValidator(UpdateStateSchema.convert)] # type: ignore[valid-type]
update_mode: Annotated[UpdateModeSchema, BeforeValidator(UpdateModeSchema.convert)] # type: ignore[valid-type]
force_update: bool
last_ip: str | None
last_ipv4: str | None = Field(validation_alias="last_ip")
last_ipv6: str | None
last_seen: Annotated[
int | None, BeforeValidator(lambda last_seen: round(time.time() - last_seen) if last_seen is not None else None)
]
Expand All @@ -53,6 +54,11 @@ class DeviceSchema(BaseModel):
def polling(self) -> bool | None:
return self.last_seen < (self.poll_seconds + 10) if self.last_seen is not None else None

@computed_field # type: ignore[prop-decorator]
@property
def last_ip(self) -> str | None:
return self.last_ipv4 or self.last_ipv6

@computed_field # type: ignore[prop-decorator]
@property
def poll_seconds(self) -> int:
Expand Down
Loading