-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathservice.py
72 lines (57 loc) · 1.98 KB
/
service.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/usr/bin/env python3
from datetime import datetime
from urllib.parse import unquote
import geolocator as locator
from settings import debug
from db import Session
from db import Location
def loc2csv(loc):
return "%.2f,%.2f" % (getattr(loc, "latitude"), getattr(loc, "longitude"))
def to_csv(model):
""" Returns a CSV representation of an SQLAlchemy-backed object.
"""
if not model:
return ""
if isinstance(model, list):
return "\n".join([next.name + ", " + loc2csv(next) for next in model])
else:
return loc2csv(model)
def query_location(name=None, latitude=None, longitude=None):
location = None
session = Session(expire_on_commit=False)
if name is not None and len(name) > 0:
name = unquote(name)
location = session.query(Location).filter(Location.name.like(name)).first()
if (
latitude is not None
and len(latitude) > 0
and longitude is not None
and len(longitude) > 0
):
if location is None:
# print('create')
location = Location(
name=name.upper(), latitude=latitude, longitude=longitude
)
session.add(location)
else:
# print('update')
location.latitude = latitude
location.longitude = longitude
location.lastseen = datetime.now()
session.commit()
else: # not on our database
if location is None:
# print('import')
rloc = locator.geocode(name)
location = Location(
name=name.upper(), latitude=rloc.latitude, longitude=rloc.longitude
)
session.add(location)
session.commit()
else:
location = session.query(Location).order_by(Location.name.asc()).all()
session.close()
return to_csv(location)
if __name__ == "__main__":
pass