OGR: sanitize attribute filter values#2391
Merged
Merged
Conversation
kalxas
approved these changes
Jul 14, 2026
tomkralidis
added a commit
that referenced
this pull request
Jul 14, 2026
glennlaughlin
added a commit
to glennlaughlin/pygeoapi
that referenced
this pull request
Jul 22, 2026
* Add SensorThings API EDR Provider (geopython#1928) * Port SensorthingsEDR provider * Fix flake8 * Respond to PR feedback * Implement PR feedback * Remove noqa lines Formate STA EDR provider such that it does not require #noqa to pass CI * Fix CoverageJSON capitalization * Fix pygeofilter reprojection tests (geopython#1940) * Fix reprojection geom * Update test_util.py * Add hot-reload option to docker entrypoint (geopython#1880) * Add hot-reload to entrypoint * Move gunicorn exec to bash function * Create WSGI_APP for gunicorn entrypoint Create WSGI_APP for gunicorn entrypoint with default value of `pygeoapi.flask_app:APP` * Respond to PR feedback * update Docker image links in docs (geopython#1944) * prevent HTML templating override persistence (geopython#1943) * prevent HTML templating override persistence * use self.tpl_config * Fix starlette get_admin (geopython#1946) * Fix Flask Admin with API rules (geopython#1945) * fix `KeyError: 'updated'` when jobs are started but haven't been updated yet (geopython#1947) [2025-02-28T12:42:14Z] {/usr/local/lib/python3.10/dist-packages/flask/app.py:875} ERROR - Exception on /jobs [GET] Traceback (most recent call last): File "/usr/local/lib/python3.10/dist-packages/flask/app.py", line 1511, in wsgi_app response = self.full_dispatch_request() File "/usr/local/lib/python3.10/dist-packages/flask/app.py", line 919, in full_dispatch_request rv = self.handle_user_exception(e) File "/usr/local/lib/python3.10/dist-packages/flask_cors/extension.py", line 194, in wrapped_function return cors_after_request(app.make_response(f(*args, **kwargs))) File "/usr/local/lib/python3.10/dist-packages/flask/app.py", line 917, in full_dispatch_request rv = self.dispatch_request() File "/usr/local/lib/python3.10/dist-packages/flask/app.py", line 902, in dispatch_request return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return] File "/pygeoapi/pygeoapi/flask_app.py", line 425, in get_jobs return execute_from_flask(processes_api.get_jobs, request) File "/pygeoapi/pygeoapi/flask_app.py", line 148, in execute_from_flask headers, status, content = api_function(actual_api, api_request, *args) File "/pygeoapi/pygeoapi/api/processes.py", line 314, in get_jobs 'updated': job_['updated'] KeyError: 'updated' * - filtering collections by provider to create a fcm['tile'] that can be passed to Jinja (geopython#1950) - showing the TMS endpoints on the landing page, only when fcm['tile'] exists * Gracefully catch tile not found (geopython#1937) * Gracefully catch tile not found * Fix flake8 * Allow storage projections other than 4326 for Postgres Provider (geopython#1953) * Update postgresql.py * fix lint * Directly render EDR JSON in HTML (geopython#1955) * - gracefully catch missing tiles in wmts facade (geopython#1960) * Support GeoJSON-LD templating (geopython#1927) * Support JSON-LD template for items * Create `item_list.jsonld` template Create `item_list.jsonld` template to backport current /items json-ld content offerings * Reduce number of times templated geojsonld is serialized * Add test for linked_data.py * Use json serializer in test * Run test in CI * Add test for single item * Use single quotes * Fix flake8 * Use collection level template for GeoJSON-LD * Un-nest JSON-LD context from resource config * Respond to PR feedback * Update test_linked_data.py * Revert "Un-nest JSON-LD context from resource config" This reverts commit 5b371b2. * Update documentation * Include JSON-LD documents in manifest (geopython#1963) * Update openapi.py (geopython#1966) * Update openapi.py * fix indentation * fix flake * Fix 'type' member of the rel=http://www.opengis.net/def/rel/ogc/1.0/schema link (geopython#1968) According to Requirement 17 /req/returnables-and-receivables/op of OGC API Features Part 5, the media type shall be application/schema+json. * Fix conformance class URIs (geopython#1967) * Fix conformance class URIs Fix them to match table 2 of https://docs.ogc.org/is/17-069r4/17-069r4.html ( http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/oas30) and https://github.com/opengeospatial/ogcapi-features/blob/master/extensions/schemas/standard/clause_2_conformance.adoc (http://www.opengis.net/spec/{standard}/{m_n}/conf/core-roles-features) * Update itemtypes.py --------- Co-authored-by: Tom Kralidis <tomkralidis@gmail.com> * explicitly define init of BaseProvider (geopython#1972) XarrayEDRProvider was initializing XarrayProvider twice- once through the BaseEDRProvider due to MRO and once explicitly. this slowed down the initialization since the XarrayProvider was called twice (which causes all datasets to be lazy loaded twice). * handle PostgreSQL JSON types as JSON Schema objects (geopython#1975) * fix schema geometry definition (geopython#1938) (geopython#1976) * fix schema geometry definition (geopython#1938) * fix test * Return 204 for tiles that are within the tile matrix set limits (geopython#1959) * update release version * back to dev * Add missing parameters to BaseEDR docstring (geopython#1983) * Update copyright's year and fix spaces * Update pydantic syntax to v2 * Update missing copyright lines * Clean up spaces, tabs and indentations * Clean feature properties regarding resource setting for OGR provider (geopython#1986) * add support for feature/record domain queries (geopython#1988) * add support for feature/record domain queries * update parameter values based on OGC discussion * add ES test * OAProc: add Prefer header to OpenAPI document * fix WKT in test * Correct MVT tile indices when fetching tiles from providers + fix tile indices in MVT UI preview (geopython#1989) * Corrected tile indices in `MVTElasticProvider` when fetching tiles from Elastic - Elastic by default serves vector tiles in the `/z/x/y` index order * Correct tile indices in `MVTProxyProvider` when fetching tiles from the proxied Martin/pg_tileserv server - Both Martin and pg_tileserv by default serve tiles in the `/z/x/y` index order * Correct tile indices in `MVTTippecanoeProvider` when fetching tiles generated by Tippecanoe - Tippecanoe generates tiles in `z/x/y` index directory order * Fix incorrect tile index order in MVT tile HTML preview The wrong index order in the preview + using `/{z}/{y}/{x}` when fetching tiles from existing MVT providers made tiles visible on the pygeoapi UI, but external clients needed to use `/{z}/{x}/{y}` to fetch tiles, which is contrary to the OGC Tiles specification of `/{z}/{y}/{x}` This commit along with commits 5b8b179, 3f35fd3, c24cf56 fixes the issue * use mimetype instead of format_type in response header * Update OGC Features documentation - remove note about EPSG:4326 requirement for PostgreSQL provider - Related to PR geopython#1953, this just updates the documentation * Don't generate paging links if provider created them (geopython#1982) * Don't generate paging links if provider created them * Update itemtypes.py --------- Co-authored-by: Benjamin Webb <benjamin.miller.webb@gmail.com> * update CoverageJSON compliance (geopython#2012) * CoverageJSON: update compliance * remove extra None check * Add provider for MVT tile generation from Postgres (geopython#1979) * Initial commit for adding MVT Postgres provider - `/tiles` and `/tiles/{TMS}` APIs are working * Added get_tile method for MVT-postgres for on-the-fly tile generation - Supports properties - Supports both WebMercatorQuad, WorldCRS84Quad Co-authored-by: PRAJWAL S <praju18299@gmail.com> Co-authored-by: Tanvi Prasad <tanvi.prasad@datakaveri.org> * Added documentation for the MVTPostgresProvider class * Updates to MVT postgres provider - Fixed flake8 issues - Corrected tile indices in `ST_TileEnvelope` - Previous indices worked when tile URL was `/z/x/y`. Current ones work for `/z/y/x`, which is OGC-compliant - Used `ST_CurveToLine` when querying for features during tile generation to potentially speed up queries - Martin also uses it (https://maplibre.org/martin/sources-pg-functions.html#simple-function) - Used EWKT representation of `ST_MakeEnvelope(-180,-90,180,90,4326)` for WorldCRS84Quad tiles * Fix flake8 issues in `base_mvt.py` * Fix MVT-postgres documentation - fix example config * Changed name of MVT-postgres plugin to MVT-postgresql - Updated all necessary files to change postgres -> postgresql related to the plugin - Updated documentation - Added authors to plugin file and organized imports * MVT-postgresql : Add check if the indices are not in limits of the TMS, return ProviderTileNotFound error - Otherwise error was thrown from PostgreSQL `ST_MakeTileEnvelope` function * Fix flake8 errors --------- Co-authored-by: PRAJWAL S <praju18299@gmail.com> Co-authored-by: Tanvi Prasad <tanvi.prasad@datakaveri.org> * Add tests to BaseProvider class (geopython#2024) * Add tests to the base provider class * Fix flake8 * fix: use spec conform storage crs notation (geopython#2021) * typo (geopython#2034) * Allow unset crs (geopython#2031) * allow unset crs in the spirit of the comment on the above line https://github.com/geopython/pygeoapi/blob/75f87393365b17245d8dd6ba88196636f922b445/pygeoapi/provider/parquet.py#L127 , allow 'crs' to be unset and set default. * set the correct default CRS per the geoparquet standard * add test for parquet file with no crs in metadata * Update HTML templates to new limits structure (geopython#2036) * update OpenAPI document with configured collection limits (geopython#2037) * update OpenAPI document with configured collection limits * update OpenAPI document with configured collection limits * MySQL OAF provider (geopython#2004) * Mysql Provider (geopython#6) - mysql provider and associated tests - refactor postgres and mysql to use a shared base class that they both inherit from - handle geometry / encoding necessary to use mysql wity sqlalchemy --------- Co-authored-by: Benjamin Webb <40066515+webb-ben@users.noreply.github.com> * keep postgis instructions * Apply suggestions from code review Co-authored-by: Benjamin Webb <40066515+webb-ben@users.noreply.github.com> * Update pygeoapi/provider/sql.py Co-authored-by: Benjamin Webb <40066515+webb-ben@users.noreply.github.com> * Update pygeoapi/provider/sql.py Co-authored-by: Benjamin Webb <40066515+webb-ben@users.noreply.github.com> * Fix MVT_postgres import * Set default port for Postgres and MySQL provider * Add MySQL documentation * Fix typo --------- Co-authored-by: Benjamin Webb <40066515+webb-ben@users.noreply.github.com> Co-authored-by: Benjamin Webb <benjamin.miller.webb@gmail.com> * Pre-pull docker images in CI (geopython#2035) Pre-pull docker images in CI Update main.yml * add support for custom logo/icon to default HTML (geopython#2038) * fix ref for icon/logo (geopython#2039) * Fix bbox crs for OAMaps (geopython#1999) * Fix bbox crs for wms_face - project the bbox in the API code, not the provider - add tests * fix flake8 (geopython#4) * fix quote syntax for old python versions to pass flake8 * Small stylistic changes --------- Co-authored-by: Benjamin Webb <benjamin.miller.webb@gmail.com> * Pydantic v1/2 compatibility (geopython#2014) * Update pydantic v1/2 compatibility * Fix flake8 and code styling * Handle Pydantic v1/v2 compatibility in openapi.py * OARec: update TinyDB record generator and sample data (geopython#2043) * OARec: update TinyDB record generator and sample data * nit: `pre-commit run --all-files` result (geopython#2044) * Added note about setuptools on the install section of the documentation (geopython#2041) * - Added note about setuptools on the install documentation * - updated instructions of setuptools to include external references * - small tweaks * add support to provider z_field for EDR queries with vertical level (geopython#2046) * Docs update to reflect other environmental variables available in the docker image (geopython#2047) * - Added information about other environmental variables that are available in the docker image * - added missing backticks * - capitalised Gunicorn and put link on the first reference. * - fixed backticks - added backticks to 4 --------- Co-authored-by: doublebyte1 <info@doublebyte.net> * Implement native SQL Alchemy MVT (geopython#2022) * Implement SQLAlchemy native MVT query Fix typo Rename base tile provider Fix Tile HTML highlighting Fix missing tile rename Update CRS conversion Change fallback for vector tile id Undo rename tile provider Reduce diff Cleanup mvt-postgres provider Re-add ST_CurveToLine geopython@97ba024 * Add ST_CurveToLine for output geom * Set id field for vector files * Add MVT Postgres Provider test Fix Flake8 * Fix indentation in MVT-Postgres docs * Fix get_metadata() - Fix get_metadata function - Add unit test for get_metadata * Fix MVT feature properties - Fix MVT field selection - Add test for vector tile properties * Fix flake8 * Add storage_crs information to docs * Add test_postgresql_mvt_provider to GitHub CI * Bump GitHub Action Postgis version Bump GitHub Postgis engine to >3 * Filter SQL connection options Prevent passing dict to SQL connection which throws an error because it cannot be cached * Use geoalchemy2 functions * Amend WorldCRS84Quad Tile bbox Align with WorldCRS84Quad spec using geopython#2042 * Support WorldCRS84Quad in default tile html Add minimal support stretching EPSG3857 TileLayer to EPSG4326. Really should be a CRS84 based layer like: L.tileLayer.wms("https://gibs.earthdata.nasa.gov/wms/epsg4326/best/wms.cgi", { layers: "BlueMarble_ShadedRelief_Bathymetry", attribution: "NASA GIBS", }) .addTo(map); * Fix PostgreSQL bbox query (geopython#2051) * Add test for PostgreSQL bbox * Fix PostgreSQL bbox query Prefer using `ST_Intersects` and specify the storage_crs when creating a SQL envelope * Do not share query_types between subclasses of BaseEDRProvider (geopython#2049) * Add test for shared edr query_type inheritance * Fix test_load_and_prepare_item_missing_geojson_parts * Auto-register subclasses EDR query types - Automatically register EDR query types - Ensure subclasses of `BaseEDRProvider` does not share query_types between instances of its subclass * update contributor guidelines and dev docs (geopython#2032) (geopython#2052) * update contributor guidelines (geopython#2032) * fix PR comments * fix typo * Proper handling of query parameter q with multiple search terms for TinyDB provider. (geopython#2053) * fix format (geopython#2057) * add bbox support for CSV and GeoJSON feature providers (geopython#2058) * add bbox support for CSV and GeoJSON providers * update API tests * updates based on OAFeat Req 24C * OARec: update ES q= support per Req 27 (geopython#2059) * Pydantic v1/2 compatibility for provider models (geopython#2056) * Pydantic v1/2 compatibility for provier models cc: @doublebyte1 * Update mvt.py * Update base.py --------- Co-authored-by: Tom Kralidis <tomkralidis@gmail.com> * safeguard shapely geometry (geopython#2061) * safeguard shapely geometry * safeguard * Implement q priority of request headers (geopython#1952) * Implement q priority sorting of requests * Update l10n.py Co-authored-by: Sander Schaminee <sander.schaminee@geocat.net> --------- Co-authored-by: Sander Schaminee <sander.schaminee@geocat.net> * Change default language to string, not list (geopython#2062) * docs: provider updates (geopython#2063) * check if time data is iterable, make list if not (geopython#2064) * ensure language .mo files are compiled in Docker image (geopython#2065) * Handle exceeding the limit gracefully (geopython#2067) * feat: Handle exceeding the limit gracefully Will now return a 400 to the user with info what the limit was that caused the error. * fix: fix test for evaluate_limit --------- Co-authored-by: Matt Aschmann <maschmann@igsftr116lwmas2.gs.doi.net> * Fix NaN values for JSON output (geopython#2068) * OATiles: remove popup and id_field (geopython#2066) * OATiles: remove popup for HTML templating and id_field * keep id_field in docs * make support for features/records extra query parameters configurable (geopython#2071) * make features/records extra query parameters configurable * remove debugging statement * set max_items for CITE demo * remove print statement * adjust comment * Update docker image to latest Ubuntu Jammy (geopython#2072) * update release version * back to dev * fix typo (geopython#2073) Co-authored-by: lindakladivova <l.kladivova@seznam.cz> * Documentation for extra_params for the oracle provider. (geopython#2075) * Added documentation for extra_params within the oracle provider * Referenced the necessity of include_extra_query_parameters true for the functioning of extra_params * Update ogcapi-features.rst --------- Co-authored-by: Tom Kralidis <tomkralidis@gmail.com> * EDR: safeguard typing on z query parameter (geopython#2076) * EDR: safeguard typing on z query parameter * fix ref * - moved function that checks the limits of the TMS to the base tile provider (geopython#2082) - check limits of TMS in wmts provider * add annotated example of process metadata (geopython#2081) (geopython#2084) * Ensure tile is within configured zoom (geopython#2083) * Ensure tile is within configured zoom * Clarify log message on invalid x/y/z value * Fix flake8 * Update test_postgresql_mvt_provider.py * Fix flake8 * move admin API tests into test/api (geopython#2086) * move admin API tests into test/api * move admin.py * Externalizing tilematrixsets to resources/tilematrixsets dir (geopython#2077) * externalizing tilematrixsets to resources/tilematrixsets dir * update tiles test - the number of matrices is different for OGC registry * suggestions from review applied --------- Co-authored-by: lindakladivova <l.kladivova@seznam.cz> * maintain order of PostgreSQL table columns (geopython#2078) (geopython#2085) * maintain order of PostgreSQL table columns (geopython#2078) * alias item dict, add docstring * Fix multiple SQL schema paths (geopython#2089) * Test for multiple schemas in search path * Search multiple schemas * Fix flake8 * housekeeping (tests, docs) (geopython#2091) * housekeeping (tests, docs) * fix ref * enable custom tile matrix sets (geopython#2074) (geopython#2092) * leverage custom tiling schemes in MVT tile providers * use tile schemes if exists * fix ref, docstrings/comments (thanks @lindakarlovska) * fix doc ref * First version of pt_BR translation, as described in docs (geopython#2087) * Make PyGeoAPI to run rootless (Tested in Openshift) (geopython#2088) * Allowed to modify PYGEOAPI_CONFIG and PYGEOAPI_OPENAPI envs on container start. * commented chmod command. This is useless on rootless container and could be switched back on root * Update entrypoint.sh Add condition to chmod python files when running pygeoapi as root * update docker env var information (geopython#2093) * Fix additional context inclusion (geopython#2095) * Update test_linked_data.py * Update linked_data.py * - added a paragraph about the pygeoapi HTML encoding on the template section of the documentation (geopython#2097) Co-authored-by: doublebyte1 <info@doublebyte.net> * Raise ProviderTileNotFoundError instead of returning (geopython#2101) * Raise provider error Fix typo that returned ProviderTileNotFoundError instead of raising it * Fix tests * Add support for CORS with Django (geopython#2090) * Add support for CORS with Django * Update settings.py per https://pypi.org/project/django-cors-headers/ * Do not remove id_field from properties (geopython#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> * OAProc: return statusInfo object on async (geopython#2105) (geopython#2106) * OAProc: return statusInfo object on async (geopython#2105) * fix ref * Make sure 204 status responses have no body in accordance with HTTP spec (geopython#2094) * Fix provider no data error * fix flake8 * address feedback * fix gzip issue which adds a header and deviates from the spec * Add Russian translations (geopython#2108) * OpenAPI: add POST for items endpoints (geopython#2003) (geopython#2113) * run Dockerfile from Python venv and update to Ubuntu Noble (geopython#2107) * update noble distro in Dockerfile (geopython#2115) * add csrf_exempt in view.py (Django) (geopython#2119) * Fix error on the test_tilematrixsets test (geopython#2121) * - Make test_tilematrixsets search for tms in either position of the array * - fixed flake8 error --------- Co-authored-by: doublebyte1 <info@doublebyte.net> * Clarify OAProc configuration in docs (geopython#2127) * docs: rename publishing section (geopython#2128) * docs: rename publishing section * fix ref * add search controls for records-based items HTML (geopython#2130) * add search controls for records-based items HTML * add STAC API support (geopython#221) (geopython#2129) * update MapScript map provider output formats (geopython#2131) * update MapScript map provider output formats * fix syntax in docs * update STAC API documentation with conformance links (geopython#2132) Added links to STAC API conformance classes in documentation. * Catch EDR `AttributeError` errors more fine grained (geopython#2118) * fix EDR error handling * test commit * use is None and remove detail from error * change wording * make it on one linegs * remove typing * remove import * linked data: safeguard crs typing (geopython#2134) * OpenAPI: fix i10n for EDR descriptions (geopython#2137) (geopython#2139) * use ogcapi leaflet plugin, instead of wms (geopython#2145) * use ogcapi leaflet plugin, instead of wms * Refactor map link rendering in collection.html --------- Co-authored-by: Tom Kralidis <tomkralidis@gmail.com> * Fix missing types to core pygeoapi (geopython#2143) * Fix API types * Fix more signatures * Normalize CRS handling (geopython#2116) * Normalize CRS handling * Normalize storage_crs * Update crs.py * Cleanup * Use CrsTransformSpec for all CRS conversion * Create `get_transform_from_spec` * Add additional tests * Reduce diff * Revert transform_bbox changes * Update documentation * Update CRS docs * Update plugins.rst * Fix comment spacing in configuration docs * Incorporate PR review feedback * Small change to verbiage * Fix STAC API endpoints on Starlette (geopython#2153) Without the `await`, we get the following error: TypeError: 'coroutine' object is not callable * CI: remove pip3 global-option flags (geopython#2154) Remove global options from GDAL installation command. * update release version * back to dev * update process manager documentation (geopython#2155) (geopython#2156) * - replaced broken redoc link by working link (geopython#2163) Co-authored-by: doublebyte1 <info@doublebyte.net> * fix HTML tag in items HTML template (geopython#2178) * Fix WMTSFacade provider (geopython#2167) * Fix WMTSFacade provider 'style' query parameter is mandatory according to WMTS 1.0.0 standard. For backwards compatibility, empty string remains as default value. * Update wmts_style description for clarity Clarified wmts_style description in ogcapi-tiles.rst. --------- Co-authored-by: Jo <doublebyte@hushmail.com> * Fix datetime method deprecation (geopython#2182) Fix datetime method deprecation * Fix image builds for tags (geopython#2183) * Fix index error for empty sortby parameter (geopython#2185) * Fix error for CSV/GeoJSON provider when the bbox parameter has 6 coordinates (geopython#2187) * Fix error for CSV provider when the bbox parameter has 6 coordinates * Fix error for GeoJSON provider when the bbox parameter has 6 coordinates Fix error for GeoJSON provider when the bbox parameter has 6 coordinates * Add one more test for the CSW provider that uses the same function giving error * Docker: add env var to enable building OpenAPI document with invalid collections (geopython#2188) (geopython#2192) * Update ubuntu noble base image (geopython#2193) * add datetime representer and allow unicode characters (geopython#2191) * Fix urllib3 vulnerabilities CVE-2025-66418 CVE-2025-66471 (geopython#2194) * Fix urllib3 vulnerabilities CVE-2025-66418 CVE-2025-66471 * Fix urllib3 vulnerabilities CVE-2025-66418 CVE-2025-66471 * Update botocore version to unblock urllib3 version * Happy New Year! 🎉 * Fix config validation for OGC Processes connection field (geopython#2159) * fix validation issue * fix validation issue * Update formatting * Use returned links if found for HTML (geopython#1954) * Use JSON-LD link if found in HTML template * Use found link * Revert "Use found link" This reverts commit 36e1841. * Add CRS parameter support to EDR API (geopython#2170) * Add CRS parameter support to EDR API * Added EDR CRS support to the documentation * OAProc: fix/update statusInfo responses (geopython#2197) (geopython#2198) * fix support for custom formatters (geopython#1997) (geopython#2144) * fix support for custom formatters (geopython#1997) * fix typo * add formatters for EDR * add guidelines for AI based contributions (geopython#2199) * ES: fix property evaluation (geopython#2189) (geopython#2200) * set f= in next/prev links (geopython#2175) (geopython#2201) * Revert "add guidelines for AI based contributions (geopython#2199)" This reverts commit 92fdcb9. * Docs: update / centralize OGC Compliance links (geopython#2204) * OpenSearch: fix property evaluation (geopython#2189) (geopython#2202) * OpenSearch: fix property evaluation (geopython#2189) * fix refs * TinyDB: fix spatial queries against null geometries * fix test * update EDR and Maps to support MetOcean access and visualization workflows (geopython#2213) (geopython#2214) * update EDR and Maps to support MetOcean access and visualization workflows (geopython#2213) * add EDR plugin documentation (geopython#2162) * Fix admin with empty resources (geopython#2208) * Fix admin with empty resources * Update test_openapi.py * fix flake8 --------- Co-authored-by: Tom Kralidis <tomkralidis@gmail.com> * Docs: fix typos and clarify get_srid docstring (geopython#2219) * pin gunicorn (geopython#2221) (geopython#2222) * Update ESRI Provider (geopython#2225) - Allow for alternate id_field - Do native CRS conversion - Safe handle empty responses on get_fields * Cleanup xarray provider (geopython#2224) * Cleanup xarray provider * Respond to PR feedback * Fix xarray tests * HTML: set clear opacity if collection has a map (geopython#2226) * add support for OGC API Publish-Subscribe Workflow - Part 1: Core (geopython#2146) (geopython#2220) * add support for OGC API Publish-Subscribe Workflow - Part 1: Core (geopython#2146) * update docs * update docs * fix API deletion on not found items in backend * fix ref * fix docs * add AsyncAPI support * fix tests * add exception handling * update docs * fix AsyncAPI handling on Docker startup (geopython#2227) * Filtering Geospatial Data (geopython#2165) - filters out any non-geospatial data fields (i.e. crs, lat_bounds) - fixes the UI position query issue caused by attempting to query timeseries data on the crs field - still need to test compatibility with the builder * fix missing flake8 * Revert "fix missing flake8" This reverts commit e01111e. * Revert "Filtering Geospatial Data (geopython#2165)" This reverts commit e5d79cb. * move provider utils to pygeoapi.provider (geopython#2228) * OAProc: do not pretty print JSON results when document=raw (geopython#2212) (geopython#2230) * Implement OGC API - Processes, Requirement 25, for jobControlOptions async-execute only, and no user preference (Issue geopython#2231) (geopython#2232) * Implement OGC API - Processes, Requirement 25, for jobControlOptions async-execute only, and no user preference (Issue geopython#2231) * Minor fix --------- Co-authored-by: FrancescoIngv <FrancescoIngv@users.noreply.github.com> * EDR: add parameter description if exists (geopython#2233) (geopython#2234) * fix: add fix for slow full count in postgresql (geopython#2174) * feat: implement optional count for postgresql provider This work has been done to allow the result count to be enabled or disabled for the PostgreSQL provider. By disabling the count you can get improved performance on large datasets but on smaller datasets this is unlikely to have any affect. * fix: move count to base provider This work has been done to move count to the base provider. While doing this work I also added a debug log message to state when the count had been disabled in the SQL provider. Also, I removed some tests that were no longer needed after the introduction of the str2bool function, when getting the count value from the configuration file. * fix: convert string true to boolean * Fix to not mutating conformance class list (geopython#2239) * Fix to not mutating conformance class list * Fix flake8 * Move import and update copyright --------- Co-authored-by: Francesco Bartoli <francesco.bartoli@wfp.org> * OAProc: fix gzip compression on async process execution (geopython#2238) (geopython#2240) * OAProc: fix gzip encoding for async process execution (geopython#2238) * support literals for process execution responses * update tests * fix flake8 * update noble to 20260113 in Dockerfile (geopython#2246) Updated copyright year and base image version. * Update Docker API in main GitHub Action (geopython#2248) * fix form reset for records items HTML (geopython#2247) * add resolution/default to collection extents.temporal configuration (geopython#2260) (geopython#2261) * remove deprecated license and fix test cmdclass in setup.py (geopython#2262) * Support SQL connection string (geopython#2251) * Support SQL connection string Modify SQL provider logic to support connection string * Add test for MySQL * Fix flake8 * Remove pg8000 test * Add funcstrings * Synchronize Postgres manager * Update LOGGER statements * PubSub: add support for Kafka (geopython#2259) (geopython#2258) * Fix `transform_bbox` CRS types (geopython#2265) * Fix transform_bbox CRS types * manually fix formatting * manually fix formatting * prevent form fields from being submitted on form click/submit (geopython#2263) * enable skipping of errorneous collections in /collections (geopython#2267) * OAProc: derive process execution mode OpenAPI prefer option from process metadata (geopython#2272) * Use the latest Ubuntu Noble base image (geopython#2275) * update release version * back to dev * update Security Policy (geopython#2277) * update security policy * update security policy * fix openapi generate example in docs (geopython#2276) (geopython#2278) * OAProc: derive jobControlOptions and outputTransmission from plugin (geopython#2257) (geopython#2274) * Geoparquet 1.1 spec compliance update (geopython#2271) * working with geoparquet * tests * flake8 * single quotes * tweak single quptes * tweak single quotes * fix typo * revert log message * single quotes * remove dupe log * fix flake8 * fix failing test * response to feedback * OAProc: safeguard link rel check (geopython#2282) (geopython#2283) * OAProc: safeguard link rel check (geopython#2282) * fix ref * update EDR parameter defs (geopython#2279) (geopython#2284) * Parquet batch configuration and documentation for spec updates (geopython#2281) * parquet documentation and batch configuration * single quotes * fix typo * Remove duplicated word (geopython#2286) * add sanitization to to_json output (geopython#2287) * Safely handle single feature SQL requests (geopython#2288) * Update test_mysql_provider.py * Update sql.py * Fix import order * Update sql.py Fix assertion fix flake8 * emit jobs endpoints only when manager supports async (geopython#2291) (geopython#2292) * emit jobs endpoints only when manager supports async (geopython#2291) * update tests * Pin trivy action version to v0.35.0 (geopython#2293) Pin trivy to a safe version before the incident GHSA-69fq-xp46-6x23 * add path to collection id for map (geopython#2294) * update TinyDB query builder (geopython#2296) * fix TinyDB query handling to use query builder * flake8 * rename base_edr instance functions (geopython#2298) (geopython#2299) * Fix CRS support on WMS Facade (geopython#2302) * - fixed support for crs 3857 on OGC API - Maps and WMS Facade provider * - updated maps documentation for the WMS facade provider * UI: prevent form element names from being passed on user click/search (geopython#2300) * WMS Facade updates (geopython#2303) * WMS Facade updates: - added unit test for wms facade - removed trailing comma - prevent errors with non existing keys * - fixed flak8 errors * - removed bbox validation * - removed invalid bbox test * - fixed flak8 * - fixed bug introduced in previous commit (geopython#2306) * - fixed bug introduced in previous commit * - fixed flake8 * Create test_csw_provider_live.py (geopython#2309) * Create csw_live * Fix flake8 * Fix to_json escape (geopython#2310) * Fix to_json escape * Fix flake8 * OAProc: ensure binary outputs are not UTF-8 decoded (geopython#2304) * OAProc: fix non JSON outputs (geopython#2311) * remove print statements * catch EDR instance queries in Starlette * fix boolean OpenAPI typing in HelloWorld process (geopython#2316) * STAC: secure resource pathing * OAProc: secure subscriber URLs in requests * Migrate to services approach for CI (geopython#2322) * Extend CSV Formatter functionality to CovJSON (geopython#2323) * Port geopython#1926 Port geopython#1926 with updates for CovJSON Formatting * Add CovJSON CSV Formatter * Update EDR Content Type * Add original tests back * Do not throw error on additional keys * Change x,y columns order to be at the start * Fix CI * Respond to PR feedback * docs: update documentation to describe formatters (geopython#2325) * Fix `Access-Control-Expose-Headers` for Flask (geopython#2329) * Fix Flask Expose Headers * add a test * switch to single quotes * Fix visibility hidden edge case (geopython#2330) * fix tiles LinkType type (geopython#2331) (geopython#2332) * Only display configured properties (geopython#2335) * Updates to the OGC API - Maps Support (geopython#2308) * - Introduced guardrails to ensure we dont go outside the limits of the WebMercator bbox - Support defaults for crs, bbox and bbox-crs * - support maps request, even when there are no spatial extents defined in conf * - removed failing tests in wms_facade provider * - fixed flake8 * - Make sure we only show the map preview, when the view is within bounds of the crs * - updated unit tests for the wms_facade provider * - Set input and output coordinates always treated as (x, y) regardless of the axis order defined in the CRS, only for OAM * - Reimplement the logic for default crs and bbox-crs in OAM, according to the Standard - fix typo in bbox-crs par * - updated default_crs code in wms_facade provider - fixed tests for wms_facade * - updated documentation - added Content-Crs and Content-Bbox to OAM * - fixed flake8 errors * - update crs84 code on wms_facade * - improve code readability of query arg * - put back missed transparency arg * - use DEFAULT_CRS from crs.py * - added another alias for crs84 * - put back preview of OAM, in extents greater than the world. * - fixed wms_facade test * - fixed flake8 errors * Implement optional count in Feature Providers (geopython#2215) * Implement optional count in Feature Providers * Revert collection entry * Add count for SQLite.GPKG * Update docs * fix job start / duration rendering (geopython#2328) (geopython#2338) * ensure OpenAPI document metadata supports i18n * remove extra .../maps datetime parameter * Use declarative SQLalchemy Job Table (geopython#2341) * Use declarative SQLalchemy Table Use declarative SQLAlchemy table and create if not present in the schema * Cache get_table_model * add translation support for data elements (geopython#2346) * add translation support for data elements * rename var * HTML: add safe bbox function for dateline crossing (geopython#2352) * EDR: emit data link JSON media type as CoverageJSON (geopython#2357) * Pass content CRS to formatters (geopython#2353) Use Query CRS * normalize CQL text support to CQL2 (geopython#2015) (geopython#2018) * normalize CQL text support to CQL2 (geopython#2015) * fix keyword varname * remove pygeofilter install from main * Pooling (geopython#2345) * Further Fixes for STAC Search (geopython#2340) * Fix STAC search endpoint reference This mistakenly used double slashes in the URL which would break the output. A single slash fixes this. Closes geopython#2354 * Assets should be dict, not list As specified in the STAC spec: https://stacspec.org/en/about/stac-spec/ assets are dicts, not lists. When missing, now they are initialized as the correct empty data structures. Closes geopython#2354 * Correctly initialize temporal instant Previously the `datetime` field was not used to initalize the temporal instant, causing it to be overridden by other approximations. This ensure that the initialization happens correctly, and the overrides only occur in cases when `datetime` is None. Closes geopython#2356 * Correct conformance class URLs (geopython#2360) * Correct conformance class URLs * Revert oas30 * Force a 404 code for tiles out of bounds (geopython#2365) * Create get_parameters in BaseEDRProvider (geopython#2367) * Migrate get_parameters to base_edr * Use get_parameters in xarray * Fix tests * Fix flake8 * Migrate as_list annotation * Improve CRS support in OAMaps (geopython#2358) * - added functions for parsing wms codes from uris and curies, and for transforming wms codes in uris * - fixed flake8 errors * - Remove list of pre-defined crs and enable parsing uris from safe and unsafe curies * - fixed flake8 errors * - updated unit test * - fixed flake8 error * - updated docs * - switched to accept CRS:84 (for compatibility with WMS) and not CRS84 * - capitalised curie and crs * - capitalised crs, curie - replaced "str" variable name by "crs" * - reordered library import * - refactored condition logic for performance and clarity - store strip results directly on variables, since we do not need the full qualified array. * - renamed get_crs_uri and get_crs_curie for consistency with other function names * - added type hints on function arguments * - fixed flake8 errors --------- Co-authored-by: doublebyte1 <info@doublebyte.net> * Small HTML improvements (geopython#2368) * Small improvements to EDR HTML * Conditionally create Data/Record collection sections * Mapscript catchup with changes in base class and crs (geopython#2380) * - catchup with changes in maps api * - Catchup with changes on function names * - removed reprojection of bbox, since that is now handled at the base class. * - fixed flake8 * - updated copyright notice * - simplified code * - update variable name to follow up convention * - updated missed variable name * Minor coverages improvements (geopython#2373) * Minor coverages improvements * Fix tests * Advertise Coverage at collection level HTML * Implement PR feedback * Remove queryables advertisement * Fix capitalization * Add trans * Rename coverage.html * coverages -> coverage * EDR: fix multilingual instance metadata and links (geopython#2389) * EDR: add instance link title (geopython#2390) * OGR: sanitize attribute filter values (geopython#2391) --------- Co-authored-by: Benjamin Webb <40066515+webb-ben@users.noreply.github.com> Co-authored-by: Tom Kralidis <tomkralidis@gmail.com> Co-authored-by: JohannesSchnell <108523161+JohannesSchnell@users.noreply.github.com> Co-authored-by: Jo <doublebyte@hushmail.com> Co-authored-by: vvmruder <vvmruder@users.noreply.github.com> Co-authored-by: Even Rouault <even.rouault@spatialys.com> Co-authored-by: Sarah Jordan <smjordan329@gmail.com> Co-authored-by: Angelos Tzotsos <gcpp.kalxas@gmail.com> Co-authored-by: Francesco Bartoli <xbartolone@gmail.com> Co-authored-by: ThorodanBrom <bpr_95@hotmail.com> Co-authored-by: Joep Keijsers <joep.keijsers@geodan.nl> Co-authored-by: ThorodanBrom <bryan.robert@datakaveri.org> Co-authored-by: Mike Mahoney <mjmahoney@usgs.gov> Co-authored-by: Benjamin Webb <benjamin.miller.webb@gmail.com> Co-authored-by: PRAJWAL S <praju18299@gmail.com> Co-authored-by: Tanvi Prasad <tanvi.prasad@datakaveri.org> Co-authored-by: Francesco Bartoli <francesco.bartoli@geobeyond.it> Co-authored-by: Sebastian Frey <sebastianfrey@users.noreply.github.com> Co-authored-by: Daniel Sparing <daniel@sparing.nl> Co-authored-by: Colton Loftus <70598503+C-Loftus@users.noreply.github.com> Co-authored-by: doublebyte1 <info@doublebyte.net> Co-authored-by: Ville Mäkinen <ville.p.makinen@nls.fi> Co-authored-by: Jeff McKenna <jmckenna@gatewaygeomatics.com> Co-authored-by: Sander Schaminee <sander.schaminee@geocat.net> Co-authored-by: Matt Aschmann <matt.aschmann@gmail.com> Co-authored-by: Matt Aschmann <maschmann@igsftr116lwmas2.gs.doi.net> Co-authored-by: Seth G <sethg@geographika.co.uk> Co-authored-by: Linda Karlovska <49241681+lindakarlovska@users.noreply.github.com> Co-authored-by: lindakladivova <l.kladivova@seznam.cz> Co-authored-by: Moritz Langer <31667222+Moritz-Langer@users.noreply.github.com> Co-authored-by: Carlos Eduardo Miranda Mota <cmota.dev@gmail.com> Co-authored-by: David Blodgett <dblodgett@usgs.gov> Co-authored-by: Petr Tsymbarovich <petr@tsymbarovich.ru> Co-authored-by: IngenieroGeomatico <84268457+IngenieroGeomatico@users.noreply.github.com> Co-authored-by: Paul van Genuchten <genuchten@yahoo.com> Co-authored-by: Terence Tuhinanshu <terence@tuhinanshu.com> Co-authored-by: Théo Satabin <theo.satabin@ign.fr> Co-authored-by: Henri Kynsilehto <henri.kynsilehto@gmail.com> Co-authored-by: KatKatKateryna <89912278+KatKatKateryna@users.noreply.github.com> Co-authored-by: Niccolò Cantù <niccolocantu@gmail.com> Co-authored-by: Prince Mahar <74172630+Prinxeeee@users.noreply.github.com> Co-authored-by: Kieran Bartels <62659408+kieranbartels@users.noreply.github.com> Co-authored-by: francescoingv <9592487+francescoingv@users.noreply.github.com> Co-authored-by: FrancescoIngv <FrancescoIngv@users.noreply.github.com> Co-authored-by: Matthew Dear <160152917+mdearos@users.noreply.github.com> Co-authored-by: Francesco Bartoli <francesco.bartoli@wfp.org> Co-authored-by: KoalaGeo <eddlewis85@gmail.com> Co-authored-by: Terence Tuhinanshu <ttuhinanshu@element84.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Overview
This PR fixes OGR attribute filter sanitization and quoting when executing layer
SetAttributeFilterin the OGR feature provider.Related Issue / discussion
Additional information
Dependency policy (RFC2)
Updates to public demo
Contributions and licensing
(as per https://github.com/geopython/pygeoapi/blob/master/CONTRIBUTING.md#contributions-and-licensing)