The skinny WMS is a small WMS server that will help you to visualise your NetCDF and Grib Data.
The principle is simple: skinny will browse the directory, or the single file passed as argument, and try to interpret each NetCDF or GRIB files. From the metadata, it will be built the getCapabilities document, and find a relevant style to plot the data.
[![Docs](https://img.shields.io/readthedocs/skinnywms?label=read%20the%20docs)](https://skinnywms.readthedocs.io)
[![Upload Python Package](https://github.com/ecmwf/skinnywms/actions/workflows/python-publish.yml/badge.svg)](https://github.com/ecmwf/skinnywms/actions)
[![PyPI version](https://badge.fury.io/py/skinnywms.svg)](https://badge.fury.io/py/skinnywms)
[![Upload Python Package](https://github.com/ecmwf/skinnywms/actions/workflows/docker-release.yml/badge.svg)](https://github.com/ecmwf/skinnywms/actions)
[![Docker Pulls](https://img.shields.io/docker/pulls/ecmwf/skinnywms)](https://hub.docker.com/r/ecmwf/skinnywms)
[![Anaconda Version](https://anaconda.org/conda-forge/skinnywms/badges/version.svg)](https://anaconda.org/conda-forge/skinnywms)
[![Anaconda Downloads](https://anaconda.org/conda-forge/skinnywms/badges/downloads.svg)](https://anaconda.org/conda-forge/skinnywms)
[![License](https://img.shields.io/github/license/ecmwf/skinnywms)](https://github.com/ecmwf/skinnywms)
Features:
---------
SkinnyWMS implements 3 of the WMS endpoints:
- **getCapabilities**: Discover the data, build an XML Document presenting each identified parameter in the file(s) as a layer with the list of their predefined styles. (There is always a default style)
- **getMap** : Return the selected layer suing the selected style.
- **getLegendGraphic**: Return the legend.
Usage:
-----
There are 2 ways to start using it, they both will start a small Flask server.
Once running, a small leaflet client is accessible [http://127.0.0.1:5000/]
* The demo:
```bash
python demo.py --path /path/to/mydata
```
* The command line:
```bash
skinny-wms --path /path/to/mydata
```
* Or with uwsgi:
```bash
uwsgi --http localhost:5000 --master --process 20 --mount /=skinnywms.wmssvr:application --env SKINNYWMS_DATA_PATH=/path/to/mydata
```
Run using Docker
----------------
By default the docker image will start the application using uwsgi and will load and display some demo data.
* Run the demo:
```bash
docker run --rm -p 5000:5000 -it ecmwf/skinnywms
```
Now you can try the leaflet demo at http://localhost:5000/
* Run using data on your machine:
```bash
docker run --rm -p 5000:5000 -it \
--volume=/path/to/my/data:/path/inside/the/container \
--env SKINNYWMS_DATA_PATH=/path/inside/the/container \
ecmwf/skinnywms
```
Now you can access the leaflet demo with your data at http://localhost:5000/
* Configure different options by setting environment variables accordingly:
```bash
docker run --rm -p 5000:5000 -it \
--volume=/path/to/my/data:/path/inside/the/container \
--env SKINNYWMS_DATA_PATH=/path/inside/the/container \
--env SKINNYWMS_HOST=0.0.0.0 \
--env SKINNYWMS_PORT=5000 \
--env SKINNYWMS_MOUNT=/mymodel/ \
--env SKINNYWMS_UWSGI_WORKERS=4 \
--env SKINNYWMS_ENABLE_DIMENSION_GROUPING=1 \
ecmwf/skinnywms
```
Now you can access the ```GetCapabilities`` document for your data at http://localhost:5000/mymodel/wms?request=GetCapabilities
Installation
------------
SkinnyWMS depends on the ECMWF *Magics* library.
If you do not have *Magics* installed on your platform, skinnywms is available on conda forge https://conda-forge.org/
```bash
conda config --add channels conda-forge
conda install skinnywms
```
If you have *Magics* already installed you can use pip:
```bash
pip install skinnywms
```
Limitations:
------------
- SkinnyWMS will perform better on well formatted and documented NetCDF and GRIB.
- grib fields containing corresponding wind components u,v need to be placed together in a single grib file in order to be displayed as vectors/wind barbs in SkinnyWMS. You can combine multiple grib files into a single file using ecCodes ``grib_copy`` (included in the docker image), e.g.:
```bash
grib_copy input_wind_u_component.grb2 input_wind_v_component.grib2 output_wind_u_v_combined.grb2
```
- The time and elevation dimension implementations follow [OGC Met Ocean DWG WMS 1.3 Best Practice for using Web Map Services (WMS) with Time-Dependent or Elevation-Dependent Data](https://external.ogc.org/twiki_public/MetOceanDWG/MetOceanWMSBPOnGoingDrafts). To enable dimension grouping (disabled by default) set the environment variable ``SKINNYWMS_ENABLE_DIMENSION_GROUPING=1``
- development stage: **Alpha**,
Add your own styles
-------------------
Multi-process
-------------
Cache
-----
How to install Magics
---------------------
that must be installed on the system and accessible as a shared library.
Some Linux distributions ship a binary version that may be installed with the standard package manager.
As an alternative you may install the official source distribution
by following the instructions at
https://software.ecmwf.int/magics/Installation+Guide
Magics is available on github https://github.com/ecmwf/magics
Note that *Magics* support for the Windows operating system is experimental.
Alternatively you can use the [ecmwflibs package](https://github.com/ecmwf/ecmwflibs/) (currently in **Alpha** development stage) to install magics and eccodes libraries:
```
pip install ecmwflibs
```
Start up a local development environment (Docker)
-----------------------------------------
Make sure you have ``Docker`` and ``docker-compose`` installed. Then run:
```bash
docker-compose up
```
This will build a dev image and start up a local flask development server (with automatic reload on code changes) at http://localhost:5000 based on the configuration stored in [docker-compose.yml](./docker-compose.yml) and [.env](./.env) and by default try to load all GRIB and NetCDF data stored in [skinnywms/testdata](./skinnywms/testdata).
Contributing
------------
The main repository, as well as related projects are hosted on GitHub.
Testing, bug reports and contributions to all our projects are highly welcomed and appreciated:
- https://github.com/ecmwf/skinnywms
- https://github.com/ecmwf/magics-python
- https://github.com/ecmwf/magics
- https://github.com/ecmwf/eccodes
- https://github.com/ecmwf/ecmwflibs
Lead developers:
- `Sylvie Lamy-Thepaut <https://github.com/sylvielamythepaut>`_ - ECMWF
- `Baudouin Raoult <https://github.com/b8raoult>` - ECMWF
- `Eduard Rosert <https://github.com/EduardRosert>` - ECMWF
Main contributors:
- `Stephan Siemen <https://github.com/stephansiemen>`_ - ECMWF
- `Milana Vuckovic <https://github.com/milanavuckovic>` - ECMWF
License
-------
Copyright 2017-2019 European Centre for Medium-Range Weather Forecasts (ECMWF).
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at: http://www.apache.org/licenses/LICENSE-2.0.
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Raw data
{
"_id": null,
"home_page": "https://github.com/ecmwf/skinnywms",
"name": "skinnywms",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "magics grib WMS visualisation NetCDF climate meteorology",
"author": "European Centre for Medium-Range Weather Forecasts (ECMWF)",
"author_email": "software.support@ecmwf.int",
"download_url": "https://files.pythonhosted.org/packages/b4/5d/d15e8e8302ee8f6554078b70a9abf27878a1184a4eaa9c26edbf11a1efcd/skinnywms-0.10.0.tar.gz",
"platform": null,
"description": "\nThe skinny WMS is a small WMS server that will help you to visualise your NetCDF and Grib Data.\nThe principle is simple: skinny will browse the directory, or the single file passed as argument, and try to interpret each NetCDF or GRIB files. From the metadata, it will be built the getCapabilities document, and find a relevant style to plot the data.\n\n[![Docs](https://img.shields.io/readthedocs/skinnywms?label=read%20the%20docs)](https://skinnywms.readthedocs.io)\n[![Upload Python Package](https://github.com/ecmwf/skinnywms/actions/workflows/python-publish.yml/badge.svg)](https://github.com/ecmwf/skinnywms/actions)\n[![PyPI version](https://badge.fury.io/py/skinnywms.svg)](https://badge.fury.io/py/skinnywms)\n[![Upload Python Package](https://github.com/ecmwf/skinnywms/actions/workflows/docker-release.yml/badge.svg)](https://github.com/ecmwf/skinnywms/actions)\n[![Docker Pulls](https://img.shields.io/docker/pulls/ecmwf/skinnywms)](https://hub.docker.com/r/ecmwf/skinnywms)\n[![Anaconda Version](https://anaconda.org/conda-forge/skinnywms/badges/version.svg)](https://anaconda.org/conda-forge/skinnywms)\n[![Anaconda Downloads](https://anaconda.org/conda-forge/skinnywms/badges/downloads.svg)](https://anaconda.org/conda-forge/skinnywms)\n[![License](https://img.shields.io/github/license/ecmwf/skinnywms)](https://github.com/ecmwf/skinnywms)\n\n\nFeatures:\n---------\nSkinnyWMS implements 3 of the WMS endpoints:\n- **getCapabilities**: Discover the data, build an XML Document presenting each identified parameter in the file(s) as a layer with the list of their predefined styles. (There is always a default style)\n- **getMap** : Return the selected layer suing the selected style.\n- **getLegendGraphic**: Return the legend.\n\n\nUsage:\n-----\nThere are 2 ways to start using it, they both will start a small Flask server.\nOnce running, a small leaflet client is accessible [http://127.0.0.1:5000/]\n\n* The demo:\n\n```bash\npython demo.py --path /path/to/mydata\n```\n\n* The command line:\n\n```bash\nskinny-wms --path /path/to/mydata\n```\n\n* Or with uwsgi:\n\n```bash\nuwsgi --http localhost:5000 --master --process 20 --mount /=skinnywms.wmssvr:application --env SKINNYWMS_DATA_PATH=/path/to/mydata\n```\n\n\nRun using Docker\n----------------\n\nBy default the docker image will start the application using uwsgi and will load and display some demo data.\n\n* Run the demo:\n```bash\ndocker run --rm -p 5000:5000 -it ecmwf/skinnywms \n```\nNow you can try the leaflet demo at http://localhost:5000/\n\n* Run using data on your machine:\n```bash\ndocker run --rm -p 5000:5000 -it \\\n --volume=/path/to/my/data:/path/inside/the/container \\\n --env SKINNYWMS_DATA_PATH=/path/inside/the/container \\\n ecmwf/skinnywms\n```\nNow you can access the leaflet demo with your data at http://localhost:5000/\n\n* Configure different options by setting environment variables accordingly:\n```bash\ndocker run --rm -p 5000:5000 -it \\\n --volume=/path/to/my/data:/path/inside/the/container \\\n --env SKINNYWMS_DATA_PATH=/path/inside/the/container \\\n --env SKINNYWMS_HOST=0.0.0.0 \\\n --env SKINNYWMS_PORT=5000 \\\n --env SKINNYWMS_MOUNT=/mymodel/ \\\n --env SKINNYWMS_UWSGI_WORKERS=4 \\\n --env SKINNYWMS_ENABLE_DIMENSION_GROUPING=1 \\\n ecmwf/skinnywms\n```\nNow you can access the ```GetCapabilities`` document for your data at http://localhost:5000/mymodel/wms?request=GetCapabilities\n\n\nInstallation\n------------\n\nSkinnyWMS depends on the ECMWF *Magics* library.\n\nIf you do not have *Magics* installed on your platform, skinnywms is available on conda forge https://conda-forge.org/\n\n```bash\nconda config --add channels conda-forge\nconda install skinnywms\n```\n\nIf you have *Magics* already installed you can use pip:\n\n```bash\npip install skinnywms\n```\n\nLimitations:\n------------\n- SkinnyWMS will perform better on well formatted and documented NetCDF and GRIB.\n\n- grib fields containing corresponding wind components u,v need to be placed together in a single grib file in order to be displayed as vectors/wind barbs in SkinnyWMS. You can combine multiple grib files into a single file using ecCodes ``grib_copy`` (included in the docker image), e.g.:\n```bash\ngrib_copy input_wind_u_component.grb2 input_wind_v_component.grib2 output_wind_u_v_combined.grb2\n```\n\n- The time and elevation dimension implementations follow [OGC Met Ocean DWG WMS 1.3 Best Practice for using Web Map Services (WMS) with Time-Dependent or Elevation-Dependent Data](https://external.ogc.org/twiki_public/MetOceanDWG/MetOceanWMSBPOnGoingDrafts). To enable dimension grouping (disabled by default) set the environment variable ``SKINNYWMS_ENABLE_DIMENSION_GROUPING=1``\n\n- development stage: **Alpha**,\n\n\nAdd your own styles\n-------------------\n\nMulti-process\n-------------\n\nCache\n-----\n\n\nHow to install Magics\n---------------------\n\nthat must be installed on the system and accessible as a shared library.\nSome Linux distributions ship a binary version that may be installed with the standard package manager.\n\nAs an alternative you may install the official source distribution\nby following the instructions at\nhttps://software.ecmwf.int/magics/Installation+Guide\nMagics is available on github https://github.com/ecmwf/magics\n\nNote that *Magics* support for the Windows operating system is experimental.\n\nAlternatively you can use the [ecmwflibs package](https://github.com/ecmwf/ecmwflibs/) (currently in **Alpha** development stage) to install magics and eccodes libraries:\n```\npip install ecmwflibs\n```\n\n\n\nStart up a local development environment (Docker)\n-----------------------------------------\n\nMake sure you have ``Docker`` and ``docker-compose`` installed. Then run:\n```bash\ndocker-compose up\n```\nThis will build a dev image and start up a local flask development server (with automatic reload on code changes) at http://localhost:5000 based on the configuration stored in [docker-compose.yml](./docker-compose.yml) and [.env](./.env) and by default try to load all GRIB and NetCDF data stored in [skinnywms/testdata](./skinnywms/testdata).\n\n\nContributing\n------------\n\nThe main repository, as well as related projects are hosted on GitHub.\nTesting, bug reports and contributions to all our projects are highly welcomed and appreciated:\n\n- https://github.com/ecmwf/skinnywms\n- https://github.com/ecmwf/magics-python\n- https://github.com/ecmwf/magics\n- https://github.com/ecmwf/eccodes\n- https://github.com/ecmwf/ecmwflibs\n\n\nLead developers:\n\n- `Sylvie Lamy-Thepaut <https://github.com/sylvielamythepaut>`_ - ECMWF\n- `Baudouin Raoult <https://github.com/b8raoult>` - ECMWF\n- `Eduard Rosert <https://github.com/EduardRosert>` - ECMWF\n\nMain contributors:\n\n- `Stephan Siemen <https://github.com/stephansiemen>`_ - ECMWF\n- `Milana Vuckovic <https://github.com/milanavuckovic>` - ECMWF\n\n\nLicense\n-------\n\nCopyright 2017-2019 European Centre for Medium-Range Weather Forecasts (ECMWF).\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at: http://www.apache.org/licenses/LICENSE-2.0.\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n",
"bugtrack_url": null,
"license": "Apache License Version 2.0",
"summary": "A light WMS server to visualise your NetCDf and Grib data",
"version": "0.10.0",
"project_urls": {
"Homepage": "https://github.com/ecmwf/skinnywms"
},
"split_keywords": [
"magics",
"grib",
"wms",
"visualisation",
"netcdf",
"climate",
"meteorology"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "de03a3aa66d471f0aec677b6ff4a6a094a6b59a29feb1c428559206195970e2f",
"md5": "788e4164f790568b019a79b8cd7cca1b",
"sha256": "19462dd94832d6081bfe9532d994d322a45844c9721bc33c49cdca61b20f48df"
},
"downloads": -1,
"filename": "skinnywms-0.10.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "788e4164f790568b019a79b8cd7cca1b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 18861340,
"upload_time": "2023-06-29T12:59:46",
"upload_time_iso_8601": "2023-06-29T12:59:46.760450Z",
"url": "https://files.pythonhosted.org/packages/de/03/a3aa66d471f0aec677b6ff4a6a094a6b59a29feb1c428559206195970e2f/skinnywms-0.10.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b45dd15e8e8302ee8f6554078b70a9abf27878a1184a4eaa9c26edbf11a1efcd",
"md5": "0996645c697488896cab3208a1f380f1",
"sha256": "0d5dce125352f9b357c4a30704fe4a69e2dfed5fb179e5fe22b79f18d3a24c90"
},
"downloads": -1,
"filename": "skinnywms-0.10.0.tar.gz",
"has_sig": false,
"md5_digest": "0996645c697488896cab3208a1f380f1",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 18382861,
"upload_time": "2023-06-29T12:59:53",
"upload_time_iso_8601": "2023-06-29T12:59:53.038326Z",
"url": "https://files.pythonhosted.org/packages/b4/5d/d15e8e8302ee8f6554078b70a9abf27878a1184a4eaa9c26edbf11a1efcd/skinnywms-0.10.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-06-29 12:59:53",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "ecmwf",
"github_project": "skinnywms",
"travis_ci": true,
"coveralls": false,
"github_actions": true,
"lcname": "skinnywms"
}