Skip to content
Tom Kralidis edited this page Mar 8, 2017 · 5 revisions

Overview

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.

2017

OGC Filter abstraction (pyfes)

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.

Technical Description

pycsw accepts query filters via the following:

  • CSW GetRecords GET constraint (either Filter XML or CQL)
  • CSW GetRecords POST ogc:Filter or csw: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: ?

ElasticSearch backend

Summary: implement pycsw repository plugin for ElasticSearch

Requirement(s): Python, ElasticSearch (could learn ES along the way too)

Mentor: Tom Kralidis

Co-mentor: ?

Technical Description

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.

admin HTTP API

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: ?

Clone this wiki locally