Skip to content

Commit c2a8d02

Browse files
committed
Added a new end point that determines a road type according to lon and lat coordinates.
1 parent db4f803 commit c2a8d02

4 files changed

Lines changed: 84 additions & 2 deletions

File tree

anyway/flask_app.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@
8585
from anyway.views.news_flash.api import (
8686
news_flash,
8787
single_news_flash,
88+
get_road_type
8889
)
8990

9091
app.config.from_object(__name__)
@@ -1464,7 +1465,7 @@ def logout():
14641465
login.logout_user()
14651466
return redirect(url_for("index"))
14661467

1467-
1468+
#---------------------------------api------------------------------------------------------------
14681469
app.add_url_rule("/api/schools", endpoint=None, view_func=schools_api, methods=["GET"])
14691470
app.add_url_rule(
14701471
"/api/schools-description", endpoint=None, view_func=schools_description_api, methods=["GET"]
@@ -1499,7 +1500,9 @@ def logout():
14991500
)
15001501
app.add_url_rule("/api/news-flash", endpoint=None, view_func=news_flash, methods=["GET"])
15011502

1503+
app.add_url_rule("/api/road-type/<float:lat>/<float:lon>", endpoint=None, view_func=get_road_type, methods=["GET"])
15021504

1505+
#---------------------------------api------------------------------------------------------------
15031506
@app.route("/authorize/<provider>")
15041507
def oauth_authorize(provider):
15051508
if not current_user.is_anonymous:

anyway/models.py

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
TIMESTAMP,
2828
)
2929
import sqlalchemy
30+
import geoalchemy2
3031
from sqlalchemy.orm import relationship, load_only, backref
3132
from sqlalchemy import or_, and_
3233

@@ -791,6 +792,68 @@ def is_anonymous(self):
791792
def get_id(self):
792793
return self.id
793794

795+
class WazeAllerts(Base):
796+
__tablename__ = "waze_alerts"
797+
798+
alert_subtype = Column(BigInteger(), nullable=True)
799+
alert_type = Column(Text(), nullable=True)
800+
back_filled = Column(Boolean(), nullable = True)
801+
city = Column(Text(), nullable = True)
802+
confidence = Column(Integer(), nullable = True)
803+
created_at = Column(DateTime(), nullable = True)
804+
ended_at_estimate = Column(DateTime(), nullable = True)
805+
geom = Column(geoalchemy2.types.Geometry(geometry_type='LINESTRING', from_text='ST_GeomFromEWKT', name='geometry'), nullable=True)
806+
id = Column(BigInteger(), nullable=False,primary_key=True)
807+
jam_uuid = Column(Text(), nullable=True)
808+
latitude = Column(Float(), nullable=True)
809+
longitude = Column(Float(), nullable=True)
810+
magvar = Column(Integer(), nullable=True)
811+
number_thumbs_up = Column(Integer(), nullable=True)
812+
reliability = Column(Integer(), nullable=True)
813+
report_by_municipality_user = Column(Boolean(), nullable=True)
814+
report_description = Column(Text(), nullable=True)
815+
report_rating = Column()
816+
road_type = Column(Integer(), nullable=True)
817+
street = Column(Text(), nullable=True)
818+
uuid = Column(Text(), nullable=True)
819+
def serialize(self):
820+
return {
821+
"alert_subtype": self.alert_subtype,
822+
"alert_type": self.alert_type,
823+
"back_filled": self.back_filled,
824+
"city": self.city,
825+
"confidence": self.confidence,
826+
"created_at": self.created_at,
827+
"ended_at_estimate": self.ended_at_estimate,
828+
"geom": self.geom,
829+
"id": self.id,
830+
"jam_uuid": self.jam_uuid,
831+
"latitude": self.latitude,
832+
"longitude": self.longitude,
833+
"magvar": self.magvar,
834+
"number_thumbs_up": self.number_thumbs_up,
835+
"reliability": self.reliability,
836+
"report_by_municipality_user": self.report_by_municipality_user,
837+
"report_description": self.report_description,
838+
"report_rating": self.report_rating,
839+
"road_type": self.road_type,
840+
"street": self.street,
841+
"uuid": self.uuid
842+
}
843+
844+
# Flask-Login integration
845+
def is_authenticated(self):
846+
return True
847+
848+
def is_active(self):
849+
return True
850+
851+
def is_anonymous(self):
852+
return False
853+
854+
def get_id(self):
855+
return self.id
856+
794857

795858
class NewsFlash(Base):
796859
__tablename__ = "news_flash"
@@ -2069,6 +2132,7 @@ class InvolvedMarkerView(Base):
20692132

20702133
class WazeAlert(Base):
20712134
__tablename__ = "waze_alerts"
2135+
__table_args__ = {'extend_existing': True}
20722136

20732137
id = Column(BigInteger(), primary_key=True)
20742138
city = Column(Text())

anyway/views/news_flash/api.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
from anyway.backend_constants import BE_CONST
1010
from anyway.base import user_optional
1111
from anyway.models import NewsFlash
12+
from anyway.models import WazeAllerts
13+
1214

1315

1416
@user_optional
@@ -103,3 +105,16 @@ def single_news_flash(news_flash_id: int):
103105
json.dumps(news_flash_obj.serialize(), default=str), mimetype="application/json"
104106
)
105107
return Response(status=404)
108+
from sys import maxsize
109+
@user_optional
110+
def get_road_type(lat: float, lon: float):
111+
offset = 0.00001
112+
result = db.session.query(WazeAllerts).filter(
113+
and_(WazeAllerts.latitude <= lat + offset,
114+
WazeAllerts.latitude >= lat - offset,
115+
WazeAllerts.longitude <= lon + offset,
116+
WazeAllerts.longitude >= lon - offset)).first()
117+
118+
return Response(
119+
json.dumps(result.road_type, default=str), mimetype="application/json"
120+
)

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,4 @@ urllib3==1.25.9
4747
webassets==2.0
4848
xlrd==1.2.0
4949
lxml==4.5.1
50-
boto3==1.14.48
50+
boto3==1.14.48

0 commit comments

Comments
 (0)