Skip to content

Commit 219e4cc

Browse files
Do not remove id_field from properties (#2100)
* don't remove id property * Preserve id_field col in properties * Fix tests to include id_field in properties * Fix flake8 * Fix tests --------- Co-authored-by: Benjamin Webb <benjamin.miller.webb@gmail.com>
1 parent 02081fb commit 219e4cc

File tree

12 files changed

+19
-21
lines changed

12 files changed

+19
-21
lines changed

pygeoapi/provider/csv_.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ def _load(self, offset=0, limit=10, resulttype='results',
159159
coordinates = None
160160

161161
feature = {'type': 'Feature'}
162-
feature['id'] = row.pop(self.id_field)
162+
feature['id'] = row[self.id_field]
163163
if not skip_geometry:
164164
feature['geometry'] = {
165165
'type': 'Point',

pygeoapi/provider/oracle.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1070,7 +1070,7 @@ def _response_feature(self, row_data):
10701070
for (key, value) in row_data.items()
10711071
if key != "GEOMETRY"
10721072
}
1073-
feature["id"] = feature["properties"].pop(self.id_field)
1073+
feature["id"] = feature["properties"][self.id_field]
10741074

10751075
return feature
10761076
else:

pygeoapi/provider/sensorthings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ def _make_feature(self, feature, select_properties=[], skip_geometry=False,
305305
306306
:returns: dict of GeoJSON Feature
307307
"""
308-
_ = feature.pop(self.id_field)
308+
_ = feature[self.id_field]
309309
id = f"'{_}'" if isinstance(_, str) else str(_)
310310
f = {
311311
'type': 'Feature', 'id': id, 'properties': {}, 'geometry': None

pygeoapi/provider/socrata.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ def query(self, offset=0, limit=10, resulttype='results',
138138
params['limit'] = limit
139139

140140
def make_feature(f):
141-
f['id'] = f['properties'].pop(self.id_field)
141+
f['id'] = f['properties'][self.id_field]
142142
if skip_geometry:
143143
f['geometry'] = None
144144
return f
@@ -178,7 +178,7 @@ def get(self, identifier, **kwargs):
178178
LOGGER.debug('Sending query')
179179
fc = self.client.get(self.resource_id, **params)
180180
f = fc.get('features').pop()
181-
f['id'] = f['properties'].pop(self.id_field)
181+
f['id'] = f['properties'][self.id_field]
182182
return f
183183

184184
def _make_fields(self, select_properties=[]):

pygeoapi/provider/sql.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -487,8 +487,6 @@ def _sqlalchemy_to_feature(self, item, crs_transform_out=None,
487487
if key in item_dict:
488488
feature['properties'][key] = item_dict[key]
489489

490-
feature['properties'].pop(self.id_field, None)
491-
492490
return feature
493491

494492
def _feature_to_sqlalchemy(self, json_data, identifier=None):

pygeoapi/provider/sqlite.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ def __response_feature(self, row_data, skip_geometry=False):
162162
LOGGER.warning('Missing geometry')
163163

164164
feature['properties'] = rd
165-
feature['id'] = feature['properties'].pop(self.id_field)
165+
feature['id'] = feature['properties'][self.id_field]
166166

167167
return feature
168168
else:

tests/provider/test_csv__provider.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ def test_query(config):
112112
assert len(results['features']) == 1
113113
assert results['features'][0]['id'] == '238'
114114

115-
assert len(results['features'][0]['properties']) == 3
115+
assert len(results['features'][0]['properties']) == 4
116116

117117
results = p.query(select_properties=['value'])
118118
assert len(results['features'][0]['properties']) == 1

tests/provider/test_oracle_provider.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -621,8 +621,7 @@ def test_query_can_mandate_properties_which_are_not_returned(config):
621621
result = p.query(properties=[("name", "Aral Sea")])
622622

623623
(feature,) = result['features']
624-
# id is handled separately, so only wiki link and not name must be here
625-
assert feature['properties'].keys() == {"wiki_link"}
624+
assert feature['properties'].keys() == {"id", "wiki_link"}
626625

627626

628627
def test_query_mandatory_properties_must_be_specified(config):

tests/provider/test_postgresql_provider.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,8 @@ def test_query(config):
172172
assert properties is not None
173173

174174
properties_order = [
175-
'name', 'waterway', 'covered', 'width', 'depth', 'layer', 'blockage',
176-
'tunnel', 'natural', 'water', 'z_index'
175+
'osm_id', 'name', 'waterway', 'covered', 'width', 'depth', 'layer',
176+
'blockage', 'tunnel', 'natural', 'water', 'z_index'
177177
]
178178

179179
assert list(properties.keys()) == properties_order
@@ -239,6 +239,7 @@ def test_query_with_config_properties(config):
239239
"""
240240
properties_subset = ['name', 'waterway', 'width', 'does_not_exist']
241241
config.update({'properties': properties_subset})
242+
properties_subset.append('osm_id') # id_field is always included
242243
provider = PostgreSQLProvider(config)
243244
assert provider.properties == properties_subset
244245
result = provider.query()

tests/provider/test_sensorthings_provider.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ def test_query_datastreams(config):
9191
assert len(results['features']) == 1
9292
assert results['features'][0]['id'] == '3'
9393

94-
assert len(results['features'][0]['properties']) == 18
94+
assert len(results['features'][0]['properties']) == 19
9595

9696
results = p.query(bbox=[-109, 36, -106, 37])
9797
assert results['numberReturned'] == 8

0 commit comments

Comments
 (0)