From 52b6acbcbfc6cab0cdd51e011249a106a1e1ce94 Mon Sep 17 00:00:00 2001 From: Sean Breckenridge Date: Fri, 3 Feb 2023 18:59:41 -0800 Subject: [PATCH] use protocol for locations --- my/location/common.py | 23 +++++++++++++++++------ my/location/fallback/common.py | 4 ++-- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/my/location/common.py b/my/location/common.py index 22f62ee..5b5c33f 100644 --- a/my/location/common.py +++ b/my/location/common.py @@ -3,18 +3,29 @@ from typing import Union, Tuple, Optional from dataclasses import dataclass from my.core import __NOT_HPI_MODULE__ +from my.core.compat import Protocol DateIsh = Union[datetime, date, str] LatLon = Tuple[float, float] -# TODO: add timezone to this? can use timezonefinder in tz provider instead though - -# converted from namedtuple to a dataclass so datasource field can be added optionally -# if we want, can eventually be converted back to a namedtuple when all datasources are compliant -@dataclass -class Location: +class LocationProtocol(Protocol): + lat: float + lon: float + dt: datetime + accuracy: Optional[float] + elevation: Optional[float] + datasource: Optional[str] = None # which module provided this, useful for debugging + + +# TODO: add timezone to this? can use timezonefinder in tz provider instead though + + +# converted from namedtuple to a dataclass so datasource field can be added optionally +# if we want, can eventually be converted back to a namedtuple when all datasources are compliant +@dataclass +class Location(LocationProtocol): lat: float lon: float dt: datetime diff --git a/my/location/fallback/common.py b/my/location/fallback/common.py index 536f0a5..49b9620 100644 --- a/my/location/fallback/common.py +++ b/my/location/fallback/common.py @@ -3,11 +3,11 @@ from dataclasses import dataclass from typing import Optional from datetime import datetime, timedelta -from ..common import Location +from ..common import LocationProtocol, Location @dataclass -class FallbackLocation: +class FallbackLocation(LocationProtocol): lat: float lon: float dt: datetime