{"library":"pygeofilter","title":"pygeofilter","description":"pygeofilter is a pure Python library for parsing and evaluating OGC filtering standards, including Filter Encoding 2.0 and CQL2. It provides robust tools to parse filter expressions from various formats (e.g., CQL2-TEXT, CQL2-JSON) and evaluate them against Python data structures or translate them into SQL queries. The current version is 0.3.3, and it receives active development with regular patch and minor releases.","language":"python","status":"active","last_verified":"Sun May 17","install":{"commands":["pip install pygeofilter","pip install pygeofilter[sql]"],"cli":null},"imports":["from pygeofilter.parsers.cql2_text import parse","from pygeofilter.evaluate import evaluate","from pygeofilter.backends.sqlalchemy import to_sqlalchemy"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"from pygeofilter.parsers.cql2_text import parse\nfrom pygeofilter.evaluate import evaluate\n\n# Define a CQL2 filter expression\ncql_filter_string = \"(name = 'test-feature' AND temperature > 25) OR (id IN ('A1', 'B2'))\"\n\n# Parse the filter expression\nparsed_filter = parse(cql_filter_string)\n\n# Define a data item (dictionary representing feature properties)\ndata_item = {\n    \"name\": \"test-feature\",\n    \"temperature\": 28.5,\n    \"id\": \"A1\",\n    \"timestamp\": \"2024-01-01T10:00:00Z\"\n}\n\n# Evaluate the filter against the data item\nresult = evaluate(parsed_filter, data_item)\n\nprint(f\"Filter expression: {cql_filter_string}\")\nprint(f\"Data item: {data_item}\")\nprint(f\"Evaluation result: {result}\")\n\n# Example with a different data item (should fail the filter)\ndata_item_fail = {\n    \"name\": \"other-feature\",\n    \"temperature\": 20.0,\n    \"id\": \"C3\",\n    \"timestamp\": \"2024-01-01T11:00:00Z\"\n}\nresult_fail = evaluate(parsed_filter, data_item_fail)\nprint(f\"Evaluation result for other item: {result_fail}\")","lang":"python","description":"This quickstart demonstrates how to parse a CQL2-TEXT filter string and then evaluate it against a Python dictionary representing a data item's properties. It showcases both a successful and a failing evaluation.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-17","installed_version":"0.3.3","pypi_latest":"0.3.3","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":3.2,"avg_import_s":1.65,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"pygeofilter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.91,"mem_mb":16.1,"disk_size":"30.4M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"sql","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.95,"mem_mb":16.1,"disk_size":"30.4M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"pygeofilter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.4,"import_time_s":1.35,"mem_mb":16.1,"disk_size":"31M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"sql","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.3,"import_time_s":1.4,"mem_mb":16.1,"disk_size":"31M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"pygeofilter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":2.45,"mem_mb":16.3,"disk_size":"33.7M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"sql","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":2.36,"mem_mb":16.3,"disk_size":"33.7M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"pygeofilter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.2,"import_time_s":2.23,"mem_mb":16.3,"disk_size":"35M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"sql","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.2,"import_time_s":2.21,"mem_mb":16.3,"disk_size":"35M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"pygeofilter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.77,"mem_mb":15.9,"disk_size":"25.3M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"sql","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.8,"mem_mb":15.9,"disk_size":"25.3M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"pygeofilter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.8,"import_time_s":1.99,"mem_mb":15.9,"disk_size":"26M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"sql","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.8,"import_time_s":1.99,"mem_mb":15.9,"disk_size":"26M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"pygeofilter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.6,"mem_mb":16.6,"disk_size":"25.0M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"sql","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.58,"mem_mb":16.6,"disk_size":"25.0M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"pygeofilter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.1,"import_time_s":1.69,"mem_mb":16.6,"disk_size":"26M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"sql","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.9,"import_time_s":1.74,"mem_mb":16.6,"disk_size":"26M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"pygeofilter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.83,"mem_mb":16.2,"disk_size":"29.9M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"sql","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.79,"mem_mb":16.2,"disk_size":"29.9M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"pygeofilter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.8,"import_time_s":0.69,"mem_mb":16.2,"disk_size":"31M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"sql","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.8,"import_time_s":0.7,"mem_mb":16.2,"disk_size":"31M"}]}}