location: add all.py, using takeout/gpslogger/ip
This commit is contained in:
parent
66a00c6ada
commit
ca10d524a4
12 changed files with 357 additions and 27 deletions
39
my/ip/common.py
Normal file
39
my/ip/common.py
Normal file
|
@ -0,0 +1,39 @@
|
|||
"""
|
||||
Provides location/timezone data from IP addresses, using [[https://github.com/seanbreckenridge/ipgeocache][ipgeocache]]
|
||||
"""
|
||||
|
||||
REQUIRES = ["git+https://github.com/seanbreckenridge/ipgeocache"]
|
||||
|
||||
from my.core import __NOT_HPI_MODULE__
|
||||
|
||||
import ipaddress
|
||||
from typing import NamedTuple, Iterator
|
||||
from datetime import datetime
|
||||
|
||||
import ipgeocache
|
||||
|
||||
from my.core import Json
|
||||
|
||||
|
||||
class IP(NamedTuple):
|
||||
dt: datetime
|
||||
addr: str # an IP address
|
||||
|
||||
# TODO: could cache? not sure if it's worth it
|
||||
def ipgeocache(self) -> Json:
|
||||
return ipgeocache.get(self.addr)
|
||||
|
||||
@property
|
||||
def tz(self) -> str:
|
||||
tz: str = self.ipgeocache()["timezone"]
|
||||
return tz
|
||||
|
||||
|
||||
def drop_private(ips: Iterator[IP]) -> Iterator[IP]:
|
||||
"""
|
||||
Helper function that can be used to filter out private IPs
|
||||
"""
|
||||
for ip in ips:
|
||||
if ipaddress.ip_address(ip.addr).is_private:
|
||||
continue
|
||||
yield ip
|
Loading…
Add table
Add a link
Reference in a new issue