Metadata Publishing Just Got Easier
pycsw is an OGC API - Records and OGC CSW server implementation written in Python . Started in 2010 (more formally announced in 2011 ), pycsw allows for the publishing and discovery of geospatial metadata via numerous APIs (CSW 2/CSW 3, OpenSearch, OAI-PMH, SRU), providing a standards-based metadata and catalogue component of spatial data infrastructures. pycsw is Open Source , released under an MIT license , and runs on all major platforms (Windows, Linux, Mac OS X).
Deploy in 4 Minutes
# Setup a virtual environment:
python3 -m venv pycsw && cd pycsw && . bin/activate
# Grab the pycsw source code:
git clone https://github.com/geopython/pycsw.git && cd pycsw
pip3 install -e . && pip3 install -r requirements-standalone.txt
# Create and adjust a configuration file:
cp default-sample.cfg default.cfg
vi default.cfg
# adjust paths in
# - server.home
# - repository.database
# set server.url to http://localhost:8000/
# Setup the database:
pycsw-admin.py setup_db --config default.cfg
# Load records by indicating a directory of XML files, use -r for recursive:
pycsw-admin.py load_records --config default.cfg --path /path/to/xml/
# Run the server:
python ./pycsw/wsgi.py
# See that it works!
curl http://localhost:8000 # OGC API - Records
curl http://localhost:8000/csw?service= CSW&version= 2.0.2&request= GetCapabilities # CSW
Lightweight, Fast
pycsw stays out of your way:
Just a Python library
Install in just 4 minutes
Run multiple CSW endpoints with a single install
Headless: no GUI, just simple, scriptable command line configuration/deployment
Fully compliant, transactional, extensible metadata server in 400KB
Features
Flexible
Everything is callable and configurable:
Embed within your Python application, or use standalone
Deploy via mod_wsgi, Django, Flask, Pylons, or CGI
Integrated with popular open data portal software: GeoNode , CKAN , HHypermap , Open Data Catalog
Hook up to your existing metadata database, or use pycsw's native model and import your XML files
Choose your backend: PostgreSQL (with or without PostGIS), MySQL, or hack with SQLite
Manage settings in a configuration file, database, or even pass a Python dict
Robust, byte-level testing / continuous integration
Read the Docs