22#
33# Authors: Tom Kralidis <tomkralidis@gmail.com>
44#
5- # Copyright (c) 2022 Tom Kralidis
5+ # Copyright (c) 2025 Tom Kralidis
66#
77# Permission is hereby granted, free of charge, to any person
88# obtaining a copy of this software and associated documentation
3232import itertools
3333import logging
3434
35- from pygeoapi .provider .base import (BaseProvider , ProviderQueryError ,
36- ProviderItemNotFoundError )
35+ from pygeoapi .provider .base import (BaseProvider , ProviderInvalidQueryError ,
36+ ProviderItemNotFoundError ,
37+ ProviderQueryError )
3738from pygeoapi .util import get_typed_value , crs_transform
3839
3940LOGGER = logging .getLogger (__name__ )
@@ -120,6 +121,12 @@ def _load(self, offset=0, limit=10, resulttype='results',
120121 LOGGER .debug ('Serializing DictReader' )
121122 data_ = csv .DictReader (ff )
122123 if properties :
124+ for prop in properties :
125+ if prop [0 ] not in data_ .fieldnames :
126+ msg = 'Invalid fieldname'
127+ LOGGER .error (msg )
128+ raise ProviderInvalidQueryError (msg )
129+
123130 data_ = filter (
124131 lambda p : all (
125132 [p [prop [0 ]] == prop [1 ] for prop in properties ]), data_ )
@@ -139,6 +146,7 @@ def _load(self, offset=0, limit=10, resulttype='results',
139146 msg = f'Skipping row with invalid geometry: { row .get (self .id_field )} ' # noqa
140147 LOGGER .error (msg )
141148 continue
149+
142150 feature = {'type' : 'Feature' }
143151 feature ['id' ] = row .pop (self .id_field )
144152 if not skip_geometry :
0 commit comments