Addition of time filtering to postgresql.py provider. (#1629)
* Addition of time filtering to postgresql.py provider. * Consistency update: single quotes + filter renamed to datetime_filter. * Update to datetime filter to use <= upper bound for consistency for CQL implementation.
This commit is contained in:
@@ -140,6 +140,7 @@ class PostgreSQLProvider(BaseProvider):
|
||||
property_filters = self._get_property_filters(properties)
|
||||
cql_filters = self._get_cql_filters(filterq)
|
||||
bbox_filter = self._get_bbox_filter(bbox)
|
||||
time_filter = self._get_datetime_filter(datetime_)
|
||||
order_by_clauses = self._get_order_by_clauses(sortby, self.table_model)
|
||||
selected_properties = self._select_properties_clause(select_properties,
|
||||
skip_geometry)
|
||||
@@ -151,6 +152,7 @@ class PostgreSQLProvider(BaseProvider):
|
||||
.filter(property_filters)
|
||||
.filter(cql_filters)
|
||||
.filter(bbox_filter)
|
||||
.filter(time_filter)
|
||||
.options(selected_properties))
|
||||
|
||||
matched = results.count()
|
||||
@@ -455,6 +457,29 @@ class PostgreSQLProvider(BaseProvider):
|
||||
|
||||
return bbox_filter
|
||||
|
||||
def _get_datetime_filter(self, datetime_):
|
||||
if datetime_ in (None, '../..'):
|
||||
return True
|
||||
else:
|
||||
if self.time_field is None:
|
||||
LOGGER.error('time_field not enabled for collection')
|
||||
raise ProviderQueryError()
|
||||
|
||||
time_column = getattr(self.table_model, self.time_field)
|
||||
|
||||
if '/' in datetime_: # envelope
|
||||
LOGGER.debug('detected time range')
|
||||
time_begin, time_end = datetime_.split('/')
|
||||
if time_begin == '..':
|
||||
datetime_filter = time_column <= time_end
|
||||
elif time_end == '..':
|
||||
datetime_filter = time_column >= time_begin
|
||||
else:
|
||||
datetime_filter = time_column.between(time_begin, time_end)
|
||||
else:
|
||||
datetime_filter = time_column == datetime_
|
||||
return datetime_filter
|
||||
|
||||
def _select_properties_clause(self, select_properties, skip_geometry):
|
||||
# List the column names that we want
|
||||
if select_properties:
|
||||
|
||||
Reference in New Issue
Block a user