Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Portic
porticapi
Commits
d53941e0
Commit
d53941e0
authored
Jul 16, 2020
by
Christine Plumejeaud
Browse files
date as param in API
parent
3db2b7ae
Changes
1
Hide whitespace changes
Inline
Side-by-side
porticapi/apidata.py
View file @
d53941e0
...
...
@@ -37,7 +37,7 @@ CORS(app)
#port = app.config['PORT']
port
=
'80'
postgresport
=
'5433'
database
=
'portic_v
4
'
database
=
'portic_v
5
'
def
retrieveDataFromPostgres
(
query
)
:
"""
...
...
@@ -140,7 +140,7 @@ def readFieldnames(api, schema='navigoviz') :
#API;name;shortname;type;description
query
=
"""SELECT case when c.table_name= 'built_travels' then 'travels' else 'pointcalls' end as API,
c.column_name as name,
case when c.table_name= 'built_travels' then 't' else 'p' end||navigo.pystrip(to_char(c.ordinal_position::int, '09')) as shortname,
case when c.table_name= 'built_travels' then 't' else 'p' end||navigo.pystrip(to_char(c.ordinal_position::int, '
0
09')) as shortname,
c.data_type as type, pgd.description as description
FROM information_schema.columns c
left outer join pg_catalog.pg_description pgd on (pgd.objsubid=c.ordinal_position )
...
...
@@ -185,9 +185,10 @@ def getPointcalls():
Return the pointcalls as specified in API
Will be extracted from postgres, schema navigoviz, table pointcall (see navigocorpus/ETL)
- params : **all** | tableau des noms longs des attributs de l'API à renvoyer
- date : 4 digits representing a year, to extract data for this given year only
http://127.0.0.1:80/api/pointcalls/?params=pointcall,pointcall_uhgs_id&shortenfields=true
http://127.0.0.1:80/api/pointcalls/?format=csv
http://127.0.0.1/api/pointcalls/?params=pointcall,pointcall_uhgs_id&date=1787&format=csv
http://127.0.0.1:80/api/pointcalls/?params=pointcall,pointcall_uhgs_id&shortenfields=false
http://127.0.0.1:80/api/pointcalls/?format=json¶ms=id,pointcall,ship_name,destination,destination_uhgs_id&shortenfields=true
...
...
@@ -224,6 +225,12 @@ def getPointcalls():
query
=
'select '
+
attributes
+
' from navigoviz.pointcall'
#dfcsv = dfcsv.loc[:, labels]
## filter following a date
date
=
request
.
args
.
get
(
"date"
)
if
(
date
is
not
None
and
len
(
date
)
==
4
)
:
query
=
query
+
""" where (substring(pointcall_out_date for 4) = '%s' or substring(pointcall_in_date for 4) = '%s') """
%
(
date
,
date
)
print
(
query
)
dfcsv
=
retrieveDataFromPostgres
(
query
)
return
formatOutput
(
dfcsv
,
'pointcalls'
)
...
...
@@ -241,7 +248,7 @@ def getTravels():
- both_to : true | **false**
http://127.0.0.1:5004/api/travels/?format=csv&both_to=false
http://127.0.0.1:80/api/travels/?format=csv&both_to=true&shortenfields=true
http://127.0.0.1:80/api/travels/?format=csv&both_to=true&shortenfields=true
&date=1789
http://127.0.0.1:80/api/travels/?format=json¶ms=id,departure,destination,destination_uhgs_id
http://127.0.0.1:80/api/travels/?format=json¶ms=id,departure,destination,destination_uhgs_id&shortenfields=true
...
...
@@ -275,7 +282,16 @@ def getTravels():
#print('filtering duplicates out of travels')
#dfcsv = dfcsv[dfcsv['source_entry']!='both-to']
query
=
query
+
" where source_entry <> 'both-to'"
## filter following a date
date
=
request
.
args
.
get
(
"date"
)
if
(
date
is
not
None
and
len
(
date
)
==
4
)
:
if
'where'
in
query
:
query
=
query
+
""" and (substring(departure_out_date for 4) = '%s' or substring(destination_in_date for 4) = '%s')"""
%
(
date
,
date
)
else
:
query
=
query
+
""" where (substring(departure_out_date for 4) = '%s' or substring(destination_in_date for 4) = '%s') """
%
(
date
,
date
)
print
(
query
)
dfcsv
=
retrieveDataFromPostgres
(
query
)
return
formatOutput
(
dfcsv
,
'travels'
)
...
...
@@ -290,7 +306,7 @@ def getDeparturesDetails():
Will be extracted from postgres, schema navigoviz, table built_travels (see navigocorpus/ETL),
but with a filter by default : only source_entry = from and both-from, to avoid duplicates
http://localhost:80/api/details/departures?lat=46&lon=-1&radius=100
http://localhost:80/api/details/departures?lat=46&lon=-1&radius=100
&date=1787
http://localhost/api/details/departures/?lat=45.2333&lon=-1.5&radius=100
http://localhost/api/details/departures/?lat=45.2333&lon=toto&radius=100
"""
...
...
@@ -318,6 +334,11 @@ def getDeparturesDetails():
#df1 = calcul_isInside(lat, lon, radius)
#dfcsv = df1[['departure','departure_uhgs_id','departure_latitude','departure_longitude']].drop_duplicates()
## filter following a date
date
=
request
.
args
.
get
(
"date"
)
if
(
date
is
not
None
and
len
(
date
)
==
4
)
:
query
=
query
+
""" AND (substring(departure_out_date for 4) = '%s' or substring(destination_in_date for 4) = '%s') """
%
(
date
,
date
)
#print(query)
dfcsv
=
retrieveDataFromPostgres
(
query
)
...
...
@@ -346,16 +367,23 @@ def getDeparturesAgg():
#df2 = calcul_isInside(lat, lon, radius).departure.value_counts().reset_index()
#df2.columns = ['departure', 'count']
## filter following a date
date
=
request
.
args
.
get
(
"date"
)
filterclause
=
""
if
(
date
is
not
None
and
len
(
date
)
==
4
)
:
filterclause
=
filterclause
+
""" and (substring(departure_out_date for 4) = '%s' or substring(destination_in_date for 4) = '%s') """
%
(
date
,
date
)
if
lat
!=
None
and
lon
!=
None
and
radius
!=
None
:
query
=
"""select departure, count(*) as count from navigoviz.built_travels
where source_entry<> 'both-to'
and
where source_entry<> 'both-to'
%s
st_distance(departure_point, st_setsrid(st_transform(st_setsrid(st_makepoint(%f, %f), 4326), 3857), 3857)) < %f
group by departure"""
%
(
lon
,
lat
,
radius
*
1000
)
group by departure"""
%
(
filterclause
,
lon
,
lat
,
radius
*
1000
)
else
:
query
=
"""select departure, count(*)
from navigoviz.built_travels
where source_entry<> 'both-to'
group by departure"""
where source_entry<> 'both-to'
%s
group by departure"""
%
(
filterclause
)
#print(query)
df2
=
retrieveDataFromPostgres
(
query
)
...
...
@@ -371,10 +399,18 @@ def getDestinationsAgg():
Will be extracted from postgres, schema navigoviz, table built_travels (see navigocorpus/ETL),
but with a filter by default : only source_entry = from and both-from, to avoid duplicates
http://localhost/api/agg/destinations/?lat=45.2333&lon=-1&radius=100
http://localhost/api/agg/destinations/?lat=45.2333&lon=-1&radius=100
&date=1789
"""
## filter following a date
date
=
request
.
args
.
get
(
"date"
)
filterclause
=
""
if
(
date
is
not
None
and
len
(
date
)
==
4
)
:
filterclause
=
filterclause
+
""" and (substring(departure_out_date for 4) = '%s' or substring(destination_in_date for 4) = '%s') """
%
(
date
,
date
)
lat
=
None
lon
=
None
radius
=
None
...
...
@@ -391,14 +427,14 @@ def getDestinationsAgg():
if
lat
!=
None
and
lon
!=
None
and
radius
!=
None
:
query
=
"""select destination_admiralty as label, count(*) as value from navigoviz.built_travels
where source_entry<> 'both-to'
where source_entry<> 'both-to'
%s
and st_distance(departure_point, st_setsrid(st_transform(st_setsrid(st_makepoint(%f, %f), 4326), 3857), 3857)) < %f
group by destination_admiralty"""
%
(
lon
,
lat
,
radius
*
1000
)
group by destination_admiralty"""
%
(
filterclause
,
lon
,
lat
,
radius
*
1000
)
else
:
query
=
"""select destination_admiralty as label, count(*) as value
from navigoviz.built_travels
where source_entry<> 'both-to'
group by destination_admiralty"""
where source_entry<> 'both-to'
%s
group by destination_admiralty"""
%
(
filterclause
)
#print(query)
df3
=
retrieveDataFromPostgres
(
query
)
df3
[
'id'
]
=
df3
[
'label'
]
...
...
@@ -422,6 +458,7 @@ def getFlows():
- params : **all** | tableau des noms longs des attributs de l'API à renvoyer
params=pointcall,pointcall_uhgs_id for instance
- both_to : true | **false**
- date : **1787** | yyyy (4 digits)
http://localhost:80/api/flows/?format=csv&both_to=false
http://localhost:80/api/flows/?format=csv&both_to=true&shortenfields=true
...
...
@@ -429,8 +466,11 @@ def getFlows():
http://localhost:80/api/flows/?format=json&ports=A0180923,A0152606&direction=In¶ms=travel_rank,ship_id,departure,destination,departure_action,destination_action,distance_dep_dest,travel_uncertainity
http://localhost:80/api/flows/?format=json&ports=A0180923,A0152606&direction=Out¶ms=travel_rank,ship_id,departure,destination,departure_action,destination_action,distance_dep_dest,travel_uncertainity
http://localhost/api/flows/?format=json&ports=A0180923&direction=In-out¶ms=id,departure,destination&shortenfields=true
http://localhost/api/flows/?format=json&ports=A0180923,A0152606&direction=Out&date=1787¶ms=travel_rank,ship_id,departure,destination,departure_action,destination_action,distance_dep_dest,travel_uncertainity
[{"t01":"0008663N- 05","t04":"Bordeaux","t19":"Bordeaux"},{"t01":"0009557N- 01","t04":"Bordeaux","t19":"Bordeaux"},{"t01":"0010656N- 01","t04":"Bordeaux","t19":"Bordeaux"}]
[{"t001":"0008663N- 05","t004":"Bordeaux","t020":"Bordeaux"},{"t001":"0010656N- 01","t004":"Bordeaux","t020":"Bordeaux"}]
http://localhost:80/api/flows/?format=json&ports=A0180923,A0152606&direction=No¶ms=travel_rank,ship_id,departure,destination,departure_action,destination_action,distance_dep_dest,travel_uncertainity
...
...
@@ -447,6 +487,7 @@ def getFlows():
attributes
=
'*'
filter_clause
=
'true'
## Filter the result according requested params
params
=
request
.
args
.
get
(
"params"
)
if
(
params
is
not
None
and
len
(
params
)
>
0
)
:
...
...
@@ -469,7 +510,16 @@ def getFlows():
#print('filtering duplicates out of travels')
#dfcsv = dfcsv[dfcsv['source_entry']!='both-to']
filter_clause
=
" source_entry <> 'both-to' "
## filter following a date
date
=
request
.
args
.
get
(
"date"
)
if
(
date
is
not
None
and
len
(
date
)
==
4
)
:
filter_clause
=
filter_clause
+
""" and (substring(departure_out_date for 4) = '%s' or substring(destination_in_date for 4) = '%s')"""
%
(
date
,
date
)
else
:
#By default, we return only 1787 flow data
filter_clause
=
filter_clause
+
""" and (substring(departure_out_date for 4) = '1787' or substring(destination_in_date for 4) = '1787')"""
query
=
'select '
+
attributes
+
' from navigoviz.built_travels '
+
filter_clause
## Filter the result according requested ports
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment