From 56fb754f6f167dd972f89c64899c9672d3e98847 Mon Sep 17 00:00:00 2001 From: Jordan Cook Date: Wed, 14 Jul 2021 12:31:57 -0500 Subject: [PATCH 1/4] Add Conda badge and update contributing guide with more post-release steps --- CONTRIBUTING.md | 16 ++++++++++++---- README.md | 1 + 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 524d6d2d..60395fda 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -80,13 +80,21 @@ Here are some general guidelines for submitting a pull request: - Submit the PR to be merged into the `main` branch. ### Releases -For maintainers: +Notes for maintainers on publishing new releases: Releases are based on git tags. GitHub Actions will build and deploy packages to PyPi on tagged commits on the `main` branch. Release steps: -- Update the version in `pyinaturalist/__init__.py` +- Update the version in both `pyproject.toml` and `pyinaturalist/__init__.py` - Update the release notes in `HISTORY.md` - Merge changes into the `main` branch -- Push a new tag, e.g.: `git tag v0.1 && git push origin --tags` +- Push a new tag, e.g.: `git tag v0.1.0 && git push upstream --tags` - This will trigger a deployment. Verify that this completes successfully and that the new version - can be installed from pypi with `pip install` + can be installed from PyPI with `pip install pyinaturalist`. +- Verify that the docs are built and published to [Read The Docs](https://pyinaturalist.readthedocs.io). +- A PR for a new Conda release will be created by a bot on the [pyinaturalist-feedstock](https://github.com/conda-forge/pyinaturalist-feedstock/) + repo. It may take a couple hours after PyPI deployment for this to happen. Typically this will be + auto-merged and built without any manual action required. Just verify that this completes successfully + and that the new version can be installed from conda-forge with `conda install -c conda-forge pyinaturalist`. + - If new depedencies have been added, then those must also be added to the [conda recipe](https://github.com/conda-forge/pyinaturalist-feedstock/blob/master/recipe/meta.yaml). +- Update and build the Docker image for [pyinaturalist-notebook](https://github.com/JWCook/pyinaturalist-notebook). + - TODO: This should be fully automated, and triggered after the Conda build rather than the PyPI build. \ No newline at end of file diff --git a/README.md b/README.md index f56c094a..ce6e4a67 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ [![Coverage Status](https://coveralls.io/repos/github/niconoe/pyinaturalist/badge.svg?branch=main)](https://coveralls.io/github/niconoe/pyinaturalist?branch=main) [![PyPI](https://img.shields.io/pypi/v/pyinaturalist?color=blue)](https://pypi.org/project/pyinaturalist) +[![Conda](https://img.shields.io/conda/vn/conda-forge/pyinaturalist?color=blue)](https://anaconda.org/conda-forge/pyinaturalist) [![PyPI - Python Versions](https://img.shields.io/pypi/pyversions/pyinaturalist)](https://pypi.org/project/pyinaturalist) [![PyPI - Format](https://img.shields.io/pypi/format/pyinaturalist?color=blue)](https://pypi.org/project/pyinaturalist) From 7dfc0f27fe5dfce69e4e355cb78a50914d35ba71 Mon Sep 17 00:00:00 2001 From: Jordan Cook Date: Wed, 14 Jul 2021 13:51:15 -0500 Subject: [PATCH 2/4] Add sphinx-panels and fontawesome icons; fix html_favicon and logo --- docs/_static/colors.sass | 6 ++ docs/{images => _static}/favicon.ico | Bin docs/_static/pyinaturalist_logo.png | Bin 0 -> 89703 bytes docs/conf.py | 15 +++-- poetry.lock | 64 +++++++++++++++------- pyinaturalist/models/comment.py | 2 +- pyinaturalist/models/controlled_term.py | 6 +- pyinaturalist/models/identification.py | 2 +- pyinaturalist/models/life_list.py | 4 +- pyinaturalist/models/observation.py | 4 +- pyinaturalist/models/observation_field.py | 4 +- pyinaturalist/models/photo.py | 2 +- pyinaturalist/models/place.py | 2 +- pyinaturalist/models/project.py | 8 +-- pyinaturalist/models/search.py | 2 +- pyinaturalist/models/taxon.py | 10 ++-- pyinaturalist/models/user.py | 2 +- pyproject.toml | 6 +- 18 files changed, 87 insertions(+), 52 deletions(-) create mode 100644 docs/_static/colors.sass rename docs/{images => _static}/favicon.ico (100%) create mode 100644 docs/_static/pyinaturalist_logo.png diff --git a/docs/_static/colors.sass b/docs/_static/colors.sass new file mode 100644 index 00000000..927d69e0 --- /dev/null +++ b/docs/_static/colors.sass @@ -0,0 +1,6 @@ +/* Main theme colors */ +.md-primary {color: var(--color-brand-primary)} +.md-secondary {color: var(--color-brand-content)} + +/* Color for Font Awesome icons */ +span.fa {color: var(--color-brand-primary)} \ No newline at end of file diff --git a/docs/images/favicon.ico b/docs/_static/favicon.ico similarity index 100% rename from docs/images/favicon.ico rename to docs/_static/favicon.ico diff --git a/docs/_static/pyinaturalist_logo.png b/docs/_static/pyinaturalist_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bb309fa7d97809620bc6c51f2463e9a866f415de GIT binary patch literal 89703 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%0Dkm+QrFTR*OHo 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 TQBryf5_t4=0.15.2)"] [[package]] name = "bleach" -version = "3.3.0" +version = "3.3.1" description = "An easy safelist-based HTML-sanitizing tool." category = "main" optional = true @@ -381,18 +381,17 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes [[package]] name = "importlib-resources" -version = "5.2.0" +version = "3.0.0" description = "Read resources from Python packages" -category = "dev" +category = "main" optional = false -python-versions = ">=3.6" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" [package.dependencies] -zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} +zipp = {version = ">=0.4", markers = "python_version < \"3.8\""} [package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"] +docs = ["sphinx", "rst.linker", "jaraco.packaging"] [[package]] name = "iniconfig" @@ -1233,7 +1232,7 @@ python-versions = ">=3.6" [[package]] name = "sphinx" -version = "4.1.0" +version = "4.1.1" description = "Python documentation generator" category = "main" optional = true @@ -1252,10 +1251,10 @@ requests = ">=2.5.0" snowballstemmer = ">=1.1" sphinxcontrib-applehelp = "*" sphinxcontrib-devhelp = "*" -sphinxcontrib-htmlhelp = "*" +sphinxcontrib-htmlhelp = ">=2.0.0" sphinxcontrib-jsmath = "*" sphinxcontrib-qthelp = "*" -sphinxcontrib-serializinghtml = "*" +sphinxcontrib-serializinghtml = ">=1.1.5" [package.extras] docs = ["sphinxcontrib-websupport"] @@ -1321,6 +1320,25 @@ sphinx = ">=3" doc = ["myst-parser", "furo"] test = ["pytest", "pytest-cov", "pytest-xdist"] +[[package]] +name = "sphinx-panels" +version = "0.6.0" +description = "A sphinx extension for creating panels in a grid layout." +category = "main" +optional = true +python-versions = "*" + +[package.dependencies] +docutils = "*" +importlib-resources = {version = ">=3.0.0,<3.1.0", markers = "python_version < \"3.7\""} +sphinx = ">=2,<5" + +[package.extras] +code_style = ["pre-commit (>=2.7.0,<2.8.0)"] +live-dev = ["sphinx-autobuild", "web-compile (>=0.2.0,<0.3.0)"] +testing = ["pytest (>=6.0.1,<6.1.0)", "pytest-regressions (>=2.0.1,<2.1.0)"] +themes = ["sphinx-rtd-theme", "pydata-sphinx-theme (>=0.4.0,<0.5.0)", "sphinx-book-theme (>=0.0.36,<0.1.0)", "myst-parser (>=0.12.9,<0.13.0)"] + [[package]] name = "sphinxcontrib-apidoc" version = "0.3.0" @@ -1505,7 +1523,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "virtualenv" -version = "20.5.0" +version = "20.6.0" description = "Virtual Python Environment builder" category = "dev" optional = false @@ -1554,12 +1572,12 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes [extras] all = [] -docs = ["furo", "linkify-it-py", "myst-parser", "nbsphinx", "sphinx", "sphinx-automodapi", "sphinx-autodoc-typehints", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxcontrib-apidoc"] +docs = ["furo", "linkify-it-py", "myst-parser", "nbsphinx", "sphinx", "sphinx-automodapi", "sphinx-panels", "sphinx-autodoc-typehints", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxcontrib-apidoc"] [metadata] lock-version = "1.1" python-versions = "^3.6" -content-hash = "5a1cf256fc0de385edc70c3f393f23c06e2a0d6290a6f9b3281e448d154fc005" +content-hash = "4026546db8a24b8e6b321aca8385c30c8b0095d20d6e4ce57f3473f6d6750c53" [metadata.files] alabaster = [ @@ -1608,8 +1626,8 @@ black = [ {file = "black-21.6b0.tar.gz", hash = "sha256:dc132348a88d103016726fe360cb9ede02cecf99b76e3660ce6c596be132ce04"}, ] bleach = [ - {file = "bleach-3.3.0-py2.py3-none-any.whl", hash = "sha256:6123ddc1052673e52bab52cdc955bcb57a015264a1c57d37bea2f6b817af0125"}, - {file = "bleach-3.3.0.tar.gz", hash = "sha256:98b3170739e5e83dd9dc19633f074727ad848cbedb6026708c8ac2d3b697a433"}, + {file = "bleach-3.3.1-py2.py3-none-any.whl", hash = "sha256:ae976d7174bba988c0b632def82fdc94235756edfb14e6558a9c5be555c9fb78"}, + {file = "bleach-3.3.1.tar.gz", hash = "sha256:306483a5a9795474160ad57fce3ddd1b50551e981eed8e15a582d34cef28aafa"}, ] certifi = [ {file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"}, @@ -1807,8 +1825,8 @@ importlib-metadata = [ {file = "importlib_metadata-4.6.1.tar.gz", hash = "sha256:079ada16b7fc30dfbb5d13399a5113110dab1aa7c2bc62f66af75f0b717c8cac"}, ] importlib-resources = [ - {file = "importlib_resources-5.2.0-py3-none-any.whl", hash = "sha256:a0143290bef3cbc99de9e40176e4987780939a955b8632f02ce6c935f42e9bfc"}, - {file = "importlib_resources-5.2.0.tar.gz", hash = "sha256:22a2c42d8c6a1d30aa8a0e1f57293725bfd5c013d562585e46aff469e0ff78b3"}, + {file = "importlib_resources-3.0.0-py2.py3-none-any.whl", hash = "sha256:d028f66b66c0d5732dae86ba4276999855e162a749c92620a38c1d779ed138a7"}, + {file = "importlib_resources-3.0.0.tar.gz", hash = "sha256:19f745a6eca188b490b1428c8d1d4a0d2368759f32370ea8fb89cad2ab1106c3"}, ] iniconfig = [ {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, @@ -2252,8 +2270,8 @@ soupsieve = [ {file = "soupsieve-2.2.1.tar.gz", hash = "sha256:052774848f448cf19c7e959adf5566904d525f33a3f8b6ba6f6f8f26ec7de0cc"}, ] sphinx = [ - {file = "Sphinx-4.1.0-py3-none-any.whl", hash = "sha256:51028bb0d3340eb80bcc1a2d614e8308ac78d226e6b796943daf57920abc1aea"}, - {file = "Sphinx-4.1.0.tar.gz", hash = "sha256:4219f14258ca5612a0c85ed9b7222d54da69724d7e9dd92d1819ad1bf65e1ad2"}, + {file = "Sphinx-4.1.1-py3-none-any.whl", hash = "sha256:3d513088236eef51e5b0adb78b0492eb22cc3b8ccdb0b36dd021173b365d4454"}, + {file = "Sphinx-4.1.1.tar.gz", hash = "sha256:23c846a1841af998cb736218539bb86d16f5eb95f5760b1966abcd2d584e62b8"}, ] sphinx-autodoc-typehints = [ {file = "sphinx-autodoc-typehints-1.12.0.tar.gz", hash = "sha256:193617d9dbe0847281b1399d369e74e34cd959c82e02c7efde077fca908a9f52"}, @@ -2271,6 +2289,10 @@ sphinx-inline-tabs = [ {file = "sphinx_inline_tabs-2021.4.11b9-py3-none-any.whl", hash = "sha256:5fddeefb97630df3334341a2fd5434f62ed6d76301ff30a81cb50363abf98fb9"}, {file = "sphinx_inline_tabs-2021.4.11b9.tar.gz", hash = "sha256:09267b9980b405bada41e63f9912769a394731e0e015068cda7feab1a13f8fe5"}, ] +sphinx-panels = [ + {file = "sphinx-panels-0.6.0.tar.gz", hash = "sha256:d36dcd26358117e11888f7143db4ac2301ebe90873ac00627bf1fe526bf0f058"}, + {file = "sphinx_panels-0.6.0-py3-none-any.whl", hash = "sha256:bd64afaf85c07f8096d21c8247fc6fd757e339d1be97832c8832d6ae5ed2e61d"}, +] sphinxcontrib-apidoc = [ {file = "sphinxcontrib-apidoc-0.3.0.tar.gz", hash = "sha256:729bf592cf7b7dd57c4c05794f732dc026127275d785c2a5494521fdde773fb9"}, {file = "sphinxcontrib_apidoc-0.3.0-py2.py3-none-any.whl", hash = "sha256:6671a46b2c6c5b0dca3d8a147849d159065e50443df79614f921b42fbd15cb09"}, @@ -2408,8 +2430,8 @@ urllib3 = [ {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"}, ] virtualenv = [ - {file = "virtualenv-20.5.0-py2.py3-none-any.whl", hash = "sha256:b7afa7f32abbf7dd4c24269a596cfbb0a422bb83c47215a785a7bf607cb88e1b"}, - {file = "virtualenv-20.5.0.tar.gz", hash = "sha256:6b0e3eeb6cb081c9c81ec85633785e29edcdf6ff271d70e0d1e2bd616495c08c"}, + {file = "virtualenv-20.6.0-py2.py3-none-any.whl", hash = "sha256:e4fc84337dce37ba34ef520bf2d4392b392999dbe47df992870dc23230f6b758"}, + {file = "virtualenv-20.6.0.tar.gz", hash = "sha256:51df5d8a2fad5d1b13e088ff38a433475768ff61f202356bb9812c454c20ae45"}, ] wcwidth = [ {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, diff --git a/pyinaturalist/models/comment.py b/pyinaturalist/models/comment.py index dc3a7887..6290dc5f 100644 --- a/pyinaturalist/models/comment.py +++ b/pyinaturalist/models/comment.py @@ -6,7 +6,7 @@ @define_model class Comment(BaseModel): - """📝 An observation comment, based on the schema of comments + """:fa:`comment` An observation comment, based on the schema of comments from `GET /observations `_. """ diff --git a/pyinaturalist/models/controlled_term.py b/pyinaturalist/models/controlled_term.py index 51b3fe7a..06869e08 100644 --- a/pyinaturalist/models/controlled_term.py +++ b/pyinaturalist/models/controlled_term.py @@ -6,7 +6,7 @@ @define_model class Annotation(BaseModel): - """📝 An annotation, meaning a **controlled term value** applied by a **user** to an **observation**. + """:fa:`tag` An annotation, meaning a **controlled term value** applied by a **user** to an **observation**. Based on the schema of annotations from `GET /observations `_. """ @@ -45,7 +45,7 @@ def __str__(self) -> str: @define_model class ControlledTermValue(BaseModel): - """📋 A controlled term **value**, based on the schema of + """:fa:`tag` A controlled term **value**, based on the schema of `GET /controlled_terms `_. """ @@ -62,7 +62,7 @@ def __str__(self): @define_model class ControlledTerm(BaseModel): - """📋 A controlled term, based on the schema of + """:fa:`tag` A controlled term, based on the schema of `GET /controlled_terms `_. """ diff --git a/pyinaturalist/models/identification.py b/pyinaturalist/models/identification.py index 802071d0..e3fe6085 100644 --- a/pyinaturalist/models/identification.py +++ b/pyinaturalist/models/identification.py @@ -14,7 +14,7 @@ @define_model class Identification(BaseModel): - """🔎 An observation identification, based on the schema of + """:fa:`fingerprint` An observation identification, based on the schema of `GET /identifications `_. """ diff --git a/pyinaturalist/models/life_list.py b/pyinaturalist/models/life_list.py index cd14cb5a..639b07c0 100644 --- a/pyinaturalist/models/life_list.py +++ b/pyinaturalist/models/life_list.py @@ -14,7 +14,7 @@ @define_model class LifeListTaxon(TaxonCount): - """🐦 A single :py:class:`.Taxon` in a user's :py:class:`.LifeList`""" + """:fa:`dove` :fa:`list` A single :py:class:`.Taxon` in a user's :py:class:`.LifeList`""" descendant_obs_count: int = field(default=0, doc='Number of observations of taxon children') direct_obs_count: int = field( @@ -42,7 +42,7 @@ def __str__(self) -> str: @define_model_collection class LifeList(TaxonCounts): - """🐦✅📓 A user's life list, based on the schema of ``GET /observations/taxonomy``""" + """:fa:`dove` :fa:`list` A user's life list, based on the schema of ``GET /observations/taxonomy``""" count_without_taxon: int = field(default=0) data: List[LifeListTaxon] = field(factory=list, converter=LifeListTaxon.from_json_list) # type: ignore diff --git a/pyinaturalist/models/observation.py b/pyinaturalist/models/observation.py index 628cb39d..abc27037 100644 --- a/pyinaturalist/models/observation.py +++ b/pyinaturalist/models/observation.py @@ -38,7 +38,7 @@ @define(auto_attribs=False, init=False, field_transformer=add_lazy_attrs) class Observation(BaseModel): - """👤🔎🐦 An observation, based the schema of + """:fa:`binoculars` An observation, based the schema of `GET /observations `_. """ @@ -232,7 +232,7 @@ def __str__(self) -> str: @define_model_collection class Observations(BaseModelCollection): - """👥🔍🐦 A collection of observations""" + """:fa:`binoculars` A collection of observations""" data: List[Observation] = field(factory=list, converter=Observation.from_json_list) diff --git a/pyinaturalist/models/observation_field.py b/pyinaturalist/models/observation_field.py index 46ba36fc..437e1c98 100644 --- a/pyinaturalist/models/observation_field.py +++ b/pyinaturalist/models/observation_field.py @@ -28,7 +28,7 @@ @define_model class ObservationField(BaseModel): - """📋 An observation field **definition**, based on the schema of + """:fa:`tag` An observation field **definition**, based on the schema of `GET /observation_fields `_. """ @@ -59,7 +59,7 @@ def __str__(self) -> str: @define_model class ObservationFieldValue(BaseModel): - """📝 An observation field **value**, based on the schema of ``Observation.ofvs`` + """:fa:`tag` An observation field **value**, based on the schema of ``Observation.ofvs`` from `GET /observations `_. """ diff --git a/pyinaturalist/models/photo.py b/pyinaturalist/models/photo.py index 098bcc33..c5330886 100644 --- a/pyinaturalist/models/photo.py +++ b/pyinaturalist/models/photo.py @@ -10,7 +10,7 @@ @define_model class Photo(BaseModel): - """📷 An observation photo, based on the schema of photos from: + """:fa:`camera` An observation photo, based on the schema of photos from: * `GET /observations `_ * `GET /taxa ` diff --git a/pyinaturalist/models/place.py b/pyinaturalist/models/place.py index ab169e6f..0c46875e 100644 --- a/pyinaturalist/models/place.py +++ b/pyinaturalist/models/place.py @@ -20,7 +20,7 @@ def convert_optional_lat_long(obj: Union[Dict, List, None, str]): @define_model class Place(BaseModel): - """📍 A curated or community-contributed place. Handles data from the following endpoints: + """:fa:`map-marker-alt` A curated or community-contributed place. Handles data from the following endpoints: * `GET /places/{id} `_ * `GET /places/nearby `_ diff --git a/pyinaturalist/models/project.py b/pyinaturalist/models/project.py index 4342bfa3..1387ca50 100644 --- a/pyinaturalist/models/project.py +++ b/pyinaturalist/models/project.py @@ -24,7 +24,7 @@ @define_model class ProjectObservation(BaseModel): - """👤🔎🐦 Metadata about an observation that has been added to a project""" + """:fa:`binoculars` Metadata about an observation that has been added to a project""" preferences: Dict = field(factory=dict) # Example: {'allows_curator_coordinate_access': True} project: Dict = field(factory=dict) # Example: {'id': 24237} @@ -37,7 +37,7 @@ class ProjectObservation(BaseModel): @define_model class ProjectObservationField(ObservationField): - """📋 An :py:class:`.ObservationField` with additional project-specific information""" + """:fa:`tag` An :py:class:`.ObservationField` with additional project-specific information""" project_observation_field_id: int = field(default=None) position: int = field(default=None) @@ -55,7 +55,7 @@ def from_json(cls, value: JsonResponse, **kwargs) -> 'ProjectObservationField': @define_model class ProjectUser(User): - """👤 A :py:class:`.User` with additional project-specific information""" + """:fa:`user` A :py:class:`.User` with additional project-specific information""" project_id: int = field(default=None) project_user_id: int = field(default=None) @@ -73,7 +73,7 @@ def from_json(cls, value: JsonResponse, **kwargs) -> 'ProjectUser': @define_model class Project(BaseModel): - """👥 An iNaturalist project, based on the schema of + """:fa:`users` An iNaturalist project, based on the schema of `GET /projects `_. """ diff --git a/pyinaturalist/models/search.py b/pyinaturalist/models/search.py index 22f8bc44..4b946133 100644 --- a/pyinaturalist/models/search.py +++ b/pyinaturalist/models/search.py @@ -10,7 +10,7 @@ @define_model class SearchResult(BaseModel): - """🔍 A search result of any type, based on the schema of + """:fa:`search` A search result of any type, based on the schema of `GET /search `_. """ diff --git a/pyinaturalist/models/taxon.py b/pyinaturalist/models/taxon.py index 2348a48a..8e4f8695 100644 --- a/pyinaturalist/models/taxon.py +++ b/pyinaturalist/models/taxon.py @@ -34,7 +34,7 @@ # TODO: Include codes from other sources? Currently only including IUCN codes. @define_model class ConservationStatus(BaseModel): - """‼️ The conservation status of a taxon in a given location, based on the schema of: + """:fa:`exclamation-triangle` The conservation status of a taxon in a given location, based on the schema of: * ``Taxon.conservation_status`` from `GET /taxa `_ * ``Observation.taxon.conservation_statuses`` from `GET /observations `_ @@ -75,7 +75,7 @@ class ConservationStatus(BaseModel): @define_model class EstablishmentMeans(BaseModel): - """‼️ The establishment means for a taxon in a given location""" + """:fa:`exclamation-triangle` The establishment means for a taxon in a given location""" establishment_means: str = field( default=None, options=ESTABLISTMENT_MEANS, doc='Establishment means description' @@ -90,7 +90,7 @@ def __str__(self) -> str: @define_model class Taxon(BaseModel): - """🐦 An iNaturalist taxon, based on the schema of + """:fa:`dove` An iNaturalist taxon, based on the schema of `GET /taxa `_. Can be constructed from either a full or partial JSON record. Examples of partial records @@ -266,7 +266,7 @@ def __str__(self) -> str: @define_model class TaxonCount(Taxon): - """🐦#️⃣ A :py:class:`.Taxon` with an associated count, used in a :py:class:`.TaxonCounts` + """:fa:`dove` :fa:`list` A :py:class:`.Taxon` with an associated count, used in a :py:class:`.TaxonCounts` collection """ @@ -296,7 +296,7 @@ def __str__(self) -> str: @define_model_collection class TaxonCounts(BaseModelCollection): - """🐦#️⃣📓 A collection of taxa with an associated counts. Used with + """:fa:`dove` :fa:`list` A collection of taxa with an associated counts. Used with `GET /observations/species_counts `_. as well as :py:class:`.LifeList`. """ diff --git a/pyinaturalist/models/user.py b/pyinaturalist/models/user.py index 60e33d38..0f8e9a1b 100644 --- a/pyinaturalist/models/user.py +++ b/pyinaturalist/models/user.py @@ -7,7 +7,7 @@ @define_model class User(BaseModel): - """👤 An iNaturalist user, based on the schema of + """:fa:`user` An iNaturalist user, based on the schema of `GET /users/{id} `_. """ diff --git a/pyproject.toml b/pyproject.toml index 161b4efd..d75cec58 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ pyrate-limiter = ">=2.3.3" rich = ">=10.0" # Documentation dependencies needed for Readthedocs builds -furo = {version = ">=2021.6.24-beta.37", optional = true} +furo = {version = "2021.7.5b38", optional = true} linkify-it-py = {version = "^1.0.1", optional = true} myst-parser = {version = "^0.15.1", optional = true} nbsphinx = { version = "^0.8.5", optional = true } @@ -47,12 +47,14 @@ sphinx-automodapi = { version=">=0.13", optional = true} sphinx-autodoc-typehints = { version = "^1.11", optional = true } sphinx-copybutton = { version = ">=0.3,<0.5", optional = true } sphinx-inline-tabs = {version = "^2021.4.11-beta.9", optional = true, python = ">=3.8"} +sphinx-panels = {version = "^0.6.0", optional = true} sphinxcontrib-apidoc = { version = "^0.3", optional = true } [tool.poetry.extras] all = [] # Placeholder for optional dependencies needed to run examples in docs docs = ["furo", "linkify-it-py", "myst-parser", "nbsphinx", "sphinx", "sphinx-automodapi", - "sphinx-autodoc-typehints", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxcontrib-apidoc"] + "sphinx-autodoc-typehints", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-panels", + "sphinxcontrib-apidoc"] [tool.poetry.dev-dependencies] black = {version = "21.6b0", python = ">=3.6.2, <3.10"} From 61969b39acf57202ba81f1ca2fbe9de5439c9d54 Mon Sep 17 00:00:00 2001 From: Jordan Cook Date: Wed, 14 Jul 2021 17:21:33 -0500 Subject: [PATCH 3/4] Add ipython to doc dependencies to get ipython3 pygments lexer --- poetry.lock | 26 +++++++++++++------------- pyproject.toml | 3 ++- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/poetry.lock b/poetry.lock index 70881557..15fa23df 100644 --- a/poetry.lock +++ b/poetry.lock @@ -18,7 +18,7 @@ python-versions = "*" name = "appnope" version = "0.1.2" description = "Disable App Nap on macOS >= 10.9" -category = "dev" +category = "main" optional = false python-versions = "*" @@ -67,7 +67,7 @@ pytz = ">=2015.7" name = "backcall" version = "0.2.0" description = "Specifications for callback functions passed in to an API" -category = "dev" +category = "main" optional = false python-versions = "*" @@ -405,7 +405,7 @@ python-versions = "*" name = "ipython" version = "7.25.0" description = "IPython: Productive Interactive Computing" -category = "dev" +category = "main" optional = false python-versions = ">=3.7" @@ -458,7 +458,7 @@ colors = ["colorama (>=0.4.3,<0.5.0)"] name = "jedi" version = "0.18.0" description = "An autocompletion tool for Python that can be used for text editors." -category = "dev" +category = "main" optional = false python-versions = ">=3.6" @@ -623,7 +623,7 @@ python-versions = ">=3.6" name = "matplotlib-inline" version = "0.1.2" description = "Inline Matplotlib backend for Jupyter" -category = "dev" +category = "main" optional = false python-versions = ">=3.5" @@ -833,7 +833,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" name = "parso" version = "0.8.2" description = "A Python Parser" -category = "dev" +category = "main" optional = false python-versions = ">=3.6" @@ -861,7 +861,7 @@ python-versions = ">=2.6" name = "pexpect" version = "4.8.0" description = "Pexpect allows easy control of interactive console applications." -category = "dev" +category = "main" optional = false python-versions = "*" @@ -872,7 +872,7 @@ ptyprocess = ">=0.5" name = "pickleshare" version = "0.7.5" description = "Tiny 'shelve'-like database with concurrency support" -category = "dev" +category = "main" optional = false python-versions = "*" @@ -920,7 +920,7 @@ virtualenv = ">=20.0.8" name = "prompt-toolkit" version = "3.0.19" description = "Library for building powerful interactive command lines in Python" -category = "dev" +category = "main" optional = false python-versions = ">=3.6.1" @@ -931,7 +931,7 @@ wcwidth = "*" name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" -category = "dev" +category = "main" optional = false python-versions = "*" @@ -1546,7 +1546,7 @@ testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", name = "wcwidth" version = "0.2.5" description = "Measures the displayed width of unicode strings in a terminal" -category = "dev" +category = "main" optional = false python-versions = "*" @@ -1572,12 +1572,12 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes [extras] all = [] -docs = ["furo", "linkify-it-py", "myst-parser", "nbsphinx", "sphinx", "sphinx-automodapi", "sphinx-panels", "sphinx-autodoc-typehints", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxcontrib-apidoc"] +docs = ["furo", "ipython", "linkify-it-py", "myst-parser", "nbsphinx", "sphinx", "sphinx-automodapi", "sphinx-autodoc-typehints", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-panels", "sphinxcontrib-apidoc"] [metadata] lock-version = "1.1" python-versions = "^3.6" -content-hash = "4026546db8a24b8e6b321aca8385c30c8b0095d20d6e4ce57f3473f6d6750c53" +content-hash = "60b7cce63677cee0a39335d42e9b9c04f3725a0b469d9128a75a50127330372e" [metadata.files] alabaster = [ diff --git a/pyproject.toml b/pyproject.toml index d75cec58..7ff31503 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,6 +39,7 @@ rich = ">=10.0" # Documentation dependencies needed for Readthedocs builds furo = {version = "2021.7.5b38", optional = true} +ipython = {version = "^7.25.0", optional = true, python = ">=3.7"} linkify-it-py = {version = "^1.0.1", optional = true} myst-parser = {version = "^0.15.1", optional = true} nbsphinx = { version = "^0.8.5", optional = true } @@ -52,7 +53,7 @@ sphinxcontrib-apidoc = { version = "^0.3", optional = true } [tool.poetry.extras] all = [] # Placeholder for optional dependencies needed to run examples in docs -docs = ["furo", "linkify-it-py", "myst-parser", "nbsphinx", "sphinx", "sphinx-automodapi", +docs = ["furo", "ipython", "linkify-it-py", "myst-parser", "nbsphinx", "sphinx", "sphinx-automodapi", "sphinx-autodoc-typehints", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-panels", "sphinxcontrib-apidoc"] From f886c87534d6ed2418d439f032a1124d7f8f9697 Mon Sep 17 00:00:00 2001 From: Jordan Cook Date: Wed, 14 Jul 2021 17:31:28 -0500 Subject: [PATCH 4/4] Fix issue with Font Awesome icons not rendering correctly on readthedocs.io --- docs/_static/{colors.sass => colors.css} | 3 ++- docs/conf.py | 3 ++- pyinaturalist/models/identification.py | 2 +- pyinaturalist/models/life_list.py | 4 ++-- pyinaturalist/models/place.py | 2 +- pyinaturalist/models/taxon.py | 6 +++--- 6 files changed, 11 insertions(+), 9 deletions(-) rename docs/_static/{colors.sass => colors.css} (63%) diff --git a/docs/_static/colors.sass b/docs/_static/colors.css similarity index 63% rename from docs/_static/colors.sass rename to docs/_static/colors.css index 927d69e0..42f69d47 100644 --- a/docs/_static/colors.sass +++ b/docs/_static/colors.css @@ -3,4 +3,5 @@ .md-secondary {color: var(--color-brand-content)} /* Color for Font Awesome icons */ -span.fa {color: var(--color-brand-primary)} \ No newline at end of file +span.fa {color: var(--color-brand-primary)} +span.fas {color: var(--color-brand-primary)} diff --git a/docs/conf.py b/docs/conf.py index ec343582..c98d9c94 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -140,9 +140,10 @@ html_js_files = ['collapsible_container.js'] html_css_files = [ 'collapsible_container.css', - 'colors.sass', + 'colors.css', 'table.css', 'https://use.fontawesome.com/releases/v5.15.3/css/all.css', + 'https://use.fontawesome.com/releases/v5.15.3/css/v4-shims.css', ] html_show_sphinx = False pygments_style = 'friendly' diff --git a/pyinaturalist/models/identification.py b/pyinaturalist/models/identification.py index e3fe6085..eb7772f5 100644 --- a/pyinaturalist/models/identification.py +++ b/pyinaturalist/models/identification.py @@ -14,7 +14,7 @@ @define_model class Identification(BaseModel): - """:fa:`fingerprint` An observation identification, based on the schema of + """:fa:`fingerprint,style=fas` An observation identification, based on the schema of `GET /identifications `_. """ diff --git a/pyinaturalist/models/life_list.py b/pyinaturalist/models/life_list.py index 639b07c0..e2f878ba 100644 --- a/pyinaturalist/models/life_list.py +++ b/pyinaturalist/models/life_list.py @@ -14,7 +14,7 @@ @define_model class LifeListTaxon(TaxonCount): - """:fa:`dove` :fa:`list` A single :py:class:`.Taxon` in a user's :py:class:`.LifeList`""" + """:fa:`dove,style=fas` :fa:`list` A single :py:class:`.Taxon` in a user's :py:class:`.LifeList`""" descendant_obs_count: int = field(default=0, doc='Number of observations of taxon children') direct_obs_count: int = field( @@ -42,7 +42,7 @@ def __str__(self) -> str: @define_model_collection class LifeList(TaxonCounts): - """:fa:`dove` :fa:`list` A user's life list, based on the schema of ``GET /observations/taxonomy``""" + """:fa:`dove,style=fas` :fa:`list` A user's life list, based on the schema of ``GET /observations/taxonomy``""" count_without_taxon: int = field(default=0) data: List[LifeListTaxon] = field(factory=list, converter=LifeListTaxon.from_json_list) # type: ignore diff --git a/pyinaturalist/models/place.py b/pyinaturalist/models/place.py index 0c46875e..351744be 100644 --- a/pyinaturalist/models/place.py +++ b/pyinaturalist/models/place.py @@ -20,7 +20,7 @@ def convert_optional_lat_long(obj: Union[Dict, List, None, str]): @define_model class Place(BaseModel): - """:fa:`map-marker-alt` A curated or community-contributed place. Handles data from the following endpoints: + """:fa:`map-marker-alt,style=fas` A curated or community-contributed place. Handles data from the following endpoints: * `GET /places/{id} `_ * `GET /places/nearby `_ diff --git a/pyinaturalist/models/taxon.py b/pyinaturalist/models/taxon.py index 8e4f8695..11688b28 100644 --- a/pyinaturalist/models/taxon.py +++ b/pyinaturalist/models/taxon.py @@ -90,7 +90,7 @@ def __str__(self) -> str: @define_model class Taxon(BaseModel): - """:fa:`dove` An iNaturalist taxon, based on the schema of + """:fa:`dove,style=fas` An iNaturalist taxon, based on the schema of `GET /taxa `_. Can be constructed from either a full or partial JSON record. Examples of partial records @@ -266,7 +266,7 @@ def __str__(self) -> str: @define_model class TaxonCount(Taxon): - """:fa:`dove` :fa:`list` A :py:class:`.Taxon` with an associated count, used in a :py:class:`.TaxonCounts` + """:fa:`dove,style=fas` :fa:`list` A :py:class:`.Taxon` with an associated count, used in a :py:class:`.TaxonCounts` collection """ @@ -296,7 +296,7 @@ def __str__(self) -> str: @define_model_collection class TaxonCounts(BaseModelCollection): - """:fa:`dove` :fa:`list` A collection of taxa with an associated counts. Used with + """:fa:`dove,style=fas` :fa:`list` A collection of taxa with an associated counts. Used with `GET /observations/species_counts `_. as well as :py:class:`.LifeList`. """