Skip to content

Commit 5a4e2a0

Browse files
author
Evan Derickson
committed
Add date to api parameters
1 parent 603b7ec commit 5a4e2a0

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

overpass/api.py

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import csv
99
import geojson
1010
import logging
11+
from datetime import datetime
1112
from shapely.geometry import Polygon, Point
1213
from io import StringIO
1314
from .errors import (
@@ -42,8 +43,8 @@ class API(object):
4243
_debug = False
4344
_proxies = None
4445

45-
_QUERY_TEMPLATE = "[out:{out}];{query}out {verbosity};"
46-
_GEOJSON_QUERY_TEMPLATE = "[out:json];{query}out {verbosity};"
46+
_QUERY_TEMPLATE = "[out:{out}]{date};{query}out {verbosity};"
47+
_GEOJSON_QUERY_TEMPLATE = "[out:json]{date};{query}out {verbosity};"
4748

4849
def __init__(self, *args, **kwargs):
4950
self.endpoint = kwargs.get("endpoint", self._endpoint)
@@ -70,7 +71,7 @@ def __init__(self, *args, **kwargs):
7071
requests_log.setLevel(logging.DEBUG)
7172
requests_log.propagate = True
7273

73-
def get(self, query, responseformat="geojson", verbosity="body", build=True):
74+
def get(self, query, responseformat="geojson", verbosity="body", build=True, date=''):
7475
"""Pass in an Overpass query in Overpass QL.
7576
7677
:param query: the Overpass QL query to send to the endpoint
@@ -81,11 +82,17 @@ def get(self, query, responseformat="geojson", verbosity="body", build=True):
8182
"body geom qt"
8283
:param build: boolean to indicate whether to build the overpass query from a template (True)
8384
or allow the programmer to specify full query manually (False)
85+
:param date: a date with an optional time. Example: 2020-04-27 or 2020-04-27T00:00:00Z
8486
"""
87+
if date:
88+
try:
89+
date = datetime.strptime(date, '%Y-%m-%dT%H:%M:%SZ')
90+
except ValueError:
91+
date = datetime.strptime(date, '%Y-%m-%d')
8592
# Construct full Overpass query
8693
if build:
8794
full_query = self._construct_ql_query(
88-
query, responseformat=responseformat, verbosity=verbosity
95+
query, responseformat=responseformat, verbosity=verbosity, date=date
8996
)
9097
else:
9198
full_query = query
@@ -137,18 +144,22 @@ def search(self, feature_type, regex=False):
137144
Get = get
138145
Search = search
139146

140-
def _construct_ql_query(self, userquery, responseformat, verbosity):
147+
def _construct_ql_query(self, userquery, responseformat, verbosity, date):
141148
raw_query = str(userquery).rstrip()
142149
if not raw_query.endswith(";"):
143150
raw_query += ";"
144151

152+
if date:
153+
date = f'[date:"{date.strftime("%Y-%m-%dT%H:%M:%SZ")}"]'
154+
145155
if responseformat == "geojson":
146156
template = self._GEOJSON_QUERY_TEMPLATE
147-
complete_query = template.format(query=raw_query, verbosity=verbosity)
157+
complete_query = template.format(
158+
query=raw_query, verbosity=verbosity, date=date)
148159
else:
149160
template = self._QUERY_TEMPLATE
150161
complete_query = template.format(
151-
query=raw_query, out=responseformat, verbosity=verbosity
162+
query=raw_query, out=responseformat, verbosity=verbosity, date=date
152163
)
153164

154165
if self.debug:

0 commit comments

Comments
 (0)