Skip to content
Merged
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
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ requires-python = ">=3.13"
dependencies = [
"anyio>=4.13.0",
"httpx>=0.28.1",
"pydantic>=2.12.5",
"pydantic>=2.12.2",
]

[project.optional-dependencies]
Expand Down
2 changes: 1 addition & 1 deletion src/divera247/endpoints/alarm.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ async def close_alarm(
payload: CloseAlarmPayload | None = None,
) -> SuccessResponse:
"""Close an alarm (POST /api/v2/alarms/close/{id})."""
data = payload.model_dump(by_alias=False, exclude_none=True) if payload else None
data = payload.model_dump(mode='json', by_alias=False, exclude_none=True) if payload else None
response = await self.client.post(
f'v2/alarms/close/{alarm_id}',
data=data,
Expand Down
6 changes: 3 additions & 3 deletions src/divera247/endpoints/event.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ async def create_event(self, payload: EventInput) -> EventSingleResponse:
"""Create a new event (POST /api/v2/events)."""
response = await self.client.post(
'v2/events',
data=payload.model_dump(by_alias=False, exclude_none=True),
data=payload.model_dump(mode='json', by_alias=False, exclude_none=True),
)
return EventSingleResponse.model_validate(response.json())

Expand All @@ -48,7 +48,7 @@ async def update_event(
"""Update an event (PUT /api/v2/events/{id})."""
response = await self.client.put(
f'v2/events/{event_id}',
data=payload.model_dump(by_alias=False, exclude_none=True),
data=payload.model_dump(mode='json', by_alias=False, exclude_none=True),
)
return EventSingleResponse.model_validate(response.json())

Expand Down Expand Up @@ -92,7 +92,7 @@ async def confirm_event(
payload: EventConfirmPayload | None = None,
) -> SuccessResponse:
"""Create a response to an event (POST /api/v2/events/confirm/{id})."""
data = payload.model_dump(by_alias=False, exclude_none=True) if payload else None
data = payload.model_dump(mode='json', by_alias=False, exclude_none=True) if payload else None
response = await self.client.post(
f'v2/events/confirm/{event_id}',
data=data,
Expand Down
2 changes: 1 addition & 1 deletion src/divera247/endpoints/statusgeber.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@ async def set_status(self, payload: StatusgeberPayload) -> None:
"""Set status (POST /api/v2/statusgeber/set-status)."""
await self.client.post(
'v2/statusgeber/set-status',
data=payload.model_dump(by_alias=False, exclude_none=True),
data=payload.model_dump(mode='json', by_alias=False, exclude_none=True),
)
23 changes: 12 additions & 11 deletions src/divera247/models/alarm.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

from __future__ import annotations

import datetime # noqa: TC003
from collections.abc import Mapping, Sequence

from pydantic import BaseModel, Field
Expand All @@ -32,7 +33,7 @@ class SuccessResponse(BaseModel):
class UcrAnsweredEntry(BaseModel):
"""Single user response entry in ucr_answered (status_id -> ucr_id -> this)."""

ts: int = Field(description='UNIX timestamp of response')
ts: datetime.datetime = Field(description='UNIX timestamp of response')
note: str = Field(default='', description='Freitext-Rückmeldung')


Expand Down Expand Up @@ -103,7 +104,7 @@ class ReachTransports(BaseModel):
id: int = Field(description='ID of the transport')
notification_type: int = Field(description='Notification type')
count_send: int = Field(description='Count of send')
ts: int = Field(description='UNIX timestamp of the transport')
ts: datetime.datetime = Field(description='UNIX timestamp of the transport')


class ReachReceived(BaseModel):
Expand All @@ -120,14 +121,14 @@ class ReachViewed(BaseModel):
"""Reach viewed for GET /api/v2/alarms/reach/{id}."""

id: int = Field(description='ID of the viewed')
ts: int = Field(description='UNIX timestamp of the viewed')
ts: datetime.datetime = Field(description='UNIX timestamp of the viewed')


class ReachConfirmed(BaseModel):
"""Reach confirmed for GET /api/v2/alarms/reach/{id}."""

id: int = Field(description='ID of the confirmed')
ts: int = Field(description='UNIX timestamp of the confirmed')
ts: datetime.datetime = Field(description='UNIX timestamp of the confirmed')
note: str = Field(description='Note of the confirmed')


Expand Down Expand Up @@ -195,7 +196,7 @@ class AlarmResult(BaseModel):
default=None,
description='ID der Alarmvorlage (Alarmcode)',
)
date: int | None = Field(
date: datetime.datetime | None = Field(
default=None,
description='Alarmierungszeit als UNIX-Timestamp',
)
Expand Down Expand Up @@ -319,23 +320,23 @@ class AlarmResult(BaseModel):
description='Anzahl der Empfänger',
)
count_read: int | None = Field(default=None, description='Anzahl gelesen')
ts_response: int | None = Field(
ts_response: datetime.datetime | None = Field(
default=None,
description='Berechneter UNIX-Timestamp für Rückmeldung bis',
)
ts_publish: int | None = Field(
ts_publish: datetime.datetime | None = Field(
default=None,
description='UNIX-Timestamp für zeitgesteuerte Alarmierung',
)
ts_close: int | None = Field(
ts_close: datetime.datetime | None = Field(
default=None,
description='UNIX-Timestamp Einsatzende',
)
ts_create: int | None = Field(
ts_create: datetime.datetime | None = Field(
default=None,
description='UNIX-Timestamp des Erstelldatums',
)
ts_update: int | None = Field(
ts_update: datetime.datetime | None = Field(
default=None,
description='UNIX-Timestamp zuletzt bearbeitet',
)
Expand Down Expand Up @@ -539,7 +540,7 @@ class CloseAlarmData(BaseModel):
description='Zustand geschlossen oder geöffnet',
)
report: str | None = Field(default=None, description='Einsatzbericht')
ts: int | None = Field(
ts: datetime.datetime | None = Field(
default=None,
description='Datum/Uhrzeit als Unix-Timestamp',
)
Expand Down
13 changes: 7 additions & 6 deletions src/divera247/models/event.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
These models map to the schemas defined in ``api_v2_event.yaml``.
"""

import datetime
from collections.abc import Mapping, Sequence

from pydantic import BaseModel, Field
Expand All @@ -16,7 +17,7 @@ class EventResult(BaseModel):
id: int | None = Field(default=None, description='ID/Primärschlüssel')
foreign_id: str | None = Field(default=None, description='Fremdschlüssel')
author_id: int | None = Field(default=None, description='ID des Nutzers')
date: int | None = Field(default=None, description='Terminszeit als UNIX-Timestamp')
date: datetime.datetime | None = Field(default=None, description='Terminszeit als UNIX-Timestamp')
title: str | None = Field(default=None, description='Titel')
text: str | None = Field(default=None, description='Meldung')
address: str | None = Field(default=None, description='Ort')
Expand All @@ -36,8 +37,8 @@ class EventResult(BaseModel):
answerable: bool | None = Field(default=None, description='Beantwortbar')
hidden: bool | None = Field(default=None, description='Entwurf')
deleted: bool | None = Field(default=None, description='Im Archiv')
ts_create: int | None = Field(default=None, description='UNIX-Timestamp Erstelldatum')
ts_update: int | None = Field(
ts_create: datetime.datetime | None = Field(default=None, description='UNIX-Timestamp Erstelldatum')
ts_update: datetime.datetime | None = Field(
default=None,
description='UNIX-Timestamp zuletzt bearbeitet',
)
Expand Down Expand Up @@ -117,11 +118,11 @@ class EventInputEvent(BaseModel):
title: str = Field(description='Titel')
text: str | None = Field(default=None, description='Meldung')
address: str | None = Field(default=None, description='Ort')
ts_start: int | None = Field(
ts_start: datetime.datetime | None = Field(
default=None,
description='Beginn als UNIX-Timestamp',
)
ts_end: int | None = Field(
ts_end: datetime.datetime | None = Field(
default=None,
description='Ende als UNIX-Timestamp',
)
Expand Down Expand Up @@ -153,7 +154,7 @@ class EventInputEvent(BaseModel):
class EventInputReminder(BaseModel):
"""Reminder for event (event-input.Reminder)."""

ts: int | None = Field(
ts: datetime.datetime | None = Field(
default=None,
description='Zeitpunkt als UNIX-Timestamp',
)
Expand Down
7 changes: 4 additions & 3 deletions src/divera247/models/news.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
These models map to the schemas defined in ``api_v2_news.yaml``.
"""

import datetime
from collections.abc import Mapping, Sequence

from pydantic import BaseModel, Field
Expand All @@ -16,7 +17,7 @@ class NewsResult(BaseModel):
id: int | None = Field(default=None, description='ID/Primärschlüssel')
foreign_id: str | None = Field(default=None, description='Fremdschlüssel')
author_id: int | None = Field(default=None, description='ID des Nutzers')
date: int | None = Field(
date: datetime.datetime | None = Field(
default=None,
description='Mitteilungszeit als UNIX-Timestamp',
)
Expand All @@ -39,8 +40,8 @@ class NewsResult(BaseModel):
answerable: bool | None = Field(default=None, description='Beantwortbar')
hidden: bool | None = Field(default=None, description='Entwurf')
deleted: bool | None = Field(default=None, description='Im Archiv')
ts_create: int | None = Field(default=None, description='UNIX-Timestamp Erstelldatum')
ts_update: int | None = Field(
ts_create: datetime.datetime | None = Field(default=None, description='UNIX-Timestamp Erstelldatum')
ts_update: datetime.datetime | None = Field(
default=None,
description='UNIX-Timestamp zuletzt bearbeitet',
)
Expand Down
33 changes: 17 additions & 16 deletions src/divera247/models/pull.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
These models map to the schemas defined in ``api_v2_pull.yaml``.
"""

import datetime
from collections.abc import Mapping, Sequence
from typing import cast

Expand Down Expand Up @@ -87,7 +88,7 @@ class PullUser(BaseModel):
default=None,
description='Onboarding-Tour Status',
)
ts: int | None = Field(
ts: datetime.datetime | None = Field(
default=None,
description='Letzte Änderung als UNIX-Timestamp',
)
Expand All @@ -96,7 +97,7 @@ class PullUser(BaseModel):
class StatusChangeEntry(BaseModel):
"""Single entry in status.status_changes or status.status_log."""

ts: int | None = Field(default=None, description='UNIX-Timestamp')
ts: datetime.datetime | None = Field(default=None, description='UNIX-Timestamp')
status: int | None = Field(default=None, description='ID des Status')
note: str | None = Field(default=None, description='Status-Notiz')
vehicle: int | None = Field(default=None, description='ID des Fahrzeugs')
Expand All @@ -119,11 +120,11 @@ class PullStatusData(BaseModel):
default=None,
description='Alle Geofences im Zeitraum ignorieren',
)
status_set_date: int | None = Field(
status_set_date: datetime.datetime | None = Field(
default=None,
description='UNIX-Timestamp der letzten Statusänderung',
)
status_reset_date: int | str | None = Field(
status_reset_date: datetime.datetime | str | None = Field(
default=None,
description='Nächstes Zurücksetzen gemäß UNIX-Timestamp',
)
Expand All @@ -141,7 +142,7 @@ class PullStatusData(BaseModel):
)
note: str | None = Field(default=None, description='Status-Notiz')
vehicle: int | None = Field(default=None, description='ID des aktuellen Fahrzeugs')
ts: int | None = Field(
ts: datetime.datetime | None = Field(
default=None,
description='Letzte Änderung als UNIX-Timestamp',
)
Expand Down Expand Up @@ -170,7 +171,7 @@ def _coerce_items(cls, v: object) -> Mapping[str, object]:
default_factory=tuple,
description='Reihenfolge aufsteigend',
)
ts: int | None = Field(
ts: datetime.datetime | None = Field(
default=None,
description='Letzte Änderung als UNIX-Timestamp',
)
Expand Down Expand Up @@ -223,11 +224,11 @@ class StatusPlanEntry(BaseModel):
description='ID der Kalender-Kategorie',
)
title: str | None = Field(default=None, description='Beschreibung')
begin_ts: int | None = Field(
begin_ts: datetime.datetime | None = Field(
default=None,
description='Beginn als UNIX-Timestamp',
)
end_ts: int | None = Field(
end_ts: datetime.datetime | None = Field(
default=None,
description='Ende als UNIX-Timestamp',
)
Expand Down Expand Up @@ -256,7 +257,7 @@ class StatusPlanEntry(BaseModel):
default=None,
description='Laufzeit begrenzen',
)
repeat_until_ts: int | None = Field(
repeat_until_ts: datetime.datetime | None = Field(
default=None,
description='Wiederholung bis als UNIX-Timestamp',
)
Expand Down Expand Up @@ -301,7 +302,7 @@ class PullStatusplanData(BaseModel):
default=None,
description='Statusplan-Kategorien (deprecated)',
)
ts: int | None = Field(
ts: datetime.datetime | None = Field(
default=None,
description='Letzte Änderung als UNIX-Timestamp',
)
Expand Down Expand Up @@ -356,7 +357,7 @@ class PullLocalmonitorData(BaseModel):
default_factory=tuple,
description='Reihenfolge',
)
ts: int | None = Field(
ts: datetime.datetime | None = Field(
default=None,
description='Letzte Änderung als UNIX-Timestamp',
)
Expand All @@ -365,7 +366,7 @@ class PullLocalmonitorData(BaseModel):
class PullMonitorData(BaseModel):
"""Personnel availability (monitor) in pull data."""

ts: int | None = Field(
ts: datetime.datetime | None = Field(
default=None,
description='Letzte Änderung als UNIX-Timestamp',
)
Expand Down Expand Up @@ -546,7 +547,7 @@ class PullMessageChannelData(BaseModel):
default_factory=tuple,
description='Reihenfolge',
)
ts: int | None = Field(
ts: datetime.datetime | None = Field(
default=None,
description='Letzte Änderung als UNIX-Timestamp',
)
Expand Down Expand Up @@ -575,7 +576,7 @@ class PullMessageData(BaseModel):
default=None,
description='Limit',
)
ts: int | None = Field(
ts: datetime.datetime | None = Field(
default=None,
description='Letzte Änderung als UNIX-Timestamp',
)
Expand All @@ -596,7 +597,7 @@ class PullData(BaseModel):
default=None,
description='ID der UserClusterRelation im aktuellen Request',
)
ts: int | None = Field(
ts: datetime.datetime | None = Field(
default=None,
description='Aktueller UNIX-Timestamp des Servers',
)
Expand Down Expand Up @@ -670,7 +671,7 @@ class VehicleStatusItem(BaseModel):
default=None,
description='Notiz/Freitext-Rückmeldung',
)
fmsstatus_ts: int | None = Field(default=None, description='UNIX-Timestamp')
fmsstatus_ts: datetime.datetime | None = Field(default=None, description='UNIX-Timestamp')
lat: float | None = Field(default=None, description='Breitengrad')
lng: float | None = Field(default=None, description='Längengrad')

Expand Down
4 changes: 3 additions & 1 deletion src/divera247/models/statusgeber.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@

from __future__ import annotations

import datetime # noqa: TC003

from pydantic import BaseModel, Field


Expand All @@ -20,7 +22,7 @@ class StatusgeberStatus(BaseModel):
default=None,
description='Freitext zur Statusmeldung',
)
reset_date: int | None = Field(
reset_date: datetime.datetime | None = Field(
default=None,
description='UNIX-Timestamp für Zurücksetzen',
)
Expand Down
Loading