39 lines
864 B
Python
39 lines
864 B
Python
"""
|
|
Converts IP addresses provided by my.location.ip to estimated locations
|
|
"""
|
|
|
|
REQUIRES = ["git+https://github.com/seanbreckenridge/ipgeocache"]
|
|
|
|
from my.core import dataclass, Stats
|
|
from my.config import location
|
|
|
|
|
|
@dataclass
|
|
class config(location.via_ip):
|
|
# no real science to this, just a guess of ~15km accuracy for IP addresses
|
|
accuracy: float = 15_000.0
|
|
|
|
|
|
from typing import Iterator
|
|
|
|
from .common import Location
|
|
from my.ip.all import ips
|
|
|
|
|
|
def locations() -> Iterator[Location]:
|
|
for ip in ips():
|
|
loc: str = ip.ipgeocache()["loc"]
|
|
lat, _, lon = loc.partition(",")
|
|
yield Location(
|
|
lat=float(lat),
|
|
lon=float(lon),
|
|
dt=ip.dt,
|
|
accuracy=config.accuracy,
|
|
elevation=None,
|
|
)
|
|
|
|
|
|
def stats() -> Stats:
|
|
from my.core import stat
|
|
|
|
return {**stat(locations)}
|