-
-
Notifications
You must be signed in to change notification settings - Fork 156
OSGeo GSoC
OSGeo participates in the Google Summer of Code (GSoC) by providing a coordinating role among OSGeo (official or incubating/guest) projects.
This page lists pycsw ideas for inclusion in OSGeo's yearly submissions to GSoC.
Summary: the filter handling/query definition are currently in the same codepath and only support RDBMS (PostgreSQL, MySQL, SQLite3, Oracle, etc.) based queries (SQL where clauses). We would like to abstract pycsw's query filter handling into a separate library (pyfes) whose sole purposes (UNIX philosophy) will be to parse OGC filter syntax into a generic Python object. This will allow pycsw to handle any backend (ElasticSearch, HTTP API, Git, etc.) with pycsw's plugin mechanisms.
pycsw accepts query filters via the following:
- CSW GetRecords GET
constraint
(either Filter XML or CQL) - CSW GetRecords POST
ogc:Filter
orcsw:CqlText
- SRU GET
query
parameter - OpenSearch GET
q
/time
/bbox
For non-OGC filter cases, the query parameters are transformed into Filter XML which then is parsed by https://github.com/geopython/pycsw/blob/master/pycsw/ogc/fes/fes1.py.
Workflow is as follows:
OGC Filter -> SQL where clauses -> backend
This code translates a a Filter XML into an SQL where clause and thus makes hard assumptions about pycsw's backend always being an RDBMS.
If pycsw is to support non-SQL backends like Elasticsearch (see next idea), SOLR etc., the filter parsing needs to evolve as follows:
OGC Filter -> generic filter object -> backend
With this workflow then the native query syntax is covered by the backend. For example, the default backend will transform the generic filter object into an SQL where clause. An Elasticsearch backend will transform the generic filter object into an ES query.
It is proposed that pyfes cover the requirement of parsing filters/queries into generic objects, so the goal of this project is to have functionality working in pyfes independent of pycsw first, then integrate into pycsw.
Requirement(s): Python
Mentor: Tom Kralidis
Co-mentor: ?
Summary: implement pycsw repository plugin for ElasticSearch
Requirement(s): Python, ElasticSearch (could learn ES along the way too)
Mentor: Tom Kralidis
Co-mentor: ?
pycsw provides the ability for repository plugins that implement an API which pycsw hooks into. Impement an Elasticsearch API that covers the OGC CSW specification (insert, update, delete, search) and translates generic filter objects into Elasticsearch syntax, queries via HTTP GET and transforms the ES result set into pycsw record objects as part of normal request handling.
Summary: pycsw's configuration is currently bound to a local config file which can be edited on disk, or a Python dict or ConfigParser object which can be fed into the pycsw API. Implement an admin API to enable pycsw to be configurable via HTTP requests
Requirement(s): Python
Mentor: Tom Kralidis
Co-mentor: ?