.
diff --git a/README.md b/README.md
index ffae947..939a4b6 100644
--- a/README.md
+++ b/README.md
@@ -1,38 +1,88 @@
-# Netatmo GeoPy
-
+[![PyPI version fury.io](https://badge.fury.io/py/netatmo-geopy.svg)](https://pypi.python.org/pypi/netatmo-geopy/)
+[![Documentation Status](https://readthedocs.org/projects/netatmo-geopy/badge/?version=latest)](https://netatmo-geopy.readthedocs.io/en/latest/?badge=latest)
+[![CI/CD](https://github.com/martibosch/netatmo-geopy/actions/workflows/dev.yml/badge.svg)](https://github.com/martibosch/netatmo-geopy/blob/main/.github/workflows/dev.yml)
+[![codecov](https://codecov.io/gh/martibosch/netatmo-geopy/branch/main/graph/badge.svg?token=ZDFCCPJ6AK)](https://codecov.io/gh/martibosch/netatmo-geopy)
+[![GitHub license](https://img.shields.io/github/license/martibosch/netatmo-geopy.svg)](https://github.com/martibosch/netatmo-geopy/blob/main/LICENSE)
-
-
-
-
-
-
-
-
+# Netatmo GeoPy
-
-
-
-
-
-
+Pythonic package to access Netatmo CWS data.
-
+```python
+import netatmo_geopy as nat
+lon_sw, lat_sw, lon_ne, lat_ne = 6.5175, 46.5012, 6.7870, 46.6058
+cws_recorder = nat.CWSRecorder(lon_sw, lat_sw, lon_ne, lat_ne)
+gdf = cws_recorder.get_snapshot_gdf()
+gdf.head()
+```
-Pythonic package to access Netatmo CWS data
+
+
+
+
+
+ |
+ 2022-02-12T19:13 |
+ geometry |
+
+
+ station_id |
+ |
+ |
+
+
+
+
+ 02:00:00:01:5e:e0 |
+ 6.6 |
+ POINT (6.82799 46.47089) |
+
+
+ 02:00:00:22:c0:c0 |
+ 4.9 |
+ POINT (6.82904 46.47005) |
+
+
+ 02:00:00:2f:0b:16 |
+ 3.5 |
+ POINT (6.82516 46.47294) |
+
+
+ 02:00:00:59:00:2a |
+ 3.8 |
+ POINT (6.84547 46.46779) |
+
+
+ 02:00:00:52:ed:5a |
+ 3.8 |
+ POINT (6.87359 46.47067) |
+
+
+
+
+```python
+nat.plot_snapshot(gdf)
+```
-## Features
+![lausanne-snapshot](https://github.com/martibosch/netatmo-geopy/blob/main/docs/figures/lausanne.png)
-* TODO
+See [the user guide](https://martibosch.github.io/netatmo-geopy/user-guide) for a more thorough overview of netatmo-geopy.
-## Credits
+## Acknowledgements
-This package was created with [Cookiecutter](https://github.com/audreyr/cookiecutter) and the [zillionare/cookiecutter-pypackage](https://github.com/zillionare/cookiecutter-pypackage) project template.
+* This package was created with [Cookiecutter](https://github.com/audreyr/cookiecutter) and the [zillionare/cookiecutter-pypackage](https://github.com/zillionare/cookiecutter-pypackage) project template.
diff --git a/docs/figures/lausanne.png b/docs/figures/lausanne.png
new file mode 100644
index 0000000..cedcc35
Binary files /dev/null and b/docs/figures/lausanne.png differ
diff --git a/docs/requirements.txt b/docs/requirements.txt
new file mode 100644
index 0000000..3f88008
--- /dev/null
+++ b/docs/requirements.txt
@@ -0,0 +1,3 @@
+mkdocs==1.2.3
+mkdocs-include-markdown-plugin==1.0.0
+mkdocstrings==0.13.6
diff --git a/docs/usage.md b/docs/usage.md
index ab3dbdb..0002844 100644
--- a/docs/usage.md
+++ b/docs/usage.md
@@ -1,7 +1,256 @@
# Usage
-To use Netatmo GeoPy in a project
+## Pre-requisites
+In order to access the data from Netatmo citizen weather stations (CWS), you need a Netatmo username, password, client ID and client secret. You can obtain the former credentials following the steps below:
+
+1. Create an Netatmo account at [auth.netatmo.com/access/signup](https://auth.netatmo.com/access/signup). The entered email address and password will respectively be the username and password used in netatmo-geopy.
+2. From your account, navigate to [dev.netatmo.com/apps/](https://dev.netatmo.com/apps) and click "Create" to create an app. This only serves to obtain a client ID and secret key, so you do not need to enter any specific information in "app name" and "description".
+3. Once the app is created, save the generated "client ID" and "client secret" which will appear in the form below (entitled "App Technical Parameters"), which will be used in netatmo-geopy.
+
+## Features
+
+First import netatmo-geopy as in:
+
+```python
+import netatmo_geopy as nat
+```
+
+You can then use netatmo-geopy to get the CWS temperature measurements for a region of interest as in:
+
+```python
+# latitude/longitude bounds of the region of interest
+lon_sw, lat_sw, lon_ne, lat_ne = 6.5175, 46.5012, 6.7870, 46.6058
+
+# init the CWS recorder
+cws_recorder = nat.CWSRecorder(
+ lon_sw,
+ lat_sw,
+ lon_ne,
+ lat_ne,
+ username="",
+ password="",
+ client_id="",
+ client_secret="",
+)
+```
+
+Alternatively, instead of passing the Netatmo credentials to the initalization of `CWSRecorder`, you can also set them as the `NETATMO_USERNAME`, `NETATMO_PASSWORD`, `NETATMO_CLIENT_ID`, and `NETATMO_CLIENT_SECRET` environment variables, then netatmo-geopy will use them automatically when required. In order to use more concise code snippets, the remainder of this page assumes that the Netatmo credientials are provided using the environment variables.
+
+Then, the current snapshot of CWS measurements in the region can be obtained as in:
+
+```python
+gdf = cws_recorder.get_snapshot_gdf()
+gdf.head()
+```
+
+
+
+
+
+
+ |
+ 2022-02-12T19:13 |
+ geometry |
+
+
+ station_id |
+ |
+ |
+
+
+
+
+ 02:00:00:01:5e:e0 |
+ 6.6 |
+ POINT (6.82799 46.47089) |
+
+
+ 02:00:00:22:c0:c0 |
+ 4.9 |
+ POINT (6.82904 46.47005) |
+
+
+ 02:00:00:2f:0b:16 |
+ 3.5 |
+ POINT (6.82516 46.47294) |
+
+
+ 02:00:00:59:00:2a |
+ 3.8 |
+ POINT (6.84547 46.46779) |
+
+
+ 02:00:00:52:ed:5a |
+ 3.8 |
+ POINT (6.87359 46.47067) |
+
+
+
+
+
+You can also use the `plot_snapshot` to plot the data on a map:
+
+```python
+nat.plot_snapshot(gdf)
```
- import netatmo_geopy
+
+![lausanne-snapshot](https://github.com/martibosch/netatmo-geopy/blob/main/docs/figures/lausanne.png)
+
+### Schedule a periodic job to record CWS data for a region
+
+It is possible to use netatmo-geopy to set up a periodic job to record CWS measurements. To that end, you need to provide the `time_unit` argument to the initialization of `CWSRecorder`, as in:
+
+```python
+snapshot_data_dir = "data/lausanne"
+cws_recorder = nat.CWSRecorder(
+ lon_sw, lat_sw, lon_ne, lat_ne, dst_dir=snapshot_data_dir, time_unit="hour"
+)
+```
+
+which will dump an hourly snapshot of CWS measurements to the directory specified with the `dst_dir` argument. The `time_unit` argument can be combined with the `interval`, `at` and `until` arguments, e.g., the following task will record the CWS measurements of the region at the 30th minute of every three hours for the next 24 hours:
+
+```python
+from datetime import datetime, timedelta
+
+cws_recorder = nat.CWSRecorder(
+ lon_sw,
+ lat_sw,
+ lon_ne,
+ lat_ne,
+ dst_dir=snapshot_data_dir,
+ time_unit="hours",
+ interval=3
+ at=":30",
+ until=datetime.now() + timedelta(hours=24),
+)
```
+
+See [the documentation of schedule](https://schedule.readthedocs.io/) for more examples on scheduling periodic jobs.
+
+### Assemble CWS snapshots into a single time-series geo-data frame
+
+After a time series of snapshots have been dumped to a directory, the `CWSDataset` class can be used to assemble the data into a single geo-data frame, i.e., the `temperature_gdf` attribute:
+
+```python
+cws_dataset = nat.CWSDataset(snapshot_data_dir=snapshot_data_dir)
+cws_dataset.temperature_gdf.head()
+```
+
+
+
+
+
+
+ |
+ 2022-02-06 09:30:00 |
+ 2022-02-06 12:30:00 |
+ 2022-02-06 15:30:00 |
+ 2022-02-06 18:30:00 |
+ 2022-02-06 21:30:00 |
+ 2022-02-07 00:30:00 |
+ 2022-02-07 03:30:00 |
+ 2022-02-07 06:30:00 |
+ geometry |
+
+
+ station_id |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+
+
+
+
+ 02:00:00:01:5e:e0 |
+ 1.542567 |
+ 4.815597 |
+ 0.550991 |
+ 0.948516 |
+ 2.600634 |
+ 0.312831 |
+ 3.088689 |
+ 3.442664 |
+ POINT (6.82799 46.47089) |
+
+
+ 02:00:00:22:c0:c0 |
+ 4.093453 |
+ 2.291656 |
+ 0.258319 |
+ 3.346670 |
+ 4.571841 |
+ 2.299931 |
+ 0.447544 |
+ 4.558038 |
+ POINT (6.82904 46.47005) |
+
+
+ 02:00:00:2f:0b:16 |
+ 1.588176 |
+ 4.521104 |
+ 3.060942 |
+ 1.931824 |
+ 3.027879 |
+ 2.567090 |
+ 1.326534 |
+ 0.043705 |
+ POINT (6.82516 46.47294) |
+
+
+ 02:00:00:59:00:2a |
+ 0.452659 |
+ 2.443335 |
+ 2.270666 |
+ 0.867035 |
+ 3.965786 |
+ 2.200247 |
+ 3.443507 |
+ 1.314949 |
+ POINT (6.84547 46.46779) |
+
+
+ 02:00:00:52:ed:5a |
+ 1.022992 |
+ 1.795367 |
+ 1.099024 |
+ 2.775641 |
+ 1.663362 |
+ 1.033040 |
+ 1.875658 |
+ 1.031009 |
+ POINT (6.87359 46.47067) |
+
+
+
+
diff --git a/mkdocs.yml b/mkdocs.yml
index afacb4f..73498f9 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -1,49 +1,21 @@
site_name: Netatmo GeoPy
# site_url: http://www.jieyu.ai
-repo_url: https://github.com/martibosch/netatmo_geopy
-repo_name: netatmo_geopy
+edit_uri: edit/main/docs
+repo_url: https://github.com/martibosch/netatmo-geopy
+repo_name: netatmo-geopy
#strict: true
nav:
- - home: index.md
- - installation: installation.md
- - usage: usage.md
- - modules: api.md
- - contributing: contributing.md
- - authors: authors.md
- - history: history.md
+ - Home: index.md
+ - Installation: installation.md
+ - Usage: usage.md
+ - API: api.md
+ - Contributing: contributing.md
+ - Authors: authors.md
+ - History: history.md
theme:
- name: material
+ name: readthedocs
language: en
#logo: assets/logo.png
- palette:
- primary: light blue
- features:
- - navigation.indexes
- - navigation.tabs
- - navigation.instant
- - navigation.tabs.sticky
-markdown_extensions:
- - pymdownx.emoji:
- emoji_index: !!python/name:materialx.emoji.twemoji
- emoji_generator: !!python/name:materialx.emoji.to_svg
- - pymdownx.critic
- - pymdownx.caret
- - pymdownx.mark
- - pymdownx.tilde
- - pymdownx.tabbed
- - attr_list
- - pymdownx.arithmatex:
- generic: true
- - pymdownx.highlight:
- linenums: true
- - pymdownx.superfences
- - pymdownx.details
- - admonition
- - toc:
- baselevel: 2
- permalink: true
- slugify: !!python/name:pymdownx.slugs.uslugify
- - meta
plugins:
- include-markdown
- search:
@@ -51,21 +23,6 @@ plugins:
- mkdocstrings:
watch:
- netatmo_geopy
-extra:
- social:
- - icon: fontawesome/brands/twitter
- # replace with your own tweet link below
- link: http://www.jieyu.ai
- name: Tweet
- - icon: fontawesome/brands/facebook
- # replace with your own facebook link below
- link: http://www.jieyu.ai
- name: Facebook
- - icon: fontawesome/brands/github
- link: https://github.com/martibosch/netatmo_geopy
- name: Github
- - icon: material/email
- link: "mailto:marti.bosch@epfl.ch"
# to enable disqus, uncomment the following and put your disqus id below
# disqus: disqus_id
# uncomment the following and put your google tracking id below to enable GA
diff --git a/poetry.lock b/poetry.lock
index c2d8de0..f7f3775 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -17,6 +17,17 @@ category = "main"
optional = true
python-versions = "*"
+[[package]]
+name = "astunparse"
+version = "1.6.3"
+description = "An AST unparser for Python"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+six = ">=1.6.1,<2.0"
+
[[package]]
name = "atomicwrites"
version = "1.4.0"
@@ -39,21 +50,6 @@ docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"]
-[[package]]
-name = "beautifulsoup4"
-version = "4.10.0"
-description = "Screen-scraping library"
-category = "main"
-optional = true
-python-versions = ">3.0.0"
-
-[package.dependencies]
-soupsieve = ">1.2"
-
-[package.extras]
-html5lib = ["html5lib"]
-lxml = ["lxml"]
-
[[package]]
name = "black"
version = "20.8b1"
@@ -89,6 +85,14 @@ packaging = "*"
six = ">=1.9.0"
webencodings = "*"
+[[package]]
+name = "cached-property"
+version = "1.5.2"
+description = "A decorator for caching properties in classes."
+category = "main"
+optional = false
+python-versions = "*"
+
[[package]]
name = "certifi"
version = "2021.10.8"
@@ -388,7 +392,7 @@ name = "ghp-import"
version = "2.0.2"
description = "Copy your docs directly to the gh-pages branch."
category = "main"
-optional = true
+optional = false
python-versions = "*"
[package.dependencies]
@@ -471,7 +475,7 @@ name = "jinja2"
version = "3.0.3"
description = "A very fast and expressive template engine."
category = "main"
-optional = true
+optional = false
python-versions = ">=3.6"
[package.dependencies]
@@ -519,7 +523,7 @@ name = "markdown"
version = "3.3.6"
description = "Python implementation of Markdown."
category = "main"
-optional = true
+optional = false
python-versions = ">=3.6"
[package.dependencies]
@@ -533,7 +537,7 @@ name = "markupsafe"
version = "2.0.1"
description = "Safely add untrusted strings to HTML/XML markup."
category = "main"
-optional = true
+optional = false
python-versions = ">=3.6"
[[package]]
@@ -583,7 +587,7 @@ name = "mergedeep"
version = "1.3.4"
description = "A deep merge function for 🐍."
category = "main"
-optional = true
+optional = false
python-versions = ">=3.6"
[[package]]
@@ -591,7 +595,7 @@ name = "mkdocs"
version = "1.2.3"
description = "Project documentation with Markdown."
category = "main"
-optional = true
+optional = false
python-versions = ">=3.6"
[package.dependencies]
@@ -611,11 +615,11 @@ i18n = ["babel (>=2.9.0)"]
[[package]]
name = "mkdocs-autorefs"
-version = "0.1.1"
+version = "0.3.1"
description = "Automatically link across pages in MkDocs."
category = "main"
-optional = true
-python-versions = ">=3.6,<4.0"
+optional = false
+python-versions = ">=3.6.2,<4.0.0"
[package.dependencies]
Markdown = ">=3.3,<4.0"
@@ -634,44 +638,38 @@ dev = ["twine (==3.2.0)", "bump2version (==1.0.1)", "pre-commit (==2.9.2)", "pyt
test = ["pytest (==6.1.2)", "pytest-cov (==2.10.1)"]
[[package]]
-name = "mkdocs-material"
-version = "6.2.8"
-description = "A Material Design theme for MkDocs"
+name = "mkdocstrings"
+version = "0.18.0"
+description = "Automatic documentation from sources, for MkDocs."
category = "main"
-optional = true
-python-versions = "*"
+optional = false
+python-versions = ">=3.7"
[package.dependencies]
-markdown = ">=3.2"
-mkdocs = ">=1.1"
-mkdocs-material-extensions = ">=1.0"
-Pygments = ">=2.4"
-pymdown-extensions = ">=7.0"
+Jinja2 = ">=2.11.1"
+Markdown = ">=3.3"
+MarkupSafe = ">=1.1"
+mkdocs = ">=1.2"
+mkdocs-autorefs = ">=0.3.1"
+mkdocstrings-python-legacy = ">=0.2"
+pymdown-extensions = ">=6.3"
-[[package]]
-name = "mkdocs-material-extensions"
-version = "1.0.3"
-description = "Extension pack for Python Markdown."
-category = "main"
-optional = true
-python-versions = ">=3.6"
+[package.extras]
+crystal = ["mkdocstrings-crystal (>=0.3.4)"]
+python = ["mkdocstrings-python (>=0.5.2)"]
+python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"]
[[package]]
-name = "mkdocstrings"
-version = "0.13.6"
-description = "Automatic documentation from sources, for MkDocs."
+name = "mkdocstrings-python-legacy"
+version = "0.2.1"
+description = "A legacy Python handler for mkdocstrings."
category = "main"
-optional = true
-python-versions = ">=3.6,<4.0"
+optional = false
+python-versions = ">=3.7"
[package.dependencies]
-beautifulsoup4 = ">=4.8.2,<5.0.0"
-mkdocs = ">=1.1,<2.0"
-pymdown-extensions = ">=6.3,<9.0"
-pytkdocs = ">=0.2.0,<0.10.0"
-
-[package.extras]
-tests = ["coverage (>=5.2.1,<6.0.0)", "invoke (>=1.4.1,<2.0.0)", "mkdocs-material (>=5.5.12,<6.0.0)", "mypy (>=0.782,<0.783)", "pytest (>=6.0.1,<7.0.0)", "pytest-cov (>=2.10.1,<3.0.0)", "pytest-randomly (>=3.4.1,<4.0.0)", "pytest-sugar (>=0.9.4,<0.10.0)", "pytest-xdist (>=2.1.0,<3.0.0)"]
+mkdocstrings = ">=0.18"
+pytkdocs = ">=0.14"
[[package]]
name = "munch"
@@ -881,7 +879,7 @@ name = "pymdown-extensions"
version = "8.2"
description = "Extension pack for Python Markdown."
category = "main"
-optional = true
+optional = false
python-versions = ">=3.6"
[package.dependencies]
@@ -971,14 +969,19 @@ six = ">=1.5"
[[package]]
name = "pytkdocs"
-version = "0.9.0"
+version = "0.15.0"
description = "Load Python objects documentation."
category = "main"
-optional = true
-python-versions = ">=3.6,<4.0"
+optional = false
+python-versions = ">=3.6.2"
+
+[package.dependencies]
+astunparse = {version = ">=1.6", markers = "python_version < \"3.9\""}
+cached-property = {version = ">=1.5", markers = "python_version < \"3.8\""}
+typing-extensions = {version = ">=3.7", markers = "python_version < \"3.8\""}
[package.extras]
-tests = ["coverage (>=5.2.1,<6.0.0)", "invoke (>=1.4.1,<2.0.0)", "marshmallow (>=3.5.2,<4.0.0)", "mypy (>=0.782,<0.783)", "pydantic (>=1.5.1,<2.0.0)", "pytest (>=6.0.1,<7.0.0)", "pytest-cov (>=2.10.1,<3.0.0)", "pytest-randomly (>=3.4.1,<4.0.0)", "pytest-sugar (>=0.9.4,<0.10.0)", "pytest-xdist (>=2.1.0,<3.0.0)"]
+numpy-style = ["docstring_parser (>=0.7)"]
[[package]]
name = "pytz"
@@ -1001,7 +1004,7 @@ name = "pyyaml"
version = "6.0"
description = "YAML parser and emitter for Python"
category = "main"
-optional = true
+optional = false
python-versions = ">=3.6"
[[package]]
@@ -1009,7 +1012,7 @@ name = "pyyaml-env-tag"
version = "0.1"
description = "A custom YAML tag for referencing environment variables in YAML files. "
category = "main"
-optional = true
+optional = false
python-versions = ">=3.6"
[package.dependencies]
@@ -1088,7 +1091,7 @@ name = "requests-mock"
version = "1.9.3"
description = "Mock out responses from the requests package"
category = "main"
-optional = false
+optional = true
python-versions = "*"
[package.dependencies]
@@ -1216,14 +1219,6 @@ pyparsing = ">=2.1.6"
[package.extras]
test = ["pytest", "hypothesis"]
-[[package]]
-name = "soupsieve"
-version = "2.3.1"
-description = "A modern CSS selector implementation for Beautiful Soup."
-category = "main"
-optional = true
-python-versions = ">=3.6"
-
[[package]]
name = "termcolor"
version = "1.1.0"
@@ -1359,7 +1354,7 @@ name = "watchdog"
version = "2.1.6"
description = "Filesystem events monitoring"
category = "main"
-optional = true
+optional = false
python-versions = ">=3.6"
[package.extras]
@@ -1395,13 +1390,13 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes
[extras]
dev = ["tox", "pre-commit", "virtualenv", "pip", "twine", "toml"]
-doc = ["mkdocs", "mkdocs-include-markdown-plugin", "mkdocs-material", "mkdocstrings", "mkdocs-autorefs"]
-test = ["pytest", "black", "isort", "flake8", "flake8-docstrings", "pytest-cov", "pytest-datadir"]
+doc = ["mkdocs", "mkdocs-include-markdown-plugin", "mkdocstrings", "mkdocs-autorefs"]
+test = ["pytest", "black", "isort", "flake8", "flake8-docstrings", "pytest-cov", "pytest-datadir", "requests-mock"]
[metadata]
lock-version = "1.1"
python-versions = ">=3.7,<4.0"
-content-hash = "2f10db267f82fc9ba28518f094a4e04ba7049a7609bcd972fb407893f7be20c6"
+content-hash = "861a946b9d4b9efef8433c7ac1f5875e5b3a808244010e37e8be316fd235ae0d"
[metadata.files]
affine = [
@@ -1412,6 +1407,10 @@ appdirs = [
{file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"},
{file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"},
]
+astunparse = [
+ {file = "astunparse-1.6.3-py2.py3-none-any.whl", hash = "sha256:c2652417f2c8b5bb325c885ae329bdf3f86424075c4fd1a128674bc6fba4b8e8"},
+ {file = "astunparse-1.6.3.tar.gz", hash = "sha256:5ad93a8456f0d084c3456d059fd9a92cce667963232cbf763eac3bc5b7940872"},
+]
atomicwrites = [
{file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"},
{file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"},
@@ -1420,10 +1419,6 @@ attrs = [
{file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
{file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
-beautifulsoup4 = [
- {file = "beautifulsoup4-4.10.0-py3-none-any.whl", hash = "sha256:9a315ce70049920ea4572a4055bc4bd700c940521d36fc858205ad4fcde149bf"},
- {file = "beautifulsoup4-4.10.0.tar.gz", hash = "sha256:c23ad23c521d818955a4151a67d81580319d4bf548d3d49f4223ae041ff98891"},
-]
black = [
{file = "black-20.8b1.tar.gz", hash = "sha256:1c02557aa099101b9d21496f8a914e9ed2222ef70336404eeeac8edba836fbea"},
]
@@ -1431,6 +1426,10 @@ bleach = [
{file = "bleach-4.1.0-py2.py3-none-any.whl", hash = "sha256:4d2651ab93271d1129ac9cbc679f524565cc8a1b791909c4a51eac4446a15994"},
{file = "bleach-4.1.0.tar.gz", hash = "sha256:0900d8b37eba61a802ee40ac0061f8c2b5dee29c1927dd1d233e075ebf5a71da"},
]
+cached-property = [
+ {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"},
+ {file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"},
+]
certifi = [
{file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
{file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
@@ -1855,24 +1854,20 @@ mkdocs = [
{file = "mkdocs-1.2.3.tar.gz", hash = "sha256:89f5a094764381cda656af4298727c9f53dc3e602983087e1fe96ea1df24f4c1"},
]
mkdocs-autorefs = [
- {file = "mkdocs-autorefs-0.1.1.tar.gz", hash = "sha256:ff9386ceb1ceeb88786696c7534ec31a6248a4828a5a2f8fea9d2699f650e3ab"},
- {file = "mkdocs_autorefs-0.1.1-py3-none-any.whl", hash = "sha256:8bed8e81db45bb8d25e30e09d9d2943a7ceb92d3ad6b51e84618027c55c398eb"},
+ {file = "mkdocs-autorefs-0.3.1.tar.gz", hash = "sha256:12baad29359f468b44d980ed35b713715409097a1d8e3d0ef90962db95205eda"},
+ {file = "mkdocs_autorefs-0.3.1-py3-none-any.whl", hash = "sha256:f0fd7c115eaafda7fb16bf5ff5d70eda55d7c0599eac64f8b25eacf864312a85"},
]
mkdocs-include-markdown-plugin = [
{file = "mkdocs_include_markdown_plugin-1.0.0-py3-none-any.whl", hash = "sha256:5143312d4aa99dfbfb40bab04ea193928f8142ea8d02f64a52e55bf9d6b61b58"},
{file = "mkdocs_include_markdown_plugin-1.0.0.tar.gz", hash = "sha256:4c2e53f2d504e3de0d6c9fecf1da63597453a3ebd7f34bb118c84fbf4a8d57ce"},
]
-mkdocs-material = [
- {file = "mkdocs-material-6.2.8.tar.gz", hash = "sha256:ce2f4a71e5db49540d71fd32f9afba7645765f7eca391e560d1d27f947eb344c"},
- {file = "mkdocs_material-6.2.8-py2.py3-none-any.whl", hash = "sha256:c9b63d709d29778aa3dafc7178b6a8c655b00937be2594aab016d1423696c792"},
-]
-mkdocs-material-extensions = [
- {file = "mkdocs-material-extensions-1.0.3.tar.gz", hash = "sha256:bfd24dfdef7b41c312ede42648f9eb83476ea168ec163b613f9abd12bbfddba2"},
- {file = "mkdocs_material_extensions-1.0.3-py3-none-any.whl", hash = "sha256:a82b70e533ce060b2a5d9eb2bc2e1be201cf61f901f93704b4acf6e3d5983a44"},
-]
mkdocstrings = [
- {file = "mkdocstrings-0.13.6-py3-none-any.whl", hash = "sha256:79d2a16b8c86a467bdc84846dfb90552551d2d9fd35578df9f92de13fb3b4537"},
- {file = "mkdocstrings-0.13.6.tar.gz", hash = "sha256:79e5086c79f60d1ae1d4b222f658d348ebdd6302c970cc06ee8394f2839d7c4d"},
+ {file = "mkdocstrings-0.18.0-py3-none-any.whl", hash = "sha256:75e277f6a56a894a727efcf6d418d36cd43d4db7da9614c2dc23300e257d95ad"},
+ {file = "mkdocstrings-0.18.0.tar.gz", hash = "sha256:01d8ab962fc1f388c9b15cbf8c078b8738f92adf983b626d74135aaee2bce33a"},
+]
+mkdocstrings-python-legacy = [
+ {file = "mkdocstrings-python-legacy-0.2.1.tar.gz", hash = "sha256:d8b032e1d1b4c75a601fcc5837249e2b2dc2cb21c9ad32a313ffaa54d5838242"},
+ {file = "mkdocstrings_python_legacy-0.2.1-py3-none-any.whl", hash = "sha256:a46f772b24d9a41f0b4eaa27a4ae70195cacc76af462fce691d085e0b4fc8c78"},
]
munch = [
{file = "munch-2.5.0-py2.py3-none-any.whl", hash = "sha256:6f44af89a2ce4ed04ff8de41f70b226b984db10a91dcc7b9ac2efc1c77022fdd"},
@@ -2075,8 +2070,8 @@ python-dateutil = [
{file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
]
pytkdocs = [
- {file = "pytkdocs-0.9.0-py3-none-any.whl", hash = "sha256:12ed87d71b3518301c7b8c12c1a620e4b481a9d2fca1038aea665955000fad7f"},
- {file = "pytkdocs-0.9.0.tar.gz", hash = "sha256:c8c39acb63824f69c3f6f58b3aed6ae55250c35804b76fd0cba09d5c11be13da"},
+ {file = "pytkdocs-0.15.0-py3-none-any.whl", hash = "sha256:d6b2aec34448ec89acb8c1c25062cc1e70c6b26395d46fc7ee753b7e5a4e736a"},
+ {file = "pytkdocs-0.15.0.tar.gz", hash = "sha256:4b45af89d6fa5fa50f979b0f9f54539286b84e245c81991bb838149aa2d9d9c9"},
]
pytz = [
{file = "pytz-2021.3-py2.py3-none-any.whl", hash = "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c"},
@@ -2284,10 +2279,6 @@ snuggs = [
{file = "snuggs-1.4.7-py3-none-any.whl", hash = "sha256:988dde5d4db88e9d71c99457404773dabcc7a1c45971bfbe81900999942d9f07"},
{file = "snuggs-1.4.7.tar.gz", hash = "sha256:501cf113fe3892e14e2fee76da5cd0606b7e149c411c271898e6259ebde2617b"},
]
-soupsieve = [
- {file = "soupsieve-2.3.1-py3-none-any.whl", hash = "sha256:1a3cca2617c6b38c0343ed661b1fa5de5637f257d4fe22bd9f1338010a1efefb"},
- {file = "soupsieve-2.3.1.tar.gz", hash = "sha256:b8d49b1cd4f037c7082a9683dfa1801aa2597fb11c3a1155b7a5b94829b4f1f9"},
-]
termcolor = [
{file = "termcolor-1.1.0.tar.gz", hash = "sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b"},
]
diff --git a/pyproject.toml b/pyproject.toml
index d038fdc..b613785 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -37,13 +37,11 @@ requests-mock = { version = "^1.9.3", optional = true}
tox = { version = "^3.20.1", optional = true}
virtualenv = { version = "^20.2.2", optional = true}
pip = { version = "^20.3.1", optional = true}
-mkdocs = { version = "^1.1.2", optional = true}
+mkdocs = { version = "^1.2.3", optional = true}
mkdocs-include-markdown-plugin = { version = "^1.0.0", optional = true}
-mkdocs-material = { version = "^6.1.7", optional = true}
-mkdocstrings = { version = "^0.13.6", optional = true}
-mkdocs-material-extensions = { version = "^1.0.1", optional = true}
+mkdocstrings = { version = "^0.18.0", optional = true}
twine = { version = "^3.3.0", optional = true}
-mkdocs-autorefs = {version = "0.1.1", optional = true}
+mkdocs-autorefs = {version = "^0.3.1", optional = true}
pre-commit = {version = "^2.12.0", optional = true}
toml = {version = "^0.10.2", optional = true}
requests-oauthlib = "^1.3.0"
@@ -70,9 +68,7 @@ dev = ["tox", "pre-commit", "virtualenv", "pip", "twine", "toml"]
doc = [
"mkdocs",
"mkdocs-include-markdown-plugin",
- "mkdocs-material",
"mkdocstrings",
- "mkdocs-material-extension",
"mkdocs-autorefs"
]