This commit is contained in:
Dima Gerasimov 2018-08-30 13:37:52 +01:00
parent f0b748804e
commit 2e0e8ef82a
3 changed files with 75 additions and 3 deletions

View file

@ -1,7 +1,66 @@
from typing import NamedTuple, Iterator, List, Iterable
from datetime import datetime
import logging import logging
import csv
import geopy.distance # type: ignore
def get_logger(): def get_logger():
return logging.getLogger("location") return logging.getLogger("location")
PATH = "/L/data/location/location.csv"
CACHE_PATH = "/L/.cache/location.cache"
# TODO need to cache? # TODO need to cache?
# TODO tag??
Tag = str
class Location(NamedTuple):
dt: datetime
lat: float
lon: float
tag: Tag
def tagger(dt: datetime, lat: float, lon: float) -> Tag:
TAGS = [
# removed
]
for coord, dist, tag in TAGS:
if geopy.distance.distance(coord, (lat, lon)).m < dist:
return tag
else:
return "other"
def iter_locations() -> Iterator[Location]:
with open(PATH) as fo:
reader = csv.reader(fo)
next(reader) # skip header
for ll in reader:
[ts, lats, lons] = ll
# TODO hmm, is it local??
dt = datetime.strptime(ts, "%Y-%m-%d %H:%M:%S")
lat = float(lats)
lon = float(lons)
tag = tagger(dt, lat, lon)
yield Location(
dt=dt,
lat=lat,
lon=lon,
tag=tag
)
def get_locations(cached: bool=False) -> Iterable[Location]:
import dill # type: ignore
if cached:
with open(CACHE_PATH, 'rb') as fo:
preph = dill.load(fo)
return [Location(**p._asdict()) for p in preph] # meh. but otherwise it's not serialising methods...
else:
return list(iter_locations())
def update_cache():
import dill # type: ignore
datas = get_locations(cached=False)
with open(CACHE_PATH, 'wb') as fo:
dill.dump(datas, fo)

View file

@ -1,4 +1,4 @@
from location import get_logger from location import get_logger, get_locations, iter_locations
logger = get_logger() logger = get_logger()
@ -6,5 +6,18 @@ from kython.logging import setup_logzero
setup_logzero(logger) setup_logzero(logger)
import sys
if len(sys.argv) > 1:
cmd = sys.argv[1]
if cmd == "update_cache":
from location import update_cache, get_locations
update_cache()
get_locations(cached=True)
else:
raise RuntimeError(f"Unknown command {cmd}")
else:
for p in iter_locations():
pass
# TODO need datetime!
# print(p)

View file

@ -3,5 +3,5 @@ set -eu
cd "$(dirname "$0")" cd "$(dirname "$0")"
python3 -m photos update_cache python3 -m location update_cache