diff --git a/.cruft.json b/.cruft.json index b857281a..e7338f57 100644 --- a/.cruft.json +++ b/.cruft.json @@ -1,6 +1,6 @@ { "template": "https://github.com/bird-house/cookiecutter-birdhouse", - "commit": "b6969697401008114c8e25846ae5801e7e65224d", + "commit": "bc8a389e02a3e55e55dad7657671d91e2f238ed9", "skip": [ "finch/processes/wps_say_hello.py", "tests/test_wps_hello.py", @@ -25,10 +25,13 @@ "version": "0.11.3", "open_source_license": "Apache Software License 2.0", "http_port": "5000", + "use_pytest": "y", + "create_author_file": "y", "_copy_without_render": [ "{{cookiecutter.project_slug}}/templates/*.cfg" ], "_template": "https://github.com/bird-house/cookiecutter-birdhouse" } - } + }, + "checkout": null } diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md deleted file mode 100644 index 509835c5..00000000 --- a/.github/CONTRIBUTING.md +++ /dev/null @@ -1,6 +0,0 @@ -# Contributing - -Contributions are welcome, and they are greatly appreciated! Every little bit helps, and credit will always be given. - -Please read the Birdhouse [Developer Guide](https://birdhouse.readthedocs.io/en/latest/guide_dev.html) -and the [Finch Documentation](https://finch.readthedocs.io/en/latest/) to get started. diff --git a/.gitignore b/.gitignore index cda50164..507bbf58 100644 --- a/.gitignore +++ b/.gitignore @@ -77,6 +77,9 @@ docs/doctrees/ docs/html/ docs/build/ docs/source/output-sanitize.cfg +docs/finch.rst +docs/finch.*.rst +docs/modules.rst # External Sources #src/external @@ -98,3 +101,19 @@ testdata.json # Merge conflict *.orig + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ + +# IDE settings +.vscode/ diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst new file mode 100644 index 00000000..1b6fd638 --- /dev/null +++ b/CONTRIBUTING.rst @@ -0,0 +1,121 @@ +.. highlight:: shell + +============ +Contributing +============ + +Contributions are welcome, and they are greatly appreciated! Every little bit helps, and credit will always be given. + +Please read the Birdhouse [Developer Guide](https://birdhouse.readthedocs.io/en/latest/guide_dev.html) +and the [Finch Documentation](https://finch.readthedocs.io/en/latest/) to get started. + +You can contribute in many ways: + +Types of Contributions +---------------------- + +Report Bugs +~~~~~~~~~~~ + +Report bugs at https://github.com/bird-house/finch/issues. + +If you are reporting a bug, please include: + +* Your operating system name and version. +* Any details about your local setup that might be helpful in troubleshooting. +* Detailed steps to reproduce the bug. + +Fix Bugs +~~~~~~~~ + +Look through the GitHub issues for bugs. Anything tagged with "bug" and "help wanted" is open to whoever wants to implement it. + +Implement Features +~~~~~~~~~~~~~~~~~~ + +Look through the GitHub issues for features. Anything tagged with "enhancement" and "help wanted" is open to whoever wants to implement it. + +Write Documentation +~~~~~~~~~~~~~~~~~~~ + +Finch could always use more documentation, whether as part of the official Finch docs, in docstrings, or even on the web in blog posts, articles, and such. + +Submit Feedback +~~~~~~~~~~~~~~~ + +The best way to send feedback is to file an issue at https://github.com/bird-house/finch/issues. + +If you are proposing a feature: + +* Explain in detail how it would work. +* Keep the scope as narrow as possible, to make it easier to implement. +* Remember that this is a volunteer-driven project, and that contributions + are welcome :) + +Get Started! +------------ + +Ready to contribute? Here's how to set up `finch` for local development. + +1. Fork the `finch` repo on GitHub. +2. Clone your fork locally:: + + $ git clone git@github.com:your_name_here/finch.git + +3. Install your local copy into a virtualenv. Assuming you have virtualenvwrapper installed, this is how you set up your fork for local development:: + + $ mkvirtualenv finch + $ cd finch/ + $ python setup.py develop + +4. Create a branch for local development:: + + $ git checkout -b name-of-your-bugfix-or-feature + + Now you can make your changes locally. + +5. When you're done making changes, check that your changes pass flake8 and the + tests, including testing other Python versions with tox:: + + $ flake8 finch tests + $ python setup.py test or pytest + $ tox + + To get flake8 and tox, just pip install them into your virtualenv. + +6. Commit your changes and push your branch to GitHub:: + + $ git add . + $ git commit -m "Your detailed description of your changes." + $ git push origin name-of-your-bugfix-or-feature + +7. Submit a pull request through the GitHub website. + +Pull Request Guidelines +----------------------- + +Before you submit a pull request, check that it meets these guidelines: + +1. The pull request should include tests. +2. If the pull request adds functionality, the docs should be updated. Put your new functionality into a function with a docstring, and add the feature to the list in README.rst. +3. The pull request should work for Python 3.8, 3.9, 3.10 and 3.11. Check https://travis-ci.com/bird-house/finch/pull_requests and make sure that the tests pass for all supported Python versions. + +Tips +---- + +To run a subset of tests:: + +$ pytest tests.test_finch + +Deploying +--------- + +A reminder for the maintainers on how to deploy. +Make sure all your changes are committed (including an entry in HISTORY.rst). +Then run:: + +$ bump2version patch # possible: major / minor / patch +$ git push +$ git push --tags + +Travis will then deploy to PyPI if tests pass. diff --git a/LICENSE.txt b/LICENSE similarity index 94% rename from LICENSE.txt rename to LICENSE index 12a6beb5..5d5cc861 100644 --- a/LICENSE.txt +++ b/LICENSE @@ -1,4 +1,20 @@ -Apache License +Apache Software License 2.0 + +Copyright (c) 2023, David Huard + +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. + + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ diff --git a/MANIFEST.in b/MANIFEST.in index e673778d..feebea1a 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,3 +1,4 @@ +include LICENSE include Makefile include *.txt include *.rst diff --git a/README.rst b/README.rst index d543bce2..d5ac1dd1 100644 --- a/README.rst +++ b/README.rst @@ -1,36 +1,19 @@ Finch -=============================== - -.. image:: https://img.shields.io/badge/docs-latest-brightgreen.svg - :target: http://finch.readthedocs.io/en/latest/?badge=latest - :alt: Documentation Status - -.. image:: https://github.com/bird-house/finch/actions/workflows/main.yml/badge.svg - :target: https://github.com/bird-house/finch/actions/workflows/main.yml - :alt: GitHub CI - -.. image:: https://img.shields.io/github/license/bird-house/finch.svg - :target: https://github.com/bird-house/finch/blob/master/LICENSE.txt - :alt: GitHub license - -.. image:: https://badges.gitter.im/bird-house/birdhouse.svg - :target: https://gitter.im/bird-house/birdhouse?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge - :alt: Join the chat at https://gitter.im/bird-house/birdhouse +===== +|docs| |pypi| |ci| |license| |gitter| Finch (the bird) - *Finch is a bird ...* + *Finch is a bird that can adapt to many different climates and ecological niches* A Web Processing Service for Climate Indicators. Documentation ------------- -Learn more about Finch in its official documentation at -https://finch.readthedocs.io. +Learn more about Finch in its official documentation at: https://pavics-sdi.readthedocs.io/projects/finch -Submit bug reports, questions and feature requests at -https://github.com/bird-house/finch/issues +Submit bug reports, questions and feature requests at: https://github.com/bird-house/finch/issues Contributing ------------ @@ -42,7 +25,7 @@ Please use bumpversion_ to release a new version. License ------- -Free software: Apache Software License 2.0 +* Free software: Apache Software License 2.0 Credits ------- @@ -51,5 +34,24 @@ This package was created with Cookiecutter_ and the `bird-house/cookiecutter-bir .. _Cookiecutter: https://github.com/audreyr/cookiecutter .. _`bird-house/cookiecutter-birdhouse`: https://github.com/bird-house/cookiecutter-birdhouse -.. _`Developer Guide`: https://finch.readthedocs.io/en/latest/dev_guide.html +.. _`Developer Guide`: https://pavics-sdi.readthedocs.io/projects/finch/en/latest/dev_guide.html .. _bumpversion: https://finch.readthedocs.io/en/latest/dev_guide.html#bump-a-new-version + +.. |docs| image:: https://readthedocs.org/projects/finch/badge/?version=latest + :target: https://pavics-sdi.readthedocs.io/projects/finch/en/latest/?badge=latest + :alt: Documentation Status + +.. |pypi| image:: https://img.shields.io/pypi/v/birdhouse-finch.svg + :target: https://pypi.python.org/pypi/birdhouse-finch + +.. |ci| image:: https://github.com/bird-house/finch/actions/workflows/main.yml/badge.svg + :target: https://github.com/bird-house/finch/actions/workflows/main.yml + :alt: GitHub CI + +.. |license| image:: https://img.shields.io/github/license/bird-house/finch.svg + :target: https://github.com/bird-house/finch/blob/master/LICENSE.txt + :alt: GitHub license + +.. |gitter| image:: https://badges.gitter.im/bird-house/birdhouse.svg + :target: https://gitter.im/bird-house/birdhouse?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge + :alt: Join the chat at https://gitter.im/bird-house/birdhouse diff --git a/docs/source/.gitignore b/docs/source/.gitignore deleted file mode 100644 index 7996a8fd..00000000 --- a/docs/source/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/finch.rst -/finch.*.rst -/modules.rst diff --git a/docs/source/authors.rst b/docs/source/authors.rst new file mode 100644 index 00000000..7739272f --- /dev/null +++ b/docs/source/authors.rst @@ -0,0 +1 @@ +.. include:: ../../AUTHORS.rst diff --git a/docs/source/conf.py b/docs/source/conf.py index 609abf11..e1387207 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -1,17 +1,11 @@ #!/usr/bin/env python # noqa: D100 # -# finch documentation build configuration file, created by -# sphinx-quickstart on Fri Jun 9 13:47:02 2017. +# finch documentation build configuration file, created by sphinx-quickstart on Fri Jun 9 13:47:02 2017. # -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. +# This file is execfile()d with the current directory set to its containing dir. +# Note that not all possible configuration values are present in this autogenerated file. +# All configuration values have a default; values that are commented out serve to show the default. import os import sys diff --git a/docs/source/index.rst b/docs/source/index.rst index 3e34f0af..318de0cf 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -9,6 +9,7 @@ notebooks/index dev_guide processes + authors changes Indices and tables diff --git a/environment.yml b/environment.yml index d0a36f17..68adee0c 100644 --- a/environment.yml +++ b/environment.yml @@ -9,7 +9,7 @@ dependencies: - clisops >=0.9.3 - dask - distributed - - geopandas!=0.13.1 + - geopandas !=0.13.1 - h5netcdf - netcdf4 - numpy diff --git a/requirements_dev.txt b/requirements_dev.txt index b28a6987..6b3d87ac 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -1,21 +1,24 @@ -pytest +pytest>=6.0 +pytest-cov flake8 pytest-flake8 ipython pytest-notebook nbsphinx -nbval +nbval>=0.9.6 nbconvert -sphinx>=1.7 -bumpversion +sphinx>=1.8.5 +bump2version twine cruft jupyter_client # Changing dependencies above this comment will create merge conflicts when updating the cookiecutter template with cruft. Add extra requirements below this line. birdhouse-birdy>=0.8.1 geojson +jupyter-server>=2.7.2 # not directly required, pinned by Snyk to avoid a vulnerability +lxml matplotlib +owslib +pillow>=10.0.1 # not directly required, pinned by Snyk to avoid a vulnerability pre-commit tornado>=6.3.3 # not directly required, pinned by Snyk to avoid a vulnerability -jupyter-server>=2.7.2 # not directly required, pinned by Snyk to avoid a vulnerability -pillow>=10.0.1 # not directly required, pinned by Snyk to avoid a vulnerability diff --git a/requirements_docs.txt b/requirements_docs.txt index e6f53344..5b4340f6 100644 --- a/requirements_docs.txt +++ b/requirements_docs.txt @@ -2,12 +2,12 @@ birdhouse-birdy>=0.8.1 ipython matplotlib nbsphinx +pillow>=10.0.1 # not directly required, pinned by Snyk to avoid a vulnerability pywps>=4.5.1 +setuptools>=65.5.1 # not directly required, pinned by Snyk to avoid a vulnerability sphinx>=4.0 sphinxcontrib-bibtex unidecode xclim==0.43 -pillow>=10.0.1 # not directly required, pinned by Snyk to avoid a vulnerability -setuptools>=65.5.1 # not directly required, pinned by Snyk to avoid a vulnerability werkzeug>=3.0.1 # not directly required, pinned by Snyk to avoid a vulnerability tornado>=6.3.3 # not directly required, pinned by Snyk to avoid a vulnerability diff --git a/setup.cfg b/setup.cfg index 46f4214e..b61a21e1 100644 --- a/setup.cfg +++ b/setup.cfg @@ -23,18 +23,19 @@ replace = "version": "{new_version}", universal = 1 [tool:pytest] -addopts = +addopts = + --color=yes --strict --tb=native python_files = test_*.py -markers = +markers = online: mark test to need internet connection slow: mark test to be slow [flake8] ignore = F401,E402,E203,W503 max-line-length = 120 -exclude = +exclude = .git __pycache__ docs/source/conf.py @@ -42,10 +43,10 @@ exclude = dist src tests -rst-directives = +rst-directives = bibliography autolink-skip -rst-roles = +rst-roles = doc mod py:attr @@ -64,7 +65,7 @@ rst-roles = cite:p cite:t cite:ts -extend-ignore = +extend-ignore = RST399 RST201 RST203 @@ -75,7 +76,7 @@ extend-ignore = [pycodestyle] count = False exclude = docs/source/conf.py -ignore = +ignore = E226 E402 E501 diff --git a/setup.py b/setup.py index 809bb19e..013f60ae 100644 --- a/setup.py +++ b/setup.py @@ -28,20 +28,21 @@ dev_reqs = [line.strip() for line in open("requirements_dev.txt")] classifiers = [ - "Development Status :: 3 - Alpha", + "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Intended Audience :: Science/Research", - "Operating System :: MacOS :: MacOS X", - "Operating System :: POSIX", - "Programming Language :: Python", + "License :: OSI Approved :: Apache Software License", + "Natural Language :: English", "Natural Language :: English", + "Operating System :: MacOS :: MacOS X", + "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", + "Programming Language :: Python", "Topic :: Scientific/Engineering :: Atmospheric Science", - "License :: OSI Approved :: Apache Software License", ] setup( @@ -56,12 +57,13 @@ python_requires=REQUIRES_PYTHON, classifiers=classifiers, license="Apache Software License 2.0", - license_files=["LICENSE.txt"], + license_files=["LICENSE"], keywords="wps pywps birdhouse finch", packages=find_namespace_packages(".", include=["finch*"]), include_package_data=True, package_data={"finch": ["*.yml"]}, install_requires=requirements, + test_suite="tests", extras_require={ "dev": dev_reqs, # pip install ".[dev]" }, diff --git a/tests/_common.py b/tests/_common.py index 52e947cb..d9e99af8 100644 --- a/tests/_common.py +++ b/tests/_common.py @@ -1,6 +1,7 @@ # noqa: D100 from pathlib import Path +import lxml.etree from pywps import get_ElementMakerForVersion from pywps.app.basic import get_xpath_ns from pywps.tests import WpsClient, WpsTestResponse @@ -49,7 +50,7 @@ def get_output(doc): # noqa: D103 return output -def get_metalinks(doc): +def get_metalinks(doc: lxml.etree.Element): """Return a dictionary of metaurls found in metalink XML, keyed by their file name. Parameters