From f3907696ff3e635985c0c0c003f9f43546d5cf9f Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 15 Nov 2022 20:24:44 +0100 Subject: [PATCH 01/68] ADD: header example Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- docs/source/index.rst | 4 +++- docs/source/notation.rst | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 docs/source/notation.rst diff --git a/docs/source/index.rst b/docs/source/index.rst index e98ec6b..616a4df 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -1,4 +1,4 @@ -.. Whist-Core documentation master file, created by +.. Notations documentation master file, created by sphinx-quickstart on Mon May 10 14:28:49 2021. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. @@ -12,6 +12,8 @@ Welcome to Notation's documentation! autoapi/notation/index.rst +* :ref:`notation` + Indices and tables ================== diff --git a/docs/source/notation.rst b/docs/source/notation.rst new file mode 100644 index 0000000..5b78b3f --- /dev/null +++ b/docs/source/notation.rst @@ -0,0 +1,20 @@ +Card Game Notation Standard +=========================== +This standard uses TOML_ as notation language. + +Header +------- +All meta data is defined in the Header. This contains information about teams and players. + +.. code-block:: toml + :caption: Header Example + [header] + # Unsigned Integer + number_of_teams = 2 + # List of dictionaries + players = [{ name="Player 1", team=0 }, { player="Player 2", team=1 } + + + + +.. _TOML: https://toml.io/en/ \ No newline at end of file From c43cf8866151bb8ff6fb6d5d9ce620e2cc9eb1ba Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 15 Nov 2022 20:34:27 +0100 Subject: [PATCH 02/68] UPDATE: use list for players Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- docs/source/notation.rst | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/docs/source/notation.rst b/docs/source/notation.rst index 5b78b3f..1ce70d6 100644 --- a/docs/source/notation.rst +++ b/docs/source/notation.rst @@ -9,11 +9,16 @@ All meta data is defined in the Header. This contains information about teams an .. code-block:: toml :caption: Header Example [header] + # Unsigned Integer number_of_teams = 2 - # List of dictionaries - players = [{ name="Player 1", team=0 }, { player="Player 2", team=1 } + [[players]] + [[player.player_name_1]] + # Unsigned Integer: ID of team starting with 0 + team = 0 + [[player.player_name_2]] + team = 1 From 595a0db8e00e06a2b108778aacbb88094d488e1a Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 15 Nov 2022 20:39:45 +0100 Subject: [PATCH 03/68] UPDATE: use standard as filename ADD: ref anchor Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- docs/source/index.rst | 2 +- docs/source/{notation.rst => standard.rst} | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) rename docs/source/{notation.rst => standard.rst} (97%) diff --git a/docs/source/index.rst b/docs/source/index.rst index 616a4df..4a837d3 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -12,7 +12,7 @@ Welcome to Notation's documentation! autoapi/notation/index.rst -* :ref:`notation` +* :ref:`standard` Indices and tables ================== diff --git a/docs/source/notation.rst b/docs/source/standard.rst similarity index 97% rename from docs/source/notation.rst rename to docs/source/standard.rst index 1ce70d6..c7af82f 100644 --- a/docs/source/notation.rst +++ b/docs/source/standard.rst @@ -1,3 +1,4 @@ +.. _standard: Card Game Notation Standard =========================== This standard uses TOML_ as notation language. From fbf87733dbd8208c30755b99a00eab828bced587 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 15 Nov 2022 20:45:09 +0100 Subject: [PATCH 04/68] ADD: autosectionlabel extension Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- docs/source/conf.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 1baf757..3906d29 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -30,7 +30,8 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ - 'autoapi.extension' + 'autoapi.extension', + 'sphinx.ext.autosectionlabel', ] autoapi_dirs = ['../../notation'] From 58956d574f1e69726889f9fd72ee254223a247e1 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 15 Nov 2022 20:45:38 +0100 Subject: [PATCH 05/68] UPDATE: use auto section ref Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- docs/source/index.rst | 2 +- docs/source/standard.rst | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index 4a837d3..27d0554 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -12,7 +12,7 @@ Welcome to Notation's documentation! autoapi/notation/index.rst -* :ref:`standard` +* :ref:`standard/Card Game Notation Standard` Indices and tables ================== diff --git a/docs/source/standard.rst b/docs/source/standard.rst index c7af82f..1ce70d6 100644 --- a/docs/source/standard.rst +++ b/docs/source/standard.rst @@ -1,4 +1,3 @@ -.. _standard: Card Game Notation Standard =========================== This standard uses TOML_ as notation language. From 31d0bf2a0c7ff70c44d283dbf04e88b70dbc2d6b Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 15 Nov 2022 20:48:26 +0100 Subject: [PATCH 06/68] ENABLE: autosection Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- docs/source/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 3906d29..a18d0fb 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -35,7 +35,7 @@ ] autoapi_dirs = ['../../notation'] - +autosectionlabel_prefix_document = True # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] From 0e833fad200723b7504aec6514af952c59352f5e Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 15 Nov 2022 20:57:35 +0100 Subject: [PATCH 07/68] REMOVE: enumartion Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- docs/source/index.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index 27d0554..7e6e9f1 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -12,7 +12,8 @@ Welcome to Notation's documentation! autoapi/notation/index.rst -* :ref:`standard/Card Game Notation Standard` + +:ref:`standard/Card Game Notation Standard` Indices and tables ================== From e0d485b984927813bfc19144ca00648277dc5c79 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 15 Nov 2022 21:01:19 +0100 Subject: [PATCH 08/68] UPDATE: enable if invalid reference Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- .readthedocs.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 70bee1f..19d5cd0 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -7,7 +7,8 @@ build: sphinx: configuration: docs/source/conf.py - + fail_on_warning: true + formats: - pdf From 45c7d15b606f9e3431ae6d6f6b11172f2dee66f4 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 15 Nov 2022 21:08:26 +0100 Subject: [PATCH 09/68] FIX: ref syntax Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- docs/source/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index 7e6e9f1..e7515f8 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -13,7 +13,7 @@ Welcome to Notation's documentation! autoapi/notation/index.rst -:ref:`standard/Card Game Notation Standard` +:ref:`standard:Card Game Notation Standard` Indices and tables ================== From ada4d3bea88db97ec82296b824ef9eb03b4b46ad Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 15 Nov 2022 21:12:17 +0100 Subject: [PATCH 10/68] REMOVE: language tag Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- docs/source/standard.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/standard.rst b/docs/source/standard.rst index 1ce70d6..aa83184 100644 --- a/docs/source/standard.rst +++ b/docs/source/standard.rst @@ -6,7 +6,7 @@ Header ------- All meta data is defined in the Header. This contains information about teams and players. -.. code-block:: toml +.. code-block:: none :caption: Header Example [header] From 6fa573ab21c27c02fb32c2bf6febb7a45c2c2922 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 15 Nov 2022 21:12:40 +0100 Subject: [PATCH 11/68] REMOVE: fail on warning Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- .readthedocs.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 19d5cd0..93bb3f3 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -7,7 +7,6 @@ build: sphinx: configuration: docs/source/conf.py - fail_on_warning: true formats: - pdf From 1b25e96d91399bed13d2ee3eb3abddf4289215f5 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 15 Nov 2022 21:16:58 +0100 Subject: [PATCH 12/68] REMOVE: language at all Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- docs/source/standard.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/standard.rst b/docs/source/standard.rst index aa83184..5868160 100644 --- a/docs/source/standard.rst +++ b/docs/source/standard.rst @@ -6,7 +6,7 @@ Header ------- All meta data is defined in the Header. This contains information about teams and players. -.. code-block:: none +.. code-block:: :caption: Header Example [header] From 1cf7d4897d1271215bea680467d74967fe0720b8 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 15 Nov 2022 21:19:42 +0100 Subject: [PATCH 13/68] REMOVE: caption READD: fail on warning Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- .readthedocs.yaml | 1 + docs/source/standard.rst | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 93bb3f3..19d5cd0 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -7,6 +7,7 @@ build: sphinx: configuration: docs/source/conf.py + fail_on_warning: true formats: - pdf diff --git a/docs/source/standard.rst b/docs/source/standard.rst index 5868160..d93dbe8 100644 --- a/docs/source/standard.rst +++ b/docs/source/standard.rst @@ -7,7 +7,6 @@ Header All meta data is defined in the Header. This contains information about teams and players. .. code-block:: - :caption: Header Example [header] # Unsigned Integer From e68776108b6379b69fe0a171fbd7117d6e441fa6 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 15 Nov 2022 21:24:06 +0100 Subject: [PATCH 14/68] FIX: caption header Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- docs/source/standard.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/standard.rst b/docs/source/standard.rst index d93dbe8..d955797 100644 --- a/docs/source/standard.rst +++ b/docs/source/standard.rst @@ -7,8 +7,8 @@ Header All meta data is defined in the Header. This contains information about teams and players. .. code-block:: + :caption: Example Header [header] - # Unsigned Integer number_of_teams = 2 From c4118a905ecc4b9086e7ac7bf2f406a5277bb100 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 15 Nov 2022 21:25:52 +0100 Subject: [PATCH 15/68] REMOVE: fail on warning Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- .readthedocs.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 19d5cd0..93bb3f3 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -7,7 +7,6 @@ build: sphinx: configuration: docs/source/conf.py - fail_on_warning: true formats: - pdf From f624c8329511e153facf8b7cba7e288f09e016a8 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 15 Nov 2022 21:19:42 +0100 Subject: [PATCH 16/68] REMOVE: caption READD: fail on warning Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- docs/source/standard.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/source/standard.rst b/docs/source/standard.rst index d955797..6522f43 100644 --- a/docs/source/standard.rst +++ b/docs/source/standard.rst @@ -7,7 +7,6 @@ Header All meta data is defined in the Header. This contains information about teams and players. .. code-block:: - :caption: Example Header [header] # Unsigned Integer number_of_teams = 2 From 005eedb4fe938bec4087813ec983f4faedaab3e2 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 15 Nov 2022 21:32:09 +0100 Subject: [PATCH 17/68] Revert "REMOVE: fail on warning" This reverts commit c4118a905ecc4b9086e7ac7bf2f406a5277bb100. --- .readthedocs.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 93bb3f3..19d5cd0 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -7,6 +7,7 @@ build: sphinx: configuration: docs/source/conf.py + fail_on_warning: true formats: - pdf From b94bd6982944f02bb93e39c28eb8aec9d1c3e943 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 15 Nov 2022 21:38:51 +0100 Subject: [PATCH 18/68] REMOVE: empty line Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- docs/source/standard.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/source/standard.rst b/docs/source/standard.rst index 6522f43..b169dd0 100644 --- a/docs/source/standard.rst +++ b/docs/source/standard.rst @@ -10,7 +10,6 @@ All meta data is defined in the Header. This contains information about teams an [header] # Unsigned Integer number_of_teams = 2 - [[players]] [[player.player_name_1]] # Unsigned Integer: ID of team starting with 0 From becc601f5818b98ea6a443fb9a335a40eb2a0975 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 15 Nov 2022 21:53:58 +0100 Subject: [PATCH 19/68] ADD: language toml tag Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- docs/source/standard.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/standard.rst b/docs/source/standard.rst index b169dd0..097d89b 100644 --- a/docs/source/standard.rst +++ b/docs/source/standard.rst @@ -6,7 +6,7 @@ Header ------- All meta data is defined in the Header. This contains information about teams and players. -.. code-block:: +.. code-block:: toml [header] # Unsigned Integer number_of_teams = 2 From fa24eb43262ac60f1a5950f7eefc3c409e10a484 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 15 Nov 2022 22:00:03 +0100 Subject: [PATCH 20/68] FIX: empyt line before code Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- docs/source/standard.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/source/standard.rst b/docs/source/standard.rst index 097d89b..7fb5cff 100644 --- a/docs/source/standard.rst +++ b/docs/source/standard.rst @@ -7,6 +7,7 @@ Header All meta data is defined in the Header. This contains information about teams and players. .. code-block:: toml + [header] # Unsigned Integer number_of_teams = 2 From 47532e3301bcdf0c3792cb4c50e387dbfa32f1a9 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 15 Nov 2022 22:03:36 +0100 Subject: [PATCH 21/68] REMOVE: fail on warning Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- .readthedocs.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 19d5cd0..93bb3f3 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -7,7 +7,6 @@ build: sphinx: configuration: docs/source/conf.py - fail_on_warning: true formats: - pdf From 7efec6961b195ee0eadd53bd50315741109f4dc7 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 15 Nov 2022 22:15:48 +0100 Subject: [PATCH 22/68] ADD: time and location details Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- docs/source/standard.rst | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/source/standard.rst b/docs/source/standard.rst index 7fb5cff..ed47724 100644 --- a/docs/source/standard.rst +++ b/docs/source/standard.rst @@ -4,11 +4,17 @@ This standard uses TOML_ as notation language. Header ------- -All meta data is defined in the Header. This contains information about teams and players. +All meta data is defined in the Header. +This contains information about teams and players. +Furthermore, the location and datetime is stated. .. code-block:: toml [header] + # Timestamp of the starting time in RFC 3339 + timestamp = 2022-08-06T11:22:00 + # Location of the game or the server url + location = "Hamburg" # Unsigned Integer number_of_teams = 2 [[players]] From 2cad108db5027334a370a0388bd92661981301c0 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 15 Nov 2022 22:17:38 +0100 Subject: [PATCH 23/68] FIX: array name Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- docs/source/standard.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/standard.rst b/docs/source/standard.rst index ed47724..4f6e3ba 100644 --- a/docs/source/standard.rst +++ b/docs/source/standard.rst @@ -18,10 +18,10 @@ Furthermore, the location and datetime is stated. # Unsigned Integer number_of_teams = 2 [[players]] - [[player.player_name_1]] + [[players.player_name_1]] # Unsigned Integer: ID of team starting with 0 team = 0 - [[player.player_name_2]] + [[players.player_name_2]] team = 1 From c11f6923b22afb300d95c8db0f23150d1a2c3aae Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Sun, 30 Jul 2023 22:17:55 +0200 Subject: [PATCH 24/68] UPDATE: dependencies Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- poetry.lock | 1095 +++++++++++++++------------------------------------ 1 file changed, 315 insertions(+), 780 deletions(-) diff --git a/poetry.lock b/poetry.lock index 64d4f59..59c3b30 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,71 +1,25 @@ -[[package]] -name = "alabaster" -version = "0.7.12" -description = "A configurable sidebar-enabled Sphinx theme" -category = "dev" -optional = false -python-versions = "*" +# This file is automatically @generated by Poetry and should not be changed by hand. [[package]] name = "astroid" -version = "2.12.12" +version = "2.15.6" description = "An abstract syntax tree for Python with inference support." category = "dev" optional = false python-versions = ">=3.7.2" +files = [ + {file = "astroid-2.15.6-py3-none-any.whl", hash = "sha256:389656ca57b6108f939cf5d2f9a2a825a3be50ba9d589670f393236e0a03b91c"}, + {file = "astroid-2.15.6.tar.gz", hash = "sha256:903f024859b7c7687d7a7f3a3f73b17301f8e42dfd9cc9df9d4418172d3e2dbd"}, +] [package.dependencies] lazy-object-proxy = ">=1.4.0" -typing-extensions = {version = ">=3.10", markers = "python_version < \"3.10\""} +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} wrapt = [ {version = ">=1.11,<2", markers = "python_version < \"3.11\""}, {version = ">=1.14,<2", markers = "python_version >= \"3.11\""}, ] -[[package]] -name = "attrs" -version = "22.1.0" -description = "Classes Without Boilerplate" -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.extras] -dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy (>=0.900,!=0.940)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "sphinx", "sphinx-notfound-page", "zope.interface"] -docs = ["furo", "sphinx", "sphinx-notfound-page", "zope.interface"] -tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "zope.interface"] -tests_no_zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"] - -[[package]] -name = "babel" -version = "2.11.0" -description = "Internationalization utilities" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -pytz = ">=2015.7" - -[[package]] -name = "certifi" -version = "2022.9.24" -description = "Python package for providing Mozilla's CA Bundle." -category = "dev" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "charset-normalizer" -version = "2.1.1" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "dev" -optional = false -python-versions = ">=3.6.0" - -[package.extras] -unicode_backport = ["unicodedata2"] - [[package]] name = "colorama" version = "0.4.6" @@ -73,14 +27,80 @@ description = "Cross-platform colored terminal text." category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] [[package]] name = "coverage" -version = "6.5.0" +version = "7.2.7" description = "Code coverage measurement for Python" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "coverage-7.2.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d39b5b4f2a66ccae8b7263ac3c8170994b65266797fb96cbbfd3fb5b23921db8"}, + {file = "coverage-7.2.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d040ef7c9859bb11dfeb056ff5b3872436e3b5e401817d87a31e1750b9ae2fb"}, + {file = "coverage-7.2.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba90a9563ba44a72fda2e85302c3abc71c5589cea608ca16c22b9804262aaeb6"}, + {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7d9405291c6928619403db1d10bd07888888ec1abcbd9748fdaa971d7d661b2"}, + {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31563e97dae5598556600466ad9beea39fb04e0229e61c12eaa206e0aa202063"}, + {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ebba1cd308ef115925421d3e6a586e655ca5a77b5bf41e02eb0e4562a111f2d1"}, + {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cb017fd1b2603ef59e374ba2063f593abe0fc45f2ad9abdde5b4d83bd922a353"}, + {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62a5c7dad11015c66fbb9d881bc4caa5b12f16292f857842d9d1871595f4495"}, + {file = "coverage-7.2.7-cp310-cp310-win32.whl", hash = "sha256:ee57190f24fba796e36bb6d3aa8a8783c643d8fa9760c89f7a98ab5455fbf818"}, + {file = "coverage-7.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:f75f7168ab25dd93110c8a8117a22450c19976afbc44234cbf71481094c1b850"}, + {file = "coverage-7.2.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:06a9a2be0b5b576c3f18f1a241f0473575c4a26021b52b2a85263a00f034d51f"}, + {file = "coverage-7.2.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5baa06420f837184130752b7c5ea0808762083bf3487b5038d68b012e5937dbe"}, + {file = "coverage-7.2.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdec9e8cbf13a5bf63290fc6013d216a4c7232efb51548594ca3631a7f13c3a3"}, + {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52edc1a60c0d34afa421c9c37078817b2e67a392cab17d97283b64c5833f427f"}, + {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63426706118b7f5cf6bb6c895dc215d8a418d5952544042c8a2d9fe87fcf09cb"}, + {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:afb17f84d56068a7c29f5fa37bfd38d5aba69e3304af08ee94da8ed5b0865833"}, + {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:48c19d2159d433ccc99e729ceae7d5293fbffa0bdb94952d3579983d1c8c9d97"}, + {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0e1f928eaf5469c11e886fe0885ad2bf1ec606434e79842a879277895a50942a"}, + {file = "coverage-7.2.7-cp311-cp311-win32.whl", hash = "sha256:33d6d3ea29d5b3a1a632b3c4e4f4ecae24ef170b0b9ee493883f2df10039959a"}, + {file = "coverage-7.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:5b7540161790b2f28143191f5f8ec02fb132660ff175b7747b95dcb77ac26562"}, + {file = "coverage-7.2.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f2f67fe12b22cd130d34d0ef79206061bfb5eda52feb6ce0dba0644e20a03cf4"}, + {file = "coverage-7.2.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a342242fe22407f3c17f4b499276a02b01e80f861f1682ad1d95b04018e0c0d4"}, + {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:171717c7cb6b453aebac9a2ef603699da237f341b38eebfee9be75d27dc38e01"}, + {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49969a9f7ffa086d973d91cec8d2e31080436ef0fb4a359cae927e742abfaaa6"}, + {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b46517c02ccd08092f4fa99f24c3b83d8f92f739b4657b0f146246a0ca6a831d"}, + {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:a3d33a6b3eae87ceaefa91ffdc130b5e8536182cd6dfdbfc1aa56b46ff8c86de"}, + {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:976b9c42fb2a43ebf304fa7d4a310e5f16cc99992f33eced91ef6f908bd8f33d"}, + {file = "coverage-7.2.7-cp312-cp312-win32.whl", hash = "sha256:8de8bb0e5ad103888d65abef8bca41ab93721647590a3f740100cd65c3b00511"}, + {file = "coverage-7.2.7-cp312-cp312-win_amd64.whl", hash = "sha256:9e31cb64d7de6b6f09702bb27c02d1904b3aebfca610c12772452c4e6c21a0d3"}, + {file = "coverage-7.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58c2ccc2f00ecb51253cbe5d8d7122a34590fac9646a960d1430d5b15321d95f"}, + {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d22656368f0e6189e24722214ed8d66b8022db19d182927b9a248a2a8a2f67eb"}, + {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a895fcc7b15c3fc72beb43cdcbdf0ddb7d2ebc959edac9cef390b0d14f39f8a9"}, + {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84606b74eb7de6ff581a7915e2dab7a28a0517fbe1c9239eb227e1354064dcd"}, + {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a5f9e1dbd7fbe30196578ca36f3fba75376fb99888c395c5880b355e2875f8a"}, + {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:419bfd2caae268623dd469eff96d510a920c90928b60f2073d79f8fe2bbc5959"}, + {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2aee274c46590717f38ae5e4650988d1af340fe06167546cc32fe2f58ed05b02"}, + {file = "coverage-7.2.7-cp37-cp37m-win32.whl", hash = "sha256:61b9a528fb348373c433e8966535074b802c7a5d7f23c4f421e6c6e2f1697a6f"}, + {file = "coverage-7.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:b1c546aca0ca4d028901d825015dc8e4d56aac4b541877690eb76490f1dc8ed0"}, + {file = "coverage-7.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:54b896376ab563bd38453cecb813c295cf347cf5906e8b41d340b0321a5433e5"}, + {file = "coverage-7.2.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3d376df58cc111dc8e21e3b6e24606b5bb5dee6024f46a5abca99124b2229ef5"}, + {file = "coverage-7.2.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e330fc79bd7207e46c7d7fd2bb4af2963f5f635703925543a70b99574b0fea9"}, + {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e9d683426464e4a252bf70c3498756055016f99ddaec3774bf368e76bbe02b6"}, + {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d13c64ee2d33eccf7437961b6ea7ad8673e2be040b4f7fd4fd4d4d28d9ccb1e"}, + {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b7aa5f8a41217360e600da646004f878250a0d6738bcdc11a0a39928d7dc2050"}, + {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8fa03bce9bfbeeef9f3b160a8bed39a221d82308b4152b27d82d8daa7041fee5"}, + {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:245167dd26180ab4c91d5e1496a30be4cd721a5cf2abf52974f965f10f11419f"}, + {file = "coverage-7.2.7-cp38-cp38-win32.whl", hash = "sha256:d2c2db7fd82e9b72937969bceac4d6ca89660db0a0967614ce2481e81a0b771e"}, + {file = "coverage-7.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:2e07b54284e381531c87f785f613b833569c14ecacdcb85d56b25c4622c16c3c"}, + {file = "coverage-7.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:537891ae8ce59ef63d0123f7ac9e2ae0fc8b72c7ccbe5296fec45fd68967b6c9"}, + {file = "coverage-7.2.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:06fb182e69f33f6cd1d39a6c597294cff3143554b64b9825d1dc69d18cc2fff2"}, + {file = "coverage-7.2.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:201e7389591af40950a6480bd9edfa8ed04346ff80002cec1a66cac4549c1ad7"}, + {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f6951407391b639504e3b3be51b7ba5f3528adbf1a8ac3302b687ecababf929e"}, + {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f48351d66575f535669306aa7d6d6f71bc43372473b54a832222803eb956fd1"}, + {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b29019c76039dc3c0fd815c41392a044ce555d9bcdd38b0fb60fb4cd8e475ba9"}, + {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:81c13a1fc7468c40f13420732805a4c38a105d89848b7c10af65a90beff25250"}, + {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:975d70ab7e3c80a3fe86001d8751f6778905ec723f5b110aed1e450da9d4b7f2"}, + {file = "coverage-7.2.7-cp39-cp39-win32.whl", hash = "sha256:7ee7d9d4822c8acc74a5e26c50604dff824710bc8de424904c0982e25c39c6cb"}, + {file = "coverage-7.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:eb393e5ebc85245347950143969b241d08b52b88a3dc39479822e073a1a8eb27"}, + {file = "coverage-7.2.7-pp37.pp38.pp39-none-any.whl", hash = "sha256:b7b4c971f05e6ae490fef852c218b0e79d4e52f79ef0c8475566584a8fb3e01d"}, + {file = "coverage-7.2.7.tar.gz", hash = "sha256:924d94291ca674905fe9481f12294eb11f2d3d3fd1adb20314ba89e94f44ed59"}, +] [package.dependencies] tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} @@ -90,30 +110,30 @@ toml = ["tomli"] [[package]] name = "dill" -version = "0.3.6" -description = "serialize all of python" +version = "0.3.7" +description = "serialize all of Python" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "dill-0.3.7-py3-none-any.whl", hash = "sha256:76b122c08ef4ce2eedcd4d1abd8e641114bfc6c2867f49f3c41facf65bf19f5e"}, + {file = "dill-0.3.7.tar.gz", hash = "sha256:cc1c8b182eb3013e24bd475ff2e9295af86c1a38eb1aff128dac8962a9ce3c03"}, +] [package.extras] graph = ["objgraph (>=1.7.2)"] -[[package]] -name = "docutils" -version = "0.19" -description = "Docutils -- Python Documentation Utilities" -category = "dev" -optional = false -python-versions = ">=3.7" - [[package]] name = "exceptiongroup" -version = "1.0.3" +version = "1.1.2" description = "Backport of PEP 654 (exception groups)" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.1.2-py3-none-any.whl", hash = "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f"}, + {file = "exceptiongroup-1.1.2.tar.gz", hash = "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5"}, +] [package.extras] test = ["pytest (>=6)"] @@ -125,6 +145,10 @@ description = "the modular source code checker: pep8 pyflakes and co" category = "main" optional = false python-versions = ">=3.6.1" +files = [ + {file = "flake8-5.0.4-py2.py3-none-any.whl", hash = "sha256:7a1cf6b73744f5806ab95e526f6f0d8c01c66d7bbe349562d22dfca20610b248"}, + {file = "flake8-5.0.4.tar.gz", hash = "sha256:6fbe320aad8d6b95cec8b8e47bc933004678dc63095be98528b7bdd2a9f510db"}, +] [package.dependencies] mccabe = ">=0.7.0,<0.8.0" @@ -133,99 +157,95 @@ pyflakes = ">=2.5.0,<2.6.0" [[package]] name = "flake8-docstrings" -version = "1.6.0" +version = "1.7.0" description = "Extension for flake8 which uses pydocstyle to check docstrings" category = "main" optional = false -python-versions = "*" +python-versions = ">=3.7" +files = [ + {file = "flake8_docstrings-1.7.0-py2.py3-none-any.whl", hash = "sha256:51f2344026da083fc084166a9353f5082b01f72901df422f74b4d953ae88ac75"}, + {file = "flake8_docstrings-1.7.0.tar.gz", hash = "sha256:4c8cc748dc16e6869728699e5d0d685da9a10b0ea718e090b1ba088e67a941af"}, +] [package.dependencies] flake8 = ">=3" pydocstyle = ">=2.1" -[[package]] -name = "idna" -version = "3.4" -description = "Internationalized Domain Names in Applications (IDNA)" -category = "dev" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "imagesize" -version = "1.4.1" -description = "Getting image size from png/jpeg/jpeg2000/gif file" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "importlib-metadata" -version = "5.0.0" -description = "Read metadata from Python packages" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -zipp = ">=0.5" - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] -perf = ["ipython"] -testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] - [[package]] name = "iniconfig" -version = "1.1.1" -description = "iniconfig: brain-dead simple config-ini parsing" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] [[package]] name = "isort" -version = "5.10.1" +version = "5.12.0" description = "A Python utility / library to sort Python imports." category = "dev" optional = false -python-versions = ">=3.6.1,<4.0" +python-versions = ">=3.8.0" +files = [ + {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, + {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, +] [package.extras] -colors = ["colorama (>=0.4.3,<0.5.0)"] -pipfile_deprecated_finder = ["pipreqs", "requirementslib"] +colors = ["colorama (>=0.4.3)"] +pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] plugins = ["setuptools"] -requirements_deprecated_finder = ["pip-api", "pipreqs"] - -[[package]] -name = "jinja2" -version = "3.1.2" -description = "A very fast and expressive template engine." -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] +requirements-deprecated-finder = ["pip-api", "pipreqs"] [[package]] name = "lazy-object-proxy" -version = "1.8.0" +version = "1.9.0" description = "A fast and thorough lazy object proxy." category = "dev" optional = false python-versions = ">=3.7" - -[[package]] -name = "markupsafe" -version = "2.1.1" -description = "Safely add untrusted strings to HTML/XML markup." -category = "dev" -optional = false -python-versions = ">=3.7" +files = [ + {file = "lazy-object-proxy-1.9.0.tar.gz", hash = "sha256:659fb5809fa4629b8a1ac5106f669cfc7bef26fbb389dda53b3e010d1ac4ebae"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b40387277b0ed2d0602b8293b94d7257e17d1479e257b4de114ea11a8cb7f2d7"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8c6cfb338b133fbdbc5cfaa10fe3c6aeea827db80c978dbd13bc9dd8526b7d4"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:721532711daa7db0d8b779b0bb0318fa87af1c10d7fe5e52ef30f8eff254d0cd"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:66a3de4a3ec06cd8af3f61b8e1ec67614fbb7c995d02fa224813cb7afefee701"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1aa3de4088c89a1b69f8ec0dcc169aa725b0ff017899ac568fe44ddc1396df46"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-win32.whl", hash = "sha256:f0705c376533ed2a9e5e97aacdbfe04cecd71e0aa84c7c0595d02ef93b6e4455"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:ea806fd4c37bf7e7ad82537b0757999264d5f70c45468447bb2b91afdbe73a6e"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:946d27deaff6cf8452ed0dba83ba38839a87f4f7a9732e8f9fd4107b21e6ff07"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79a31b086e7e68b24b99b23d57723ef7e2c6d81ed21007b6281ebcd1688acb0a"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f699ac1c768270c9e384e4cbd268d6e67aebcfae6cd623b4d7c3bfde5a35db59"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bfb38f9ffb53b942f2b5954e0f610f1e721ccebe9cce9025a38c8ccf4a5183a4"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:189bbd5d41ae7a498397287c408617fe5c48633e7755287b21d741f7db2706a9"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-win32.whl", hash = "sha256:81fc4d08b062b535d95c9ea70dbe8a335c45c04029878e62d744bdced5141586"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:f2457189d8257dd41ae9b434ba33298aec198e30adf2dcdaaa3a28b9994f6adb"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d9e25ef10a39e8afe59a5c348a4dbf29b4868ab76269f81ce1674494e2565a6e"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cbf9b082426036e19c6924a9ce90c740a9861e2bdc27a4834fd0a910742ac1e8"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f5fa4a61ce2438267163891961cfd5e32ec97a2c444e5b842d574251ade27d2"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8fa02eaab317b1e9e03f69aab1f91e120e7899b392c4fc19807a8278a07a97e8"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e7c21c95cae3c05c14aafffe2865bbd5e377cfc1348c4f7751d9dc9a48ca4bda"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win32.whl", hash = "sha256:f12ad7126ae0c98d601a7ee504c1122bcef553d1d5e0c3bfa77b16b3968d2734"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:edd20c5a55acb67c7ed471fa2b5fb66cb17f61430b7a6b9c3b4a1e40293b1671"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0daa332786cf3bb49e10dc6a17a52f6a8f9601b4cf5c295a4f85854d61de63"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cd077f3d04a58e83d04b20e334f678c2b0ff9879b9375ed107d5d07ff160171"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:660c94ea760b3ce47d1855a30984c78327500493d396eac4dfd8bd82041b22be"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:212774e4dfa851e74d393a2370871e174d7ff0ebc980907723bb67d25c8a7c30"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0117049dd1d5635bbff65444496c90e0baa48ea405125c088e93d9cf4525b11"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-win32.whl", hash = "sha256:0a891e4e41b54fd5b8313b96399f8b0e173bbbfc03c7631f01efbe29bb0bcf82"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:9990d8e71b9f6488e91ad25f322898c136b008d87bf852ff65391b004da5e17b"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9e7551208b2aded9c1447453ee366f1c4070602b3d932ace044715d89666899b"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f83ac4d83ef0ab017683d715ed356e30dd48a93746309c8f3517e1287523ef4"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7322c3d6f1766d4ef1e51a465f47955f1e8123caee67dd641e67d539a534d006"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:18b78ec83edbbeb69efdc0e9c1cb41a3b1b1ed11ddd8ded602464c3fc6020494"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:09763491ce220c0299688940f8dc2c5d05fd1f45af1e42e636b2e8b2303e4382"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-win32.whl", hash = "sha256:9090d8e53235aa280fc9239a86ae3ea8ac58eff66a705fa6aa2ec4968b95c821"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:db1c1722726f47e10e0b5fdbf15ac3b8adb58c091d12b3ab713965795036985f"}, +] [[package]] name = "mccabe" @@ -234,37 +254,50 @@ description = "McCabe checker, plugin for flake8" category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] [[package]] name = "packaging" -version = "21.3" +version = "23.1" description = "Core utilities for Python packages" category = "dev" optional = false -python-versions = ">=3.6" - -[package.dependencies] -pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" +python-versions = ">=3.7" +files = [ + {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, + {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, +] [[package]] name = "platformdirs" -version = "2.5.4" +version = "3.10.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, + {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, +] [package.extras] -docs = ["furo (>=2022.9.29)", "proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.4)"] -test = ["appdirs (==1.4.4)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] [[package]] name = "pluggy" -version = "1.0.0" +version = "1.2.0" description = "plugin and hook calling mechanisms for python" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" +files = [ + {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, + {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, +] [package.extras] dev = ["pre-commit", "tox"] @@ -277,20 +310,28 @@ description = "Python style guide checker" category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "pycodestyle-2.9.1-py2.py3-none-any.whl", hash = "sha256:d1735fc58b418fd7c5f658d28d943854f8a849b01a5d0a1e6f3f3fdd0166804b"}, + {file = "pycodestyle-2.9.1.tar.gz", hash = "sha256:2c9607871d58c76354b697b42f5d57e1ada7d261c261efac224b664affdc5785"}, +] [[package]] name = "pydocstyle" -version = "6.1.1" +version = "6.3.0" description = "Python docstring style checker" category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "pydocstyle-6.3.0-py3-none-any.whl", hash = "sha256:118762d452a49d6b05e194ef344a55822987a462831ade91ec5c06fd2169d019"}, + {file = "pydocstyle-6.3.0.tar.gz", hash = "sha256:7ce43f0c0ac87b07494eb9c0b462c0b73e6ff276807f204d6b53edc72b7e44e1"}, +] [package.dependencies] -snowballstemmer = "*" +snowballstemmer = ">=2.2.0" [package.extras] -toml = ["toml"] +toml = ["tomli (>=1.2.3)"] [[package]] name = "pyflakes" @@ -299,30 +340,30 @@ description = "passive checker of Python programs" category = "main" optional = false python-versions = ">=3.6" - -[[package]] -name = "pygments" -version = "2.13.0" -description = "Pygments is a syntax highlighting package written in Python." -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.extras] -plugins = ["importlib-metadata"] +files = [ + {file = "pyflakes-2.5.0-py2.py3-none-any.whl", hash = "sha256:4579f67d887f804e67edb544428f264b7b24f435b263c4614f384135cea553d2"}, + {file = "pyflakes-2.5.0.tar.gz", hash = "sha256:491feb020dca48ccc562a8c0cbe8df07ee13078df59813b83959cbdada312ea3"}, +] [[package]] name = "pylint" -version = "2.15.5" +version = "2.17.5" description = "python code static checker" category = "dev" optional = false python-versions = ">=3.7.2" +files = [ + {file = "pylint-2.17.5-py3-none-any.whl", hash = "sha256:73995fb8216d3bed149c8d51bba25b2c52a8251a2c8ac846ec668ce38fab5413"}, + {file = "pylint-2.17.5.tar.gz", hash = "sha256:f7b601cbc06fef7e62a754e2b41294c2aa31f1cb659624b9a85bcba29eaf8252"}, +] [package.dependencies] -astroid = ">=2.12.12,<=2.14.0-dev0" +astroid = ">=2.15.6,<=2.17.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -dill = ">=0.2" +dill = [ + {version = ">=0.2", markers = "python_version < \"3.11\""}, + {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, +] isort = ">=4.2.5,<6" mccabe = ">=0.6,<0.8" platformdirs = ">=2.2.0" @@ -334,27 +375,19 @@ typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\"" spelling = ["pyenchant (>=3.2,<4.0)"] testutils = ["gitpython (>3)"] -[[package]] -name = "pyparsing" -version = "3.0.9" -description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "dev" -optional = false -python-versions = ">=3.6.8" - -[package.extras] -diagrams = ["jinja2", "railroad-diagrams"] - [[package]] name = "pytest" -version = "7.2.0" +version = "7.4.0" description = "pytest: simple powerful testing with Python" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"}, + {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"}, +] [package.dependencies] -attrs = ">=19.2.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" @@ -363,29 +396,38 @@ pluggy = ">=0.12,<2.0" tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-asyncio" -version = "0.20.2" +version = "0.20.3" description = "Pytest support for asyncio" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "pytest-asyncio-0.20.3.tar.gz", hash = "sha256:83cbf01169ce3e8eb71c6c278ccb0574d1a7a3bb8eaaf5e50e0ad342afb33b36"}, + {file = "pytest_asyncio-0.20.3-py3-none-any.whl", hash = "sha256:f129998b209d04fcc65c96fc85c11e5316738358909a8399e93be553d7656442"}, +] [package.dependencies] pytest = ">=6.1.0" [package.extras] +docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1.0)"] testing = ["coverage (>=6.2)", "flaky (>=3.5.0)", "hypothesis (>=5.7.1)", "mypy (>=0.931)", "pytest-trio (>=0.7.0)"] [[package]] name = "pytest-cov" -version = "4.0.0" +version = "4.1.0" description = "Pytest plugin for measuring coverage." category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" +files = [ + {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"}, + {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"}, +] [package.dependencies] coverage = {version = ">=5.2.1", extras = ["toml"]} @@ -394,40 +436,6 @@ pytest = ">=4.6" [package.extras] testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] -[[package]] -name = "pytz" -version = "2022.6" -description = "World timezone definitions, modern and historical" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "pyyaml" -version = "6.0" -description = "YAML parser and emitter for Python" -category = "dev" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "requests" -version = "2.28.1" -description = "Python HTTP for Humans." -category = "dev" -optional = false -python-versions = ">=3.7, <4" - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<3" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<1.27" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] - [[package]] name = "snowballstemmer" version = "2.2.0" @@ -435,129 +443,10 @@ description = "This package provides 29 stemmers for 28 languages generated from category = "main" optional = false python-versions = "*" - -[[package]] -name = "sphinx" -version = "5.3.0" -description = "Python documentation generator" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -alabaster = ">=0.7,<0.8" -babel = ">=2.9" -colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.14,<0.20" -imagesize = ">=1.3" -importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} -Jinja2 = ">=3.0" -packaging = ">=21.0" -Pygments = ">=2.12" -requests = ">=2.5.0" -snowballstemmer = ">=2.0" -sphinxcontrib-applehelp = "*" -sphinxcontrib-devhelp = "*" -sphinxcontrib-htmlhelp = ">=2.0.0" -sphinxcontrib-jsmath = "*" -sphinxcontrib-qthelp = "*" -sphinxcontrib-serializinghtml = ">=1.1.5" - -[package.extras] -docs = ["sphinxcontrib-websupport"] -lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-bugbear", "flake8-comprehensions", "flake8-simplify", "isort", "mypy (>=0.981)", "sphinx-lint", "types-requests", "types-typed-ast"] -test = ["cython", "html5lib", "pytest (>=4.6)", "typed-ast"] - -[[package]] -name = "sphinx-autoapi" -version = "1.9.0" -description = "Sphinx API documentation generator" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -astroid = ">=2.7" -Jinja2 = "*" -PyYAML = "*" -sphinx = ">=3.0" -unidecode = "*" - -[package.extras] -docs = ["sphinx", "sphinx-rtd-theme"] -dotnet = ["sphinxcontrib-dotnetdomain"] -go = ["sphinxcontrib-golangdomain"] - -[[package]] -name = "sphinxcontrib-applehelp" -version = "1.0.2" -description = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple help books" -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["pytest"] - -[[package]] -name = "sphinxcontrib-devhelp" -version = "1.0.2" -description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["pytest"] - -[[package]] -name = "sphinxcontrib-htmlhelp" -version = "2.0.0" -description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["html5lib", "pytest"] - -[[package]] -name = "sphinxcontrib-jsmath" -version = "1.0.1" -description = "A sphinx extension which renders display math in HTML via JavaScript" -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.extras] -test = ["flake8", "mypy", "pytest"] - -[[package]] -name = "sphinxcontrib-qthelp" -version = "1.0.3" -description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["pytest"] - -[[package]] -name = "sphinxcontrib-serializinghtml" -version = "1.1.5" -description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["pytest"] +files = [ + {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, + {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, +] [[package]] name = "tomli" @@ -566,475 +455,121 @@ description = "A lil' TOML parser" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] [[package]] name = "tomlkit" -version = "0.11.6" +version = "0.12.1" description = "Style preserving TOML library" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" +files = [ + {file = "tomlkit-0.12.1-py3-none-any.whl", hash = "sha256:712cbd236609acc6a3e2e97253dfc52d4c2082982a88f61b640ecf0817eab899"}, + {file = "tomlkit-0.12.1.tar.gz", hash = "sha256:38e1ff8edb991273ec9f6181244a6a391ac30e9f5098e7535640ea6be97a7c86"}, +] [[package]] name = "typing-extensions" -version = "4.4.0" +version = "4.7.1" description = "Backported and Experimental Type Hints for Python 3.7+" category = "dev" optional = false python-versions = ">=3.7" - -[[package]] -name = "unidecode" -version = "1.3.6" -description = "ASCII transliterations of Unicode text" -category = "dev" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "urllib3" -version = "1.26.12" -description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +files = [ + {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, + {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, +] [[package]] name = "wrapt" -version = "1.14.1" +version = "1.15.0" description = "Module for decorators, wrappers and monkey patching." category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" - -[[package]] -name = "zipp" -version = "3.10.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] -testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] +files = [ + {file = "wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a"}, + {file = "wrapt-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923"}, + {file = "wrapt-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975"}, + {file = "wrapt-1.15.0-cp310-cp310-win32.whl", hash = "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1"}, + {file = "wrapt-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e"}, + {file = "wrapt-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7"}, + {file = "wrapt-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98"}, + {file = "wrapt-1.15.0-cp311-cp311-win32.whl", hash = "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416"}, + {file = "wrapt-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248"}, + {file = "wrapt-1.15.0-cp35-cp35m-win32.whl", hash = "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559"}, + {file = "wrapt-1.15.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639"}, + {file = "wrapt-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2"}, + {file = "wrapt-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1"}, + {file = "wrapt-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420"}, + {file = "wrapt-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653"}, + {file = "wrapt-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0"}, + {file = "wrapt-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e"}, + {file = "wrapt-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145"}, + {file = "wrapt-1.15.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7"}, + {file = "wrapt-1.15.0-cp38-cp38-win32.whl", hash = "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b"}, + {file = "wrapt-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1"}, + {file = "wrapt-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86"}, + {file = "wrapt-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9"}, + {file = "wrapt-1.15.0-cp39-cp39-win32.whl", hash = "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff"}, + {file = "wrapt-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6"}, + {file = "wrapt-1.15.0-py3-none-any.whl", hash = "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640"}, + {file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, +] [metadata] -lock-version = "1.1" +lock-version = "2.0" python-versions = "^3.9" -content-hash = "d0a8e012de0c807d96a667c28eb9cd18e6ab84921dbf8e903c83db5084ce1f85" - -[metadata.files] -alabaster = [ - {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, - {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, -] -astroid = [ - {file = "astroid-2.12.12-py3-none-any.whl", hash = "sha256:72702205200b2a638358369d90c222d74ebc376787af8fb2f7f2a86f7b5cc85f"}, - {file = "astroid-2.12.12.tar.gz", hash = "sha256:1c00a14f5a3ed0339d38d2e2e5b74ea2591df5861c0936bb292b84ccf3a78d83"}, -] -attrs = [ - {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"}, - {file = "attrs-22.1.0.tar.gz", hash = "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"}, -] -babel = [ - {file = "Babel-2.11.0-py3-none-any.whl", hash = "sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe"}, - {file = "Babel-2.11.0.tar.gz", hash = "sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6"}, -] -certifi = [ - {file = "certifi-2022.9.24-py3-none-any.whl", hash = "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382"}, - {file = "certifi-2022.9.24.tar.gz", hash = "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14"}, -] -charset-normalizer = [ - {file = "charset-normalizer-2.1.1.tar.gz", hash = "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845"}, - {file = "charset_normalizer-2.1.1-py3-none-any.whl", hash = "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f"}, -] -colorama = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] -coverage = [ - {file = "coverage-6.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef8674b0ee8cc11e2d574e3e2998aea5df5ab242e012286824ea3c6970580e53"}, - {file = "coverage-6.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:784f53ebc9f3fd0e2a3f6a78b2be1bd1f5575d7863e10c6e12504f240fd06660"}, - {file = "coverage-6.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4a5be1748d538a710f87542f22c2cad22f80545a847ad91ce45e77417293eb4"}, - {file = "coverage-6.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83516205e254a0cb77d2d7bb3632ee019d93d9f4005de31dca0a8c3667d5bc04"}, - {file = "coverage-6.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af4fffaffc4067232253715065e30c5a7ec6faac36f8fc8d6f64263b15f74db0"}, - {file = "coverage-6.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:97117225cdd992a9c2a5515db1f66b59db634f59d0679ca1fa3fe8da32749cae"}, - {file = "coverage-6.5.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a1170fa54185845505fbfa672f1c1ab175446c887cce8212c44149581cf2d466"}, - {file = "coverage-6.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a"}, - {file = "coverage-6.5.0-cp310-cp310-win32.whl", hash = "sha256:5dbec3b9095749390c09ab7c89d314727f18800060d8d24e87f01fb9cfb40b32"}, - {file = "coverage-6.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:59f53f1dc5b656cafb1badd0feb428c1e7bc19b867479ff72f7a9dd9b479f10e"}, - {file = "coverage-6.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4a5375e28c5191ac38cca59b38edd33ef4cc914732c916f2929029b4bfb50795"}, - {file = "coverage-6.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4ed2820d919351f4167e52425e096af41bfabacb1857186c1ea32ff9983ed75"}, - {file = "coverage-6.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:33a7da4376d5977fbf0a8ed91c4dffaaa8dbf0ddbf4c8eea500a2486d8bc4d7b"}, - {file = "coverage-6.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8fb6cf131ac4070c9c5a3e21de0f7dc5a0fbe8bc77c9456ced896c12fcdad91"}, - {file = "coverage-6.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a6b7d95969b8845250586f269e81e5dfdd8ff828ddeb8567a4a2eaa7313460c4"}, - {file = "coverage-6.5.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1ef221513e6f68b69ee9e159506d583d31aa3567e0ae84eaad9d6ec1107dddaa"}, - {file = "coverage-6.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cca4435eebea7962a52bdb216dec27215d0df64cf27fc1dd538415f5d2b9da6b"}, - {file = "coverage-6.5.0-cp311-cp311-win32.whl", hash = "sha256:98e8a10b7a314f454d9eff4216a9a94d143a7ee65018dd12442e898ee2310578"}, - {file = "coverage-6.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:bc8ef5e043a2af066fa8cbfc6e708d58017024dc4345a1f9757b329a249f041b"}, - {file = "coverage-6.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4433b90fae13f86fafff0b326453dd42fc9a639a0d9e4eec4d366436d1a41b6d"}, - {file = "coverage-6.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4f05d88d9a80ad3cac6244d36dd89a3c00abc16371769f1340101d3cb899fc3"}, - {file = "coverage-6.5.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:94e2565443291bd778421856bc975d351738963071e9b8839ca1fc08b42d4bef"}, - {file = "coverage-6.5.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79"}, - {file = "coverage-6.5.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:255758a1e3b61db372ec2736c8e2a1fdfaf563977eedbdf131de003ca5779b7d"}, - {file = "coverage-6.5.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:851cf4ff24062c6aec510a454b2584f6e998cada52d4cb58c5e233d07172e50c"}, - {file = "coverage-6.5.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:12adf310e4aafddc58afdb04d686795f33f4d7a6fa67a7a9d4ce7d6ae24d949f"}, - {file = "coverage-6.5.0-cp37-cp37m-win32.whl", hash = "sha256:b5604380f3415ba69de87a289a2b56687faa4fe04dbee0754bfcae433489316b"}, - {file = "coverage-6.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:4a8dbc1f0fbb2ae3de73eb0bdbb914180c7abfbf258e90b311dcd4f585d44bd2"}, - {file = "coverage-6.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d900bb429fdfd7f511f868cedd03a6bbb142f3f9118c09b99ef8dc9bf9643c3c"}, - {file = "coverage-6.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2198ea6fc548de52adc826f62cb18554caedfb1d26548c1b7c88d8f7faa8f6ba"}, - {file = "coverage-6.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c4459b3de97b75e3bd6b7d4b7f0db13f17f504f3d13e2a7c623786289dd670e"}, - {file = "coverage-6.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:20c8ac5386253717e5ccc827caad43ed66fea0efe255727b1053a8154d952398"}, - {file = "coverage-6.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b07130585d54fe8dff3d97b93b0e20290de974dc8177c320aeaf23459219c0b"}, - {file = "coverage-6.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:dbdb91cd8c048c2b09eb17713b0c12a54fbd587d79adcebad543bc0cd9a3410b"}, - {file = "coverage-6.5.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:de3001a203182842a4630e7b8d1a2c7c07ec1b45d3084a83d5d227a3806f530f"}, - {file = "coverage-6.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e07f4a4a9b41583d6eabec04f8b68076ab3cd44c20bd29332c6572dda36f372e"}, - {file = "coverage-6.5.0-cp38-cp38-win32.whl", hash = "sha256:6d4817234349a80dbf03640cec6109cd90cba068330703fa65ddf56b60223a6d"}, - {file = "coverage-6.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:7ccf362abd726b0410bf8911c31fbf97f09f8f1061f8c1cf03dfc4b6372848f6"}, - {file = "coverage-6.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:633713d70ad6bfc49b34ead4060531658dc6dfc9b3eb7d8a716d5873377ab745"}, - {file = "coverage-6.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:95203854f974e07af96358c0b261f1048d8e1083f2de9b1c565e1be4a3a48cfc"}, - {file = "coverage-6.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9023e237f4c02ff739581ef35969c3739445fb059b060ca51771e69101efffe"}, - {file = "coverage-6.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:265de0fa6778d07de30bcf4d9dc471c3dc4314a23a3c6603d356a3c9abc2dfcf"}, - {file = "coverage-6.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f830ed581b45b82451a40faabb89c84e1a998124ee4212d440e9c6cf70083e5"}, - {file = "coverage-6.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7b6be138d61e458e18d8e6ddcddd36dd96215edfe5f1168de0b1b32635839b62"}, - {file = "coverage-6.5.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:42eafe6778551cf006a7c43153af1211c3aaab658d4d66fa5fcc021613d02518"}, - {file = "coverage-6.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:723e8130d4ecc8f56e9a611e73b31219595baa3bb252d539206f7bbbab6ffc1f"}, - {file = "coverage-6.5.0-cp39-cp39-win32.whl", hash = "sha256:d9ecf0829c6a62b9b573c7bb6d4dcd6ba8b6f80be9ba4fc7ed50bf4ac9aecd72"}, - {file = "coverage-6.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:fc2af30ed0d5ae0b1abdb4ebdce598eafd5b35397d4d75deb341a614d333d987"}, - {file = "coverage-6.5.0-pp36.pp37.pp38-none-any.whl", hash = "sha256:1431986dac3923c5945271f169f59c45b8802a114c8f548d611f2015133df77a"}, - {file = "coverage-6.5.0.tar.gz", hash = "sha256:f642e90754ee3e06b0e7e51bce3379590e76b7f76b708e1a71ff043f87025c84"}, -] -dill = [ - {file = "dill-0.3.6-py3-none-any.whl", hash = "sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0"}, - {file = "dill-0.3.6.tar.gz", hash = "sha256:e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373"}, -] -docutils = [ - {file = "docutils-0.19-py3-none-any.whl", hash = "sha256:5e1de4d849fee02c63b040a4a3fd567f4ab104defd8a5511fbbc24a8a017efbc"}, - {file = "docutils-0.19.tar.gz", hash = "sha256:33995a6753c30b7f577febfc2c50411fec6aac7f7ffeb7c4cfe5991072dcf9e6"}, -] -exceptiongroup = [ - {file = "exceptiongroup-1.0.3-py3-none-any.whl", hash = "sha256:6002703c7d31fb9950ddc8780840f67880c440895dc1151dd551553aa1246e4a"}, - {file = "exceptiongroup-1.0.3.tar.gz", hash = "sha256:76cac74b5207c5997678a1c7105cb6f14213c9c63c096a38cfcb529d83ce5c02"}, -] -flake8 = [ - {file = "flake8-5.0.4-py2.py3-none-any.whl", hash = "sha256:7a1cf6b73744f5806ab95e526f6f0d8c01c66d7bbe349562d22dfca20610b248"}, - {file = "flake8-5.0.4.tar.gz", hash = "sha256:6fbe320aad8d6b95cec8b8e47bc933004678dc63095be98528b7bdd2a9f510db"}, -] -flake8-docstrings = [ - {file = "flake8-docstrings-1.6.0.tar.gz", hash = "sha256:9fe7c6a306064af8e62a055c2f61e9eb1da55f84bb39caef2b84ce53708ac34b"}, - {file = "flake8_docstrings-1.6.0-py2.py3-none-any.whl", hash = "sha256:99cac583d6c7e32dd28bbfbef120a7c0d1b6dde4adb5a9fd441c4227a6534bde"}, -] -idna = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, -] -imagesize = [ - {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, - {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, -] -importlib-metadata = [ - {file = "importlib_metadata-5.0.0-py3-none-any.whl", hash = "sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43"}, - {file = "importlib_metadata-5.0.0.tar.gz", hash = "sha256:da31db32b304314d044d3c12c79bd59e307889b287ad12ff387b3500835fc2ab"}, -] -iniconfig = [ - {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, - {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, -] -isort = [ - {file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"}, - {file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"}, -] -jinja2 = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, -] -lazy-object-proxy = [ - {file = "lazy-object-proxy-1.8.0.tar.gz", hash = "sha256:c219a00245af0f6fa4e95901ed28044544f50152840c5b6a3e7b2568db34d156"}, - {file = "lazy_object_proxy-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4fd031589121ad46e293629b39604031d354043bb5cdf83da4e93c2d7f3389fe"}, - {file = "lazy_object_proxy-1.8.0-cp310-cp310-win32.whl", hash = "sha256:b70d6e7a332eb0217e7872a73926ad4fdc14f846e85ad6749ad111084e76df25"}, - {file = "lazy_object_proxy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:eb329f8d8145379bf5dbe722182410fe8863d186e51bf034d2075eb8d85ee25b"}, - {file = "lazy_object_proxy-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4e2d9f764f1befd8bdc97673261b8bb888764dfdbd7a4d8f55e4fbcabb8c3fb7"}, - {file = "lazy_object_proxy-1.8.0-cp311-cp311-win32.whl", hash = "sha256:e20bfa6db17a39c706d24f82df8352488d2943a3b7ce7d4c22579cb89ca8896e"}, - {file = "lazy_object_proxy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:14010b49a2f56ec4943b6cf925f597b534ee2fe1f0738c84b3bce0c1a11ff10d"}, - {file = "lazy_object_proxy-1.8.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6850e4aeca6d0df35bb06e05c8b934ff7c533734eb51d0ceb2d63696f1e6030c"}, - {file = "lazy_object_proxy-1.8.0-cp37-cp37m-win32.whl", hash = "sha256:5b51d6f3bfeb289dfd4e95de2ecd464cd51982fe6f00e2be1d0bf94864d58acd"}, - {file = "lazy_object_proxy-1.8.0-cp37-cp37m-win_amd64.whl", hash = "sha256:6f593f26c470a379cf7f5bc6db6b5f1722353e7bf937b8d0d0b3fba911998858"}, - {file = "lazy_object_proxy-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c1c7c0433154bb7c54185714c6929acc0ba04ee1b167314a779b9025517eada"}, - {file = "lazy_object_proxy-1.8.0-cp38-cp38-win32.whl", hash = "sha256:d176f392dbbdaacccf15919c77f526edf11a34aece58b55ab58539807b85436f"}, - {file = "lazy_object_proxy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:afcaa24e48bb23b3be31e329deb3f1858f1f1df86aea3d70cb5c8578bfe5261c"}, - {file = "lazy_object_proxy-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:71d9ae8a82203511a6f60ca5a1b9f8ad201cac0fc75038b2dc5fa519589c9288"}, - {file = "lazy_object_proxy-1.8.0-cp39-cp39-win32.whl", hash = "sha256:8f6ce2118a90efa7f62dd38c7dbfffd42f468b180287b748626293bf12ed468f"}, - {file = "lazy_object_proxy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:eac3a9a5ef13b332c059772fd40b4b1c3d45a3a2b05e33a361dee48e54a4dad0"}, - {file = "lazy_object_proxy-1.8.0-pp37-pypy37_pp73-any.whl", hash = "sha256:ae032743794fba4d171b5b67310d69176287b5bf82a21f588282406a79498891"}, - {file = "lazy_object_proxy-1.8.0-pp38-pypy38_pp73-any.whl", hash = "sha256:7e1561626c49cb394268edd00501b289053a652ed762c58e1081224c8d881cec"}, - {file = "lazy_object_proxy-1.8.0-pp39-pypy39_pp73-any.whl", hash = "sha256:ce58b2b3734c73e68f0e30e4e725264d4d6be95818ec0a0be4bb6bf9a7e79aa8"}, -] -markupsafe = [ - {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, - {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, -] -mccabe = [ - {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, - {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, -] -packaging = [ - {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, - {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, -] -platformdirs = [ - {file = "platformdirs-2.5.4-py3-none-any.whl", hash = "sha256:af0276409f9a02373d540bf8480021a048711d572745aef4b7842dad245eba10"}, - {file = "platformdirs-2.5.4.tar.gz", hash = "sha256:1006647646d80f16130f052404c6b901e80ee4ed6bef6792e1f238a8969106f7"}, -] -pluggy = [ - {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, - {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, -] -pycodestyle = [ - {file = "pycodestyle-2.9.1-py2.py3-none-any.whl", hash = "sha256:d1735fc58b418fd7c5f658d28d943854f8a849b01a5d0a1e6f3f3fdd0166804b"}, - {file = "pycodestyle-2.9.1.tar.gz", hash = "sha256:2c9607871d58c76354b697b42f5d57e1ada7d261c261efac224b664affdc5785"}, -] -pydocstyle = [ - {file = "pydocstyle-6.1.1-py3-none-any.whl", hash = "sha256:6987826d6775056839940041beef5c08cc7e3d71d63149b48e36727f70144dc4"}, - {file = "pydocstyle-6.1.1.tar.gz", hash = "sha256:1d41b7c459ba0ee6c345f2eb9ae827cab14a7533a88c5c6f7e94923f72df92dc"}, -] -pyflakes = [ - {file = "pyflakes-2.5.0-py2.py3-none-any.whl", hash = "sha256:4579f67d887f804e67edb544428f264b7b24f435b263c4614f384135cea553d2"}, - {file = "pyflakes-2.5.0.tar.gz", hash = "sha256:491feb020dca48ccc562a8c0cbe8df07ee13078df59813b83959cbdada312ea3"}, -] -pygments = [ - {file = "Pygments-2.13.0-py3-none-any.whl", hash = "sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42"}, - {file = "Pygments-2.13.0.tar.gz", hash = "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1"}, -] -pylint = [ - {file = "pylint-2.15.5-py3-none-any.whl", hash = "sha256:c2108037eb074334d9e874dc3c783752cc03d0796c88c9a9af282d0f161a1004"}, - {file = "pylint-2.15.5.tar.gz", hash = "sha256:3b120505e5af1d06a5ad76b55d8660d44bf0f2fc3c59c2bdd94e39188ee3a4df"}, -] -pyparsing = [ - {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, - {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, -] -pytest = [ - {file = "pytest-7.2.0-py3-none-any.whl", hash = "sha256:892f933d339f068883b6fd5a459f03d85bfcb355e4981e146d2c7616c21fef71"}, - {file = "pytest-7.2.0.tar.gz", hash = "sha256:c4014eb40e10f11f355ad4e3c2fb2c6c6d1919c73f3b5a433de4708202cade59"}, -] -pytest-asyncio = [ - {file = "pytest-asyncio-0.20.2.tar.gz", hash = "sha256:32a87a9836298a881c0ec637ebcc952cfe23a56436bdc0d09d1511941dd8a812"}, - {file = "pytest_asyncio-0.20.2-py3-none-any.whl", hash = "sha256:07e0abf9e6e6b95894a39f688a4a875d63c2128f76c02d03d16ccbc35bcc0f8a"}, -] -pytest-cov = [ - {file = "pytest-cov-4.0.0.tar.gz", hash = "sha256:996b79efde6433cdbd0088872dbc5fb3ed7fe1578b68cdbba634f14bb8dd0470"}, - {file = "pytest_cov-4.0.0-py3-none-any.whl", hash = "sha256:2feb1b751d66a8bd934e5edfa2e961d11309dc37b73b0eabe73b5945fee20f6b"}, -] -pytz = [ - {file = "pytz-2022.6-py2.py3-none-any.whl", hash = "sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427"}, - {file = "pytz-2022.6.tar.gz", hash = "sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2"}, -] -pyyaml = [ - {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, -] -requests = [ - {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, - {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, -] -snowballstemmer = [ - {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, - {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, -] -sphinx = [ - {file = "Sphinx-5.3.0.tar.gz", hash = "sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5"}, - {file = "sphinx-5.3.0-py3-none-any.whl", hash = "sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d"}, -] -sphinx-autoapi = [ - {file = "sphinx-autoapi-1.9.0.tar.gz", hash = "sha256:c897ea337df16ad0cde307cbdfe2bece207788dde1587fa4fc8b857d1fc5dcba"}, - {file = "sphinx_autoapi-1.9.0-py2.py3-none-any.whl", hash = "sha256:d217953273b359b699d8cb81a5a72985a3e6e15cfe3f703d9a3c201ffc30849b"}, -] -sphinxcontrib-applehelp = [ - {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, - {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"}, -] -sphinxcontrib-devhelp = [ - {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, - {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, -] -sphinxcontrib-htmlhelp = [ - {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, - {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, -] -sphinxcontrib-jsmath = [ - {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, - {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, -] -sphinxcontrib-qthelp = [ - {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, - {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, -] -sphinxcontrib-serializinghtml = [ - {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, - {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, -] -tomli = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] -tomlkit = [ - {file = "tomlkit-0.11.6-py3-none-any.whl", hash = "sha256:07de26b0d8cfc18f871aec595fda24d95b08fef89d147caa861939f37230bf4b"}, - {file = "tomlkit-0.11.6.tar.gz", hash = "sha256:71b952e5721688937fb02cf9d354dbcf0785066149d2855e44531ebdd2b65d73"}, -] -typing-extensions = [ - {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, - {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, -] -unidecode = [ - {file = "Unidecode-1.3.6-py3-none-any.whl", hash = "sha256:547d7c479e4f377b430dd91ac1275d593308dce0fc464fb2ab7d41f82ec653be"}, - {file = "Unidecode-1.3.6.tar.gz", hash = "sha256:fed09cf0be8cf415b391642c2a5addfc72194407caee4f98719e40ec2a72b830"}, -] -urllib3 = [ - {file = "urllib3-1.26.12-py2.py3-none-any.whl", hash = "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997"}, - {file = "urllib3-1.26.12.tar.gz", hash = "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e"}, -] -wrapt = [ - {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1"}, - {file = "wrapt-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320"}, - {file = "wrapt-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c"}, - {file = "wrapt-1.14.1-cp310-cp310-win32.whl", hash = "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8"}, - {file = "wrapt-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d"}, - {file = "wrapt-1.14.1-cp35-cp35m-win32.whl", hash = "sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7"}, - {file = "wrapt-1.14.1-cp35-cp35m-win_amd64.whl", hash = "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00"}, - {file = "wrapt-1.14.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569"}, - {file = "wrapt-1.14.1-cp36-cp36m-win32.whl", hash = "sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed"}, - {file = "wrapt-1.14.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471"}, - {file = "wrapt-1.14.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a"}, - {file = "wrapt-1.14.1-cp37-cp37m-win32.whl", hash = "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853"}, - {file = "wrapt-1.14.1-cp37-cp37m-win_amd64.whl", hash = "sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c"}, - {file = "wrapt-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456"}, - {file = "wrapt-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57"}, - {file = "wrapt-1.14.1-cp38-cp38-win32.whl", hash = "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5"}, - {file = "wrapt-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d"}, - {file = "wrapt-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383"}, - {file = "wrapt-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe"}, - {file = "wrapt-1.14.1-cp39-cp39-win32.whl", hash = "sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5"}, - {file = "wrapt-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb"}, - {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"}, -] -zipp = [ - {file = "zipp-3.10.0-py3-none-any.whl", hash = "sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1"}, - {file = "zipp-3.10.0.tar.gz", hash = "sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8"}, -] +content-hash = "5ac43f895be7f17e6d66de025d97df5ecf459c89f19392407ea72da4e5d9a8ca" From fb13763bad7ebb2b01725a77e215db7efbd4cab8 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Sun, 30 Jul 2023 22:44:30 +0200 Subject: [PATCH 25/68] ADD: stack notation Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- docs/source/standard.rst | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/source/standard.rst b/docs/source/standard.rst index 4f6e3ba..15be3bc 100644 --- a/docs/source/standard.rst +++ b/docs/source/standard.rst @@ -24,6 +24,16 @@ Furthermore, the location and datetime is stated. [[players.player_name_2]] team = 1 +Stack +----- +The data contains one field ``stack`` that is a list of cards. +One card can be represented with +``"[♦♣♥♠][2-10JQKA]"``. + +.. code-block:: toml + + [data] + stack = [♦2] .. _TOML: https://toml.io/en/ \ No newline at end of file From 21e609588ccf4a6eb9a59657badd612e9ec9e5d1 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Sun, 30 Jul 2023 22:46:54 +0200 Subject: [PATCH 26/68] ADD: make strings Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- docs/source/standard.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/standard.rst b/docs/source/standard.rst index 15be3bc..3ae0209 100644 --- a/docs/source/standard.rst +++ b/docs/source/standard.rst @@ -33,7 +33,7 @@ One card can be represented with .. code-block:: toml [data] - stack = [♦2] + stack = ["♦2","♦3","♦K"] .. _TOML: https://toml.io/en/ \ No newline at end of file From ab0489b0a4fa9f1ce833d22ffedaa5b0a3e59608 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Sun, 30 Jul 2023 22:47:17 +0200 Subject: [PATCH 27/68] ADD: make strings Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- docs/source/standard.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/standard.rst b/docs/source/standard.rst index 3ae0209..1742e81 100644 --- a/docs/source/standard.rst +++ b/docs/source/standard.rst @@ -26,7 +26,7 @@ Furthermore, the location and datetime is stated. Stack ----- -The data contains one field ``stack`` that is a list of cards. +The data contains one field ``stack`` that is a list of strings representing a card. One card can be represented with ``"[♦♣♥♠][2-10JQKA]"``. From cc80c86c4803d8bbd04c7ec1c83abcadaecfee6d Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Sun, 30 Jul 2023 22:54:39 +0200 Subject: [PATCH 28/68] ADD: players hand Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- docs/source/standard.rst | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/source/standard.rst b/docs/source/standard.rst index 1742e81..e92cef6 100644 --- a/docs/source/standard.rst +++ b/docs/source/standard.rst @@ -26,7 +26,8 @@ Furthermore, the location and datetime is stated. Stack ----- -The data contains one field ``stack`` that is a list of strings representing a card. +The data contains one mandatory field ``stack`` that is a list of strings representing a card. +Furthermore it has an optional field ``hands`` that is a table of the players' cards in hand. One card can be represented with ``"[♦♣♥♠][2-10JQKA]"``. @@ -34,6 +35,9 @@ One card can be represented with [data] stack = ["♦2","♦3","♦K"] + [hands] + [hands.player-1] + hand = ["♥4","♥6","♦A"] .. _TOML: https://toml.io/en/ \ No newline at end of file From 87351696c8d3e5198b4fd5099f7a76d55fec7b6d Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Sun, 30 Jul 2023 23:14:18 +0200 Subject: [PATCH 29/68] FIX: lock file Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- poetry.lock | 75 ++++++++++++++++++++--------------------------------- 1 file changed, 28 insertions(+), 47 deletions(-) diff --git a/poetry.lock b/poetry.lock index 362f705..f650e3c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -4,6 +4,7 @@ name = "astroid" version = "2.15.6" description = "An abstract syntax tree for Python with inference support." +category = "dev" optional = false python-versions = ">=3.7.2" files = [ @@ -19,54 +20,11 @@ wrapt = [ {version = ">=1.14,<2", markers = "python_version >= \"3.11\""}, ] -[[package]] -name = "attrs" -version = "22.1.0" -description = "Classes Without Boilerplate" -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.extras] -dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy (>=0.900,!=0.940)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "sphinx", "sphinx-notfound-page", "zope.interface"] -docs = ["furo", "sphinx", "sphinx-notfound-page", "zope.interface"] -tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "zope.interface"] -tests_no_zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"] - -[[package]] -name = "babel" -version = "2.11.0" -description = "Internationalization utilities" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -pytz = ">=2015.7" - -[[package]] -name = "certifi" -version = "2022.9.24" -description = "Python package for providing Mozilla's CA Bundle." -category = "dev" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "charset-normalizer" -version = "2.1.1" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "dev" -optional = false -python-versions = ">=3.6.0" - -[package.extras] -unicode_backport = ["unicodedata2"] - [[package]] name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." +category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -78,6 +36,7 @@ files = [ name = "coverage" version = "7.2.7" description = "Code coverage measurement for Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -153,6 +112,7 @@ toml = ["tomli"] name = "dill" version = "0.3.7" description = "serialize all of Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -167,6 +127,7 @@ graph = ["objgraph (>=1.7.2)"] name = "exceptiongroup" version = "1.1.2" description = "Backport of PEP 654 (exception groups)" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -181,6 +142,7 @@ test = ["pytest (>=6)"] name = "flake8" version = "5.0.4" description = "the modular source code checker: pep8 pyflakes and co" +category = "main" optional = false python-versions = ">=3.6.1" files = [ @@ -197,6 +159,7 @@ pyflakes = ">=2.5.0,<2.6.0" name = "flake8-docstrings" version = "1.7.0" description = "Extension for flake8 which uses pydocstyle to check docstrings" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -224,6 +187,7 @@ files = [ name = "isort" version = "5.12.0" description = "A Python utility / library to sort Python imports." +category = "dev" optional = false python-versions = ">=3.8.0" files = [ @@ -232,8 +196,8 @@ files = [ ] [package.extras] -colors = ["colorama (>=0.4.3,<0.5.0)"] -pipfile-deprecated-finder = ["pipreqs", "requirementslib"] +colors = ["colorama (>=0.4.3)"] +pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] plugins = ["setuptools"] requirements-deprecated-finder = ["pip-api", "pipreqs"] @@ -241,6 +205,7 @@ requirements-deprecated-finder = ["pip-api", "pipreqs"] name = "lazy-object-proxy" version = "1.9.0" description = "A fast and thorough lazy object proxy." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -286,6 +251,7 @@ files = [ name = "mccabe" version = "0.7.0" description = "McCabe checker, plugin for flake8" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -297,6 +263,7 @@ files = [ name = "packaging" version = "23.1" description = "Core utilities for Python packages" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -308,6 +275,7 @@ files = [ name = "platformdirs" version = "3.10.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -323,6 +291,7 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-co name = "pluggy" version = "1.2.0" description = "plugin and hook calling mechanisms for python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -338,6 +307,7 @@ testing = ["pytest", "pytest-benchmark"] name = "pycodestyle" version = "2.9.1" description = "Python style guide checker" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -349,6 +319,7 @@ files = [ name = "pydocstyle" version = "6.3.0" description = "Python docstring style checker" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -366,6 +337,7 @@ toml = ["tomli (>=1.2.3)"] name = "pyflakes" version = "2.5.0" description = "passive checker of Python programs" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -377,6 +349,7 @@ files = [ name = "pylint" version = "2.17.5" description = "python code static checker" +category = "dev" optional = false python-versions = ">=3.7.2" files = [ @@ -406,6 +379,7 @@ testutils = ["gitpython (>3)"] name = "pytest" version = "7.4.0" description = "pytest: simple powerful testing with Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -428,6 +402,7 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no name = "pytest-asyncio" version = "0.21.1" description = "Pytest support for asyncio" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -446,6 +421,7 @@ testing = ["coverage (>=6.2)", "flaky (>=3.5.0)", "hypothesis (>=5.7.1)", "mypy name = "pytest-cov" version = "4.1.0" description = "Pytest plugin for measuring coverage." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -464,6 +440,7 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale name = "snowballstemmer" version = "2.2.0" description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +category = "main" optional = false python-versions = "*" files = [ @@ -475,6 +452,7 @@ files = [ name = "tomli" version = "2.0.1" description = "A lil' TOML parser" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -486,6 +464,7 @@ files = [ name = "tomlkit" version = "0.12.1" description = "Style preserving TOML library" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -497,6 +476,7 @@ files = [ name = "typing-extensions" version = "4.7.1" description = "Backported and Experimental Type Hints for Python 3.7+" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -508,6 +488,7 @@ files = [ name = "wrapt" version = "1.15.0" description = "Module for decorators, wrappers and monkey patching." +category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ @@ -591,4 +572,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "5ac43f895be7f17e6d66de025d97df5ecf459c89f19392407ea72da4e5d9a8ca" +content-hash = "b5aa849847f706e20088b950383795272dae6e675203907a94b8a129049632e7" From 4f221fedeea89d42a82573fda582e89eaf4bf4ef Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Sun, 30 Jul 2023 23:35:28 +0200 Subject: [PATCH 30/68] ADD: card model Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- notation/card.py | 27 +++++++++++++++++++++++++++ poetry.lock | 14 +++++++++++++- pyproject.toml | 1 + 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 notation/card.py diff --git a/notation/card.py b/notation/card.py new file mode 100644 index 0000000..8726f7d --- /dev/null +++ b/notation/card.py @@ -0,0 +1,27 @@ +import tomli_w + + +class Card: + def __init__(self, suit: str, rank: str): + self._suit: str = suit + self._rank: str = rank + + def dumps(self) -> str: + return tomli_w.dumps({'suit': self._suit, 'rank': self._rank}) + + +class FrenchCard(Card): + def __init__(self, suit: str, rank: str): + super().__init__(self._valid_suit(suit), self._valid_rank(rank)) + + @staticmethod + def _valid_suit(suit: str) -> str: + if suit not in ('♦', '♣', '♥', '♠'): + raise ValueError('Not a correct french suit.') + return suit + + @staticmethod + def _valid_rank(rank: str) -> str: + if rank not in ('A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'): + raise ValueError('Not a correct french rank.') + return rank diff --git a/poetry.lock b/poetry.lock index f650e3c..c40402b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -460,6 +460,18 @@ files = [ {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] +[[package]] +name = "tomli-w" +version = "1.0.0" +description = "A lil' TOML writer" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli_w-1.0.0-py3-none-any.whl", hash = "sha256:9f2a07e8be30a0729e533ec968016807069991ae2fd921a78d42f429ae5f4463"}, + {file = "tomli_w-1.0.0.tar.gz", hash = "sha256:f463434305e0336248cac9c2dc8076b707d8a12d019dd349f5c1e382dd1ae1b9"}, +] + [[package]] name = "tomlkit" version = "0.12.1" @@ -572,4 +584,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "b5aa849847f706e20088b950383795272dae6e675203907a94b8a129049632e7" +content-hash = "82f5620204b5b1655041f19004be6422063aacd016cfb59bdb88be9b45949b80" diff --git a/pyproject.toml b/pyproject.toml index e4ae7ec..fd04b0b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,6 +20,7 @@ classifiers = [ [tool.poetry.dependencies] python = "^3.9" flake8-docstrings = "^1.7.0" +tomli-w = "^1.0.0" [tool.poetry.dev-dependencies] pytest = "^7.2" From 8dd38bf324c7e3f8f86f1defa12b3c4461490e8d Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Sun, 30 Jul 2023 23:38:56 +0200 Subject: [PATCH 31/68] UPDATE: documentation Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- docs/source/standard.rst | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/source/standard.rst b/docs/source/standard.rst index e92cef6..17e3ceb 100644 --- a/docs/source/standard.rst +++ b/docs/source/standard.rst @@ -29,15 +29,18 @@ Stack The data contains one mandatory field ``stack`` that is a list of strings representing a card. Furthermore it has an optional field ``hands`` that is a table of the players' cards in hand. One card can be represented with -``"[♦♣♥♠][2-10JQKA]"``. +.. code-block:: toml + + suit = "[♦♣♥♠]" + rank = "[2-10JQKA]" .. code-block:: toml [data] - stack = ["♦2","♦3","♦K"] + stack = [{suit = "♦", rank = "2"}, {suit= "♦" rank = "3"}] [hands] [hands.player-1] - hand = ["♥4","♥6","♦A"] + hand = [{suit = "♥", rank = "8"}, {suit= "♥" rank = "A"}] .. _TOML: https://toml.io/en/ \ No newline at end of file From 54e99ce10239b4ea6fbbb670a04432a9bbc9a582 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Sun, 30 Jul 2023 23:42:11 +0200 Subject: [PATCH 32/68] FIX: spacing Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- docs/source/standard.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/source/standard.rst b/docs/source/standard.rst index 17e3ceb..1eea8f6 100644 --- a/docs/source/standard.rst +++ b/docs/source/standard.rst @@ -29,6 +29,7 @@ Stack The data contains one mandatory field ``stack`` that is a list of strings representing a card. Furthermore it has an optional field ``hands`` that is a table of the players' cards in hand. One card can be represented with + .. code-block:: toml suit = "[♦♣♥♠]" From 58cb60c6641a53b77db5b590e7d8e607eb0dd271 Mon Sep 17 00:00:00 2001 From: Marcel <25705862+Segelzwerg@users.noreply.github.com> Date: Mon, 31 Jul 2023 08:48:05 +0200 Subject: [PATCH 33/68] Create test_card.py --- tests/test_card.py | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 tests/test_card.py diff --git a/tests/test_card.py b/tests/test_card.py new file mode 100644 index 0000000..4fe209e --- /dev/null +++ b/tests/test_card.py @@ -0,0 +1,5 @@ +from unittest import TestCase + + +class CardTestCase(TestCase): + pass From ba5fc0ec7c8c3faf9e17d3ccd2041fbd528ea09f Mon Sep 17 00:00:00 2001 From: Marcel <25705862+Segelzwerg@users.noreply.github.com> Date: Mon, 31 Jul 2023 16:46:27 +0000 Subject: [PATCH 34/68] ADD: general validation --- notation/card.py | 20 +++++++++- poetry.lock | 92 +++++++++++++++++++++++++++++++--------------- pyproject.toml | 3 ++ tests/test_card.py | 22 +++++++++-- 4 files changed, 103 insertions(+), 34 deletions(-) diff --git a/notation/card.py b/notation/card.py index 8726f7d..d27704b 100644 --- a/notation/card.py +++ b/notation/card.py @@ -3,8 +3,24 @@ class Card: def __init__(self, suit: str, rank: str): - self._suit: str = suit - self._rank: str = rank + self._suit: str = self._valid_suit(suit) + self._rank: str = self._valid_rank(rank) + + @staticmethod + def _valid_suit(suit: str)->str: + if not isinstance(suit, str): + raise ValueError('Suit must be string.') + if not suit: + raise ValueError('Suit cannot be empty.') + return suit + + @staticmethod + def _valid_rank(rank: str) -> str: + if not isinstance(rank, str): + raise ValueError('Rank must be string.') + if not rank: + raise ValueError('Rank must not be empty.') + return rank def dumps(self) -> str: return tomli_w.dumps({'suit': self._suit, 'rank': self._rank}) diff --git a/poetry.lock b/poetry.lock index c40402b..6c59bb2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,9 @@ -# This file is automatically @generated by Poetry and should not be changed by hand. +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. [[package]] name = "astroid" version = "2.15.6" description = "An abstract syntax tree for Python with inference support." -category = "dev" optional = false python-versions = ">=3.7.2" files = [ @@ -20,11 +19,28 @@ wrapt = [ {version = ">=1.14,<2", markers = "python_version >= \"3.11\""}, ] +[[package]] +name = "attrs" +version = "23.1.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.7" +files = [ + {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, + {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, +] + +[package.extras] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] + [[package]] name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -36,7 +52,6 @@ files = [ name = "coverage" version = "7.2.7" description = "Code coverage measurement for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -112,7 +127,6 @@ toml = ["tomli"] name = "dill" version = "0.3.7" description = "serialize all of Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -127,7 +141,6 @@ graph = ["objgraph (>=1.7.2)"] name = "exceptiongroup" version = "1.1.2" description = "Backport of PEP 654 (exception groups)" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -142,7 +155,6 @@ test = ["pytest (>=6)"] name = "flake8" version = "5.0.4" description = "the modular source code checker: pep8 pyflakes and co" -category = "main" optional = false python-versions = ">=3.6.1" files = [ @@ -159,7 +171,6 @@ pyflakes = ">=2.5.0,<2.6.0" name = "flake8-docstrings" version = "1.7.0" description = "Extension for flake8 which uses pydocstyle to check docstrings" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -171,11 +182,42 @@ files = [ flake8 = ">=3" pydocstyle = ">=2.1" +[[package]] +name = "hypothesis" +version = "6.82.0" +description = "A library for property-based testing" +optional = false +python-versions = ">=3.8" +files = [ + {file = "hypothesis-6.82.0-py3-none-any.whl", hash = "sha256:fa8eee429b99f7d3c953fb2b57de415fd39b472b09328b86c1978f12669ef395"}, + {file = "hypothesis-6.82.0.tar.gz", hash = "sha256:ffece8e40a34329e7112f7408f2c45fe587761978fdbc6f4f91bf0d683a7d4d9"}, +] + +[package.dependencies] +attrs = ">=19.2.0" +exceptiongroup = {version = ">=1.0.0", markers = "python_version < \"3.11\""} +sortedcontainers = ">=2.1.0,<3.0.0" + +[package.extras] +all = ["backports.zoneinfo (>=0.2.1)", "black (>=19.10b0)", "click (>=7.0)", "django (>=3.2)", "dpcontracts (>=0.4)", "lark (>=0.10.1)", "libcst (>=0.3.16)", "numpy (>=1.17.3)", "pandas (>=1.1)", "pytest (>=4.6)", "python-dateutil (>=1.4)", "pytz (>=2014.1)", "redis (>=3.0.0)", "rich (>=9.0.0)", "tzdata (>=2023.3)"] +cli = ["black (>=19.10b0)", "click (>=7.0)", "rich (>=9.0.0)"] +codemods = ["libcst (>=0.3.16)"] +dateutil = ["python-dateutil (>=1.4)"] +django = ["django (>=3.2)"] +dpcontracts = ["dpcontracts (>=0.4)"] +ghostwriter = ["black (>=19.10b0)"] +lark = ["lark (>=0.10.1)"] +numpy = ["numpy (>=1.17.3)"] +pandas = ["pandas (>=1.1)"] +pytest = ["pytest (>=4.6)"] +pytz = ["pytz (>=2014.1)"] +redis = ["redis (>=3.0.0)"] +zoneinfo = ["backports.zoneinfo (>=0.2.1)", "tzdata (>=2023.3)"] + [[package]] name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -187,7 +229,6 @@ files = [ name = "isort" version = "5.12.0" description = "A Python utility / library to sort Python imports." -category = "dev" optional = false python-versions = ">=3.8.0" files = [ @@ -205,7 +246,6 @@ requirements-deprecated-finder = ["pip-api", "pipreqs"] name = "lazy-object-proxy" version = "1.9.0" description = "A fast and thorough lazy object proxy." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -251,7 +291,6 @@ files = [ name = "mccabe" version = "0.7.0" description = "McCabe checker, plugin for flake8" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -263,7 +302,6 @@ files = [ name = "packaging" version = "23.1" description = "Core utilities for Python packages" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -275,7 +313,6 @@ files = [ name = "platformdirs" version = "3.10.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -291,7 +328,6 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-co name = "pluggy" version = "1.2.0" description = "plugin and hook calling mechanisms for python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -307,7 +343,6 @@ testing = ["pytest", "pytest-benchmark"] name = "pycodestyle" version = "2.9.1" description = "Python style guide checker" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -319,7 +354,6 @@ files = [ name = "pydocstyle" version = "6.3.0" description = "Python docstring style checker" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -337,7 +371,6 @@ toml = ["tomli (>=1.2.3)"] name = "pyflakes" version = "2.5.0" description = "passive checker of Python programs" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -349,7 +382,6 @@ files = [ name = "pylint" version = "2.17.5" description = "python code static checker" -category = "dev" optional = false python-versions = ">=3.7.2" files = [ @@ -379,7 +411,6 @@ testutils = ["gitpython (>3)"] name = "pytest" version = "7.4.0" description = "pytest: simple powerful testing with Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -402,7 +433,6 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no name = "pytest-asyncio" version = "0.21.1" description = "Pytest support for asyncio" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -421,7 +451,6 @@ testing = ["coverage (>=6.2)", "flaky (>=3.5.0)", "hypothesis (>=5.7.1)", "mypy name = "pytest-cov" version = "4.1.0" description = "Pytest plugin for measuring coverage." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -440,7 +469,6 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale name = "snowballstemmer" version = "2.2.0" description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -category = "main" optional = false python-versions = "*" files = [ @@ -448,11 +476,21 @@ files = [ {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, ] +[[package]] +name = "sortedcontainers" +version = "2.4.0" +description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" +optional = false +python-versions = "*" +files = [ + {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, + {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, +] + [[package]] name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -464,7 +502,6 @@ files = [ name = "tomli-w" version = "1.0.0" description = "A lil' TOML writer" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -476,7 +513,6 @@ files = [ name = "tomlkit" version = "0.12.1" description = "Style preserving TOML library" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -488,7 +524,6 @@ files = [ name = "typing-extensions" version = "4.7.1" description = "Backported and Experimental Type Hints for Python 3.7+" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -500,7 +535,6 @@ files = [ name = "wrapt" version = "1.15.0" description = "Module for decorators, wrappers and monkey patching." -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ @@ -584,4 +618,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "82f5620204b5b1655041f19004be6422063aacd016cfb59bdb88be9b45949b80" +content-hash = "565fa0490c26de1af87cdcb41af0741ceb6f9d53915320d14f8c20e56725b1ee" diff --git a/pyproject.toml b/pyproject.toml index fd04b0b..66b39eb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,6 +31,9 @@ flake8-docstrings = "^1.6" pylint = "^2.15" +[tool.poetry.group.dev.dependencies] +hypothesis = "^6.82.0" + [build-system] requires = ["poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api" diff --git a/tests/test_card.py b/tests/test_card.py index 4fe209e..ba2b43d 100644 --- a/tests/test_card.py +++ b/tests/test_card.py @@ -1,5 +1,21 @@ -from unittest import TestCase +import pytest +from hypothesis import given, example +from hypothesis.strategies import text +from notation.card import Card -class CardTestCase(TestCase): - pass + +@given(text(min_size=1), text(min_size=1)) +def test_dumps(suit, rank): + card = Card(suit, rank) + assert isinstance(card, Card) + +@given(text()) +def test_dumps_empty_suit(rank): + with pytest.raises(ValueError): + _ = Card('', rank) + +@given(text()) +def test_dumps_empty_rank(suit): + with pytest.raises(ValueError): + _ = Card(suit, '') \ No newline at end of file From 998b893ac3e69a2ef8ec438687a5bf212f2f1ba8 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Mon, 31 Jul 2023 21:33:41 +0200 Subject: [PATCH 35/68] FORMAT Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- notation/card.py | 4 ++-- tests/test_card.py | 14 ++++++++------ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/notation/card.py b/notation/card.py index d27704b..c43442d 100644 --- a/notation/card.py +++ b/notation/card.py @@ -5,9 +5,9 @@ class Card: def __init__(self, suit: str, rank: str): self._suit: str = self._valid_suit(suit) self._rank: str = self._valid_rank(rank) - + @staticmethod - def _valid_suit(suit: str)->str: + def _valid_suit(suit: str) -> str: if not isinstance(suit, str): raise ValueError('Suit must be string.') if not suit: diff --git a/tests/test_card.py b/tests/test_card.py index ba2b43d..6f7892d 100644 --- a/tests/test_card.py +++ b/tests/test_card.py @@ -7,15 +7,17 @@ @given(text(min_size=1), text(min_size=1)) def test_dumps(suit, rank): - card = Card(suit, rank) - assert isinstance(card, Card) + card = Card(suit, rank) + assert isinstance(card, Card) + @given(text()) def test_dumps_empty_suit(rank): - with pytest.raises(ValueError): - _ = Card('', rank) + with pytest.raises(ValueError): + _ = Card('', rank) + @given(text()) def test_dumps_empty_rank(suit): - with pytest.raises(ValueError): - _ = Card(suit, '') \ No newline at end of file + with pytest.raises(ValueError): + _ = Card(suit, '') From e1ac6ab10cf9bd32529fd904363a399ae9f0b758 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Mon, 31 Jul 2023 21:35:45 +0200 Subject: [PATCH 36/68] REFACTOR: rename test Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- tests/test_card.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/test_card.py b/tests/test_card.py index 6f7892d..73e0e12 100644 --- a/tests/test_card.py +++ b/tests/test_card.py @@ -6,18 +6,19 @@ @given(text(min_size=1), text(min_size=1)) -def test_dumps(suit, rank): +def test_init(suit, rank): card = Card(suit, rank) assert isinstance(card, Card) @given(text()) -def test_dumps_empty_suit(rank): +def test_init_empty_suit(rank): with pytest.raises(ValueError): _ = Card('', rank) @given(text()) -def test_dumps_empty_rank(suit): +def test_init_empty_rank(suit): with pytest.raises(ValueError): _ = Card(suit, '') + From f62036f60751c4b5d64862904557b64a47cdff5d Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Mon, 31 Jul 2023 21:36:03 +0200 Subject: [PATCH 37/68] REMOVE: init Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- notation/card.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/notation/card.py b/notation/card.py index c43442d..2594fe0 100644 --- a/notation/card.py +++ b/notation/card.py @@ -27,9 +27,6 @@ def dumps(self) -> str: class FrenchCard(Card): - def __init__(self, suit: str, rank: str): - super().__init__(self._valid_suit(suit), self._valid_rank(rank)) - @staticmethod def _valid_suit(suit: str) -> str: if suit not in ('♦', '♣', '♥', '♠'): From a6be8865cd454329609880e31b06158f5dc97a72 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Mon, 31 Jul 2023 23:08:14 +0200 Subject: [PATCH 38/68] ADD: more tests Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- tests/test_card.py | 45 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 42 insertions(+), 3 deletions(-) diff --git a/tests/test_card.py b/tests/test_card.py index 73e0e12..47025c1 100644 --- a/tests/test_card.py +++ b/tests/test_card.py @@ -1,8 +1,9 @@ import pytest -from hypothesis import given, example -from hypothesis.strategies import text +import tomlkit +from hypothesis import given, assume +from hypothesis.strategies import text, characters -from notation.card import Card +from notation.card import Card, FrenchCard @given(text(min_size=1), text(min_size=1)) @@ -22,3 +23,41 @@ def test_init_empty_rank(suit): with pytest.raises(ValueError): _ = Card(suit, '') + +@given(text(min_size=1, alphabet=characters(whitelist_categories=('L', 'N', 'S'), + blacklist_characters=('"', "'"))), + text(min_size=1, alphabet=characters(whitelist_categories=('L', 'N', 'S'), + blacklist_characters=('"', "'")))) +def test_dumps(suit, rank): + card = Card(suit, rank) + toml_card = card.dumps() + expected_toml = f'''\ +suit = "{suit}" +rank = "{rank}" +''' + assume(tomlkit.loads(expected_toml)) + assert toml_card == expected_toml + + +@given(text(min_size=1, alphabet=characters(whitelist_categories=('L', 'N', 'S'), + blacklist_characters=('"', "'", '♦', '♣', '♥', '♠'))), + text(min_size=1, alphabet=characters(whitelist_categories=('L', 'N', 'S'), + blacklist_characters=( + '"', "'", 'A', '2', '3', '4', '5', '6', '7', + '8', '9', 'J', 'Q', 'K')))) +def test_init_french_invalid(suit, rank): + with pytest.raises(ValueError): + _ = FrenchCard(suit, rank) + + +@pytest.mark.parametrize("suit", ['♦', '♣', '♥', '♠']) +@pytest.mark.parametrize("rank", ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']) +def test_french_dumps(suit, rank): + card = FrenchCard(suit, rank) + toml_card = card.dumps() + expected_toml = f'''\ +suit = "{suit}" +rank = "{rank}" +''' + assume(tomlkit.loads(expected_toml)) + assert toml_card == expected_toml From daa08f3f3ecbd4f6fda760093e998536886aed74 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Mon, 31 Jul 2023 23:10:40 +0200 Subject: [PATCH 39/68] FIX: tests Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- tests/test_card.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/tests/test_card.py b/tests/test_card.py index 47025c1..d4bb88c 100644 --- a/tests/test_card.py +++ b/tests/test_card.py @@ -40,14 +40,19 @@ def test_dumps(suit, rank): @given(text(min_size=1, alphabet=characters(whitelist_categories=('L', 'N', 'S'), - blacklist_characters=('"', "'", '♦', '♣', '♥', '♠'))), - text(min_size=1, alphabet=characters(whitelist_categories=('L', 'N', 'S'), + blacklist_characters=('"', "'", '♦', '♣', '♥', '♠')))) +def test_init_french_invalid_suit(suit): + with pytest.raises(ValueError): + _ = FrenchCard(suit, 'A') + + +@given(text(min_size=1, alphabet=characters(whitelist_categories=('L', 'N', 'S'), blacklist_characters=( - '"', "'", 'A', '2', '3', '4', '5', '6', '7', - '8', '9', 'J', 'Q', 'K')))) -def test_init_french_invalid(suit, rank): + '"', "'", 'A', '2', '3', '4', '5', '6', '7', + '8', '9', 'J', 'Q', 'K')))) +def test_init_french_invalid_suit(rank): with pytest.raises(ValueError): - _ = FrenchCard(suit, rank) + _ = FrenchCard('♦', rank) @pytest.mark.parametrize("suit", ['♦', '♣', '♥', '♠']) From afdd28692f87c9d1d3317ce10ee8a050189e8196 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Mon, 31 Jul 2023 23:13:34 +0200 Subject: [PATCH 40/68] FIX: test name Signed-off-by: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> --- tests/test_card.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_card.py b/tests/test_card.py index d4bb88c..5f01fe2 100644 --- a/tests/test_card.py +++ b/tests/test_card.py @@ -50,7 +50,7 @@ def test_init_french_invalid_suit(suit): blacklist_characters=( '"', "'", 'A', '2', '3', '4', '5', '6', '7', '8', '9', 'J', 'Q', 'K')))) -def test_init_french_invalid_suit(rank): +def test_init_french_invalid_rank(rank): with pytest.raises(ValueError): _ = FrenchCard('♦', rank) From 97be35136ef7d5ad5fe5cdf0ce861d9f51c3e2c3 Mon Sep 17 00:00:00 2001 From: Marcel <25705862+Segelzwerg@users.noreply.github.com> Date: Sun, 6 Oct 2024 14:08:41 +0200 Subject: [PATCH 41/68] WIP: stack --- notation/stack.py | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 notation/stack.py diff --git a/notation/stack.py b/notation/stack.py new file mode 100644 index 0000000..f867019 --- /dev/null +++ b/notation/stack.py @@ -0,0 +1,5 @@ +from typing import List +from notation import Catd + +class Stack: + card_list: List(Card) \ No newline at end of file From 310aabbffc2e6d653e395f0f9c57c8cd73a3a063 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 29 Oct 2024 21:32:33 +0100 Subject: [PATCH 42/68] ADD: stack implementation --- notation/stack.py | 13 +++++++++++-- tests/composites.py | 15 +++++++++++++++ tests/test_stack.py | 19 +++++++++++++++++++ 3 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 tests/composites.py create mode 100644 tests/test_stack.py diff --git a/notation/stack.py b/notation/stack.py index f867019..53cfeda 100644 --- a/notation/stack.py +++ b/notation/stack.py @@ -1,5 +1,14 @@ from typing import List -from notation import Catd + +import tomlkit + +from notation.card import Card + class Stack: - card_list: List(Card) \ No newline at end of file + def __init__(self, cards: List[Card]): + self._card_list: List[Card] = cards + + def dumps(self) -> str: + card_dump = {'cards': [{'suit': card.suit, 'rank': card.rank} for card in self._card_list]} + return tomlkit.dumps({'stack': card_dump}) diff --git a/tests/composites.py b/tests/composites.py new file mode 100644 index 0000000..903d3cc --- /dev/null +++ b/tests/composites.py @@ -0,0 +1,15 @@ +from hypothesis import assume +from hypothesis.strategies import composite, text, characters + +from notation.card import Card + + +@composite +def build_card(draw): + suit: str = draw(text(min_size=1, max_size=1, + alphabet=characters(whitelist_categories=('L', 'N', 'S'), + blacklist_characters=('"', "'")))) + rank: str = draw(text(min_size=1, max_size=1, + alphabet=characters(whitelist_categories=('L', 'N', 'S'), + blacklist_characters=('"', "'")))) + return Card(suit=suit, rank=rank) diff --git a/tests/test_stack.py b/tests/test_stack.py new file mode 100644 index 0000000..769f138 --- /dev/null +++ b/tests/test_stack.py @@ -0,0 +1,19 @@ +import tomlkit +from hypothesis import given, assume, example +from hypothesis.strategies import lists + +from notation.card import Card +from notation.stack import Stack +from tests.composites import build_card + + +@given(lists(build_card())) +@example([Card(suit="Heart", rank="King")]) +@example([Card(suit="Heart", rank="King"), Card(suit='♦', rank="K")]) +def test_dumps(cards): + stack = Stack(cards=cards) + toml_stack: str = stack.dumps() + stack = (f'[[stack.cards]]\nsuit = "{card.suit}"\nrank = "{card.rank}"\n' for card in cards) + expected_toml = "\n".join(stack) + assume(tomlkit.loads(expected_toml)) + assert toml_stack == expected_toml From b9ee2c845fa385e9f13ef994cb51488367a33786 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 29 Oct 2024 21:32:58 +0100 Subject: [PATCH 43/68] ADD: tomlkit --- poetry.lock | 46 +++++++++++++++++++++++----------------------- pyproject.toml | 5 ++--- 2 files changed, 25 insertions(+), 26 deletions(-) diff --git a/poetry.lock b/poetry.lock index 65ef95a..fcfeeb0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2,13 +2,13 @@ [[package]] name = "astroid" -version = "3.3.4" +version = "3.3.5" description = "An abstract syntax tree for Python with inference support." optional = false python-versions = ">=3.9.0" files = [ - {file = "astroid-3.3.4-py3-none-any.whl", hash = "sha256:5eba185467253501b62a9f113c263524b4f5d55e1b30456370eed4cdbd6438fd"}, - {file = "astroid-3.3.4.tar.gz", hash = "sha256:e73d0b62dd680a7c07cb2cd0ce3c22570b044dd01bd994bc3a2dd16c6cbba162"}, + {file = "astroid-3.3.5-py3-none-any.whl", hash = "sha256:a9d1c946ada25098d790e079ba2a1b112157278f3fb7e718ae6a9252f5835dc8"}, + {file = "astroid-3.3.5.tar.gz", hash = "sha256:5cfc40ae9f68311075d27ef68a4841bdc5cc7f6cf86671b49f00607d30188e2d"}, ] [package.dependencies] @@ -46,13 +46,13 @@ files = [ [[package]] name = "dill" -version = "0.3.8" +version = "0.3.9" description = "serialize all of Python" optional = false python-versions = ">=3.8" files = [ - {file = "dill-0.3.8-py3-none-any.whl", hash = "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7"}, - {file = "dill-0.3.8.tar.gz", hash = "sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca"}, + {file = "dill-0.3.9-py3-none-any.whl", hash = "sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a"}, + {file = "dill-0.3.9.tar.gz", hash = "sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c"}, ] [package.extras] @@ -186,19 +186,19 @@ files = [ [[package]] name = "platformdirs" -version = "4.2.2" +version = "4.3.6" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" files = [ - {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, - {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, + {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, + {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, ] [package.extras] -docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] -type = ["mypy (>=1.8)"] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.11.2)"] [[package]] name = "pluggy" @@ -217,13 +217,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "pycodestyle" -version = "2.12.0" +version = "2.12.1" description = "Python style guide checker" optional = false python-versions = ">=3.8" files = [ - {file = "pycodestyle-2.12.0-py2.py3-none-any.whl", hash = "sha256:949a39f6b86c3e1515ba1787c2022131d165a8ad271b11370a8819aa070269e4"}, - {file = "pycodestyle-2.12.0.tar.gz", hash = "sha256:442f950141b4f43df752dd303511ffded3a04c2b6fb7f65980574f0c31e6e79c"}, + {file = "pycodestyle-2.12.1-py2.py3-none-any.whl", hash = "sha256:46f0fb92069a7c28ab7bb558f05bfc0110dac69a0cd23c61ea0040283a9d78b3"}, + {file = "pycodestyle-2.12.1.tar.gz", hash = "sha256:6838eae08bbce4f6accd5d5572075c63626a15ee3e6f842df996bf62f6d73521"}, ] [[package]] @@ -347,13 +347,13 @@ files = [ [[package]] name = "tomli" -version = "2.0.1" +version = "2.0.2" description = "A lil' TOML parser" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, + {file = "tomli-2.0.2-py3-none-any.whl", hash = "sha256:2ebe24485c53d303f690b0ec092806a085f07af5a5aa1464f3931eec36caaa38"}, + {file = "tomli-2.0.2.tar.gz", hash = "sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed"}, ] [[package]] @@ -369,13 +369,13 @@ files = [ [[package]] name = "tomlkit" -version = "0.13.0" +version = "0.13.2" description = "Style preserving TOML library" optional = false python-versions = ">=3.8" files = [ - {file = "tomlkit-0.13.0-py3-none-any.whl", hash = "sha256:7075d3042d03b80f603482d69bf0c8f345c2b30e41699fd8883227f89972b264"}, - {file = "tomlkit-0.13.0.tar.gz", hash = "sha256:08ad192699734149f5b97b45f1f18dad7eb1b6d16bc72ad0c2335772650d7b72"}, + {file = "tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde"}, + {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, ] [[package]] @@ -392,4 +392,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "8c21b1be362eca707e5e29bb18c9829faeba947ff22a05dfdc2bbbec83d39542" +content-hash = "76b34ae925e6f9d9a345263f4f84c7a6b4e3fbd8223bc7e0cd45344afbf3d0b5" diff --git a/pyproject.toml b/pyproject.toml index 5cae6d7..8d69cda 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,15 +20,14 @@ classifiers = [ [tool.poetry.dependencies] python = "^3.10" tomli-w = "^1.0.0" +tomlkit = "^0.13.2" -[tool.poetry.dev-dependencies] +[tool.poetry.group.dev.dependencies] pytest = "^8.3" pytest-asyncio = "^0.24.0" # .5 because that version is the first to have compat with pytest 8 flake8 = "^7.1" flake8-docstrings = "^1.7" pylint = "^3.3" - -[tool.poetry.group.dev.dependencies] hypothesis = "^6.82.0" [build-system] From 42e3aff70666abbc6eaf8898c3a38961dd7aac98 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 29 Oct 2024 21:34:06 +0100 Subject: [PATCH 44/68] ADD: card properties --- notation/card.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/notation/card.py b/notation/card.py index 2594fe0..1ed14fa 100644 --- a/notation/card.py +++ b/notation/card.py @@ -22,6 +22,14 @@ def _valid_rank(rank: str) -> str: raise ValueError('Rank must not be empty.') return rank + @property + def suit(self) -> str: + return self._suit + + @property + def rank(self) -> str: + return self._rank + def dumps(self) -> str: return tomli_w.dumps({'suit': self._suit, 'rank': self._rank}) From fefe97bc2e77b1cf5791647ac98a38da3a3a1b25 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 29 Oct 2024 21:34:24 +0100 Subject: [PATCH 45/68] FIX: array of tables --- docs/source/standard.rst | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/docs/source/standard.rst b/docs/source/standard.rst index 1eea8f6..b67de1d 100644 --- a/docs/source/standard.rst +++ b/docs/source/standard.rst @@ -17,7 +17,6 @@ Furthermore, the location and datetime is stated. location = "Hamburg" # Unsigned Integer number_of_teams = 2 - [[players]] [[players.player_name_1]] # Unsigned Integer: ID of team starting with 0 team = 0 @@ -37,11 +36,18 @@ One card can be represented with .. code-block:: toml - [data] - stack = [{suit = "♦", rank = "2"}, {suit= "♦" rank = "3"}] - [hands] - [hands.player-1] - hand = [{suit = "♥", rank = "8"}, {suit= "♥" rank = "A"}] + + [[stack.card]] + suit="heart" + rank="A" + [[data.stack.card]] + suit="heart" + rank="K" + + [[hands.player_1]] + [[hands.player_1.card]] + suit="heart" + rank="2" .. _TOML: https://toml.io/en/ \ No newline at end of file From d10aa96c7cc88dcf4893570a58dcdc713ec7585f Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 29 Oct 2024 21:37:18 +0100 Subject: [PATCH 46/68] REMOVE: tomli_w --- notation/card.py | 4 ++-- poetry.lock | 13 +------------ pyproject.toml | 1 - 3 files changed, 3 insertions(+), 15 deletions(-) diff --git a/notation/card.py b/notation/card.py index 1ed14fa..f234ecc 100644 --- a/notation/card.py +++ b/notation/card.py @@ -1,4 +1,4 @@ -import tomli_w +import tomlkit class Card: @@ -31,7 +31,7 @@ def rank(self) -> str: return self._rank def dumps(self) -> str: - return tomli_w.dumps({'suit': self._suit, 'rank': self._rank}) + return tomlkit.dumps({'suit': self._suit, 'rank': self._rank}) class FrenchCard(Card): diff --git a/poetry.lock b/poetry.lock index fcfeeb0..10a56b6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -356,17 +356,6 @@ files = [ {file = "tomli-2.0.2.tar.gz", hash = "sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed"}, ] -[[package]] -name = "tomli-w" -version = "1.1.0" -description = "A lil' TOML writer" -optional = false -python-versions = ">=3.9" -files = [ - {file = "tomli_w-1.1.0-py3-none-any.whl", hash = "sha256:1403179c78193e3184bfaade390ddbd071cba48a32a2e62ba11aae47490c63f7"}, - {file = "tomli_w-1.1.0.tar.gz", hash = "sha256:49e847a3a304d516a169a601184932ef0f6b61623fe680f836a2aa7128ed0d33"}, -] - [[package]] name = "tomlkit" version = "0.13.2" @@ -392,4 +381,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "76b34ae925e6f9d9a345263f4f84c7a6b4e3fbd8223bc7e0cd45344afbf3d0b5" +content-hash = "d9a4430acfbaac049f543a569480ee415c9059d058d120502612410041d0b3ef" diff --git a/pyproject.toml b/pyproject.toml index 8d69cda..b784153 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,7 +19,6 @@ classifiers = [ [tool.poetry.dependencies] python = "^3.10" -tomli-w = "^1.0.0" tomlkit = "^0.13.2" [tool.poetry.group.dev.dependencies] From 6caa05274652e002d3c3f73544195f37b75c0923 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 29 Oct 2024 21:43:04 +0100 Subject: [PATCH 47/68] UPDATE: documentation --- notation/card.py | 8 ++++++++ notation/stack.py | 5 ++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/notation/card.py b/notation/card.py index f234ecc..acea265 100644 --- a/notation/card.py +++ b/notation/card.py @@ -1,7 +1,11 @@ +"""Python implementation of a general card and specific versions.""" import tomlkit class Card: + """ + General representation of a card. + """ def __init__(self, suit: str, rank: str): self._suit: str = self._valid_suit(suit) self._rank: str = self._valid_rank(rank) @@ -24,17 +28,21 @@ def _valid_rank(rank: str) -> str: @property def suit(self) -> str: + """Returns the suit of a card as string.""" return self._suit @property def rank(self) -> str: + """Returns the rank of a card as string.""" return self._rank def dumps(self) -> str: + """Returns the card as TOML string.""" return tomlkit.dumps({'suit': self._suit, 'rank': self._rank}) class FrenchCard(Card): + """Represents a French card.""" @staticmethod def _valid_suit(suit: str) -> str: if suit not in ('♦', '♣', '♥', '♠'): diff --git a/notation/stack.py b/notation/stack.py index 53cfeda..282267e 100644 --- a/notation/stack.py +++ b/notation/stack.py @@ -1,14 +1,17 @@ +"""Implementation of a stack of cards.""" from typing import List import tomlkit from notation.card import Card - +# pylint: disable=too-few-public-methods class Stack: + """A list of cards.""" def __init__(self, cards: List[Card]): self._card_list: List[Card] = cards def dumps(self) -> str: + """Returns the stack as TOML string.""" card_dump = {'cards': [{'suit': card.suit, 'rank': card.rank} for card in self._card_list]} return tomlkit.dumps({'stack': card_dump}) From 6b65dd22357540f8bda2034edadfe60a9b7f7e5a Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 29 Oct 2024 21:52:46 +0100 Subject: [PATCH 48/68] ADD: team flake config --- .flake8 | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 .flake8 diff --git a/.flake8 b/.flake8 new file mode 100644 index 0000000..0fcfff8 --- /dev/null +++ b/.flake8 @@ -0,0 +1,15 @@ +[flake8] +exclude = + .git + .github + .venv + __pycache__ + .eggs + *.egg + *.egg-info + build + dist + venv +ignore = D200, D204, D205, D400, D401 +max-line-length = 100 +max-complexity = 10 \ No newline at end of file From 342cc33d2566e2701a70a90b7f09bac71ae7606f Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Tue, 29 Oct 2024 21:53:07 +0100 Subject: [PATCH 49/68] REFACTOR: constants --- notation/card.py | 24 +++++++++++++++++------- notation/stack.py | 9 ++++++++- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/notation/card.py b/notation/card.py index acea265..ee21885 100644 --- a/notation/card.py +++ b/notation/card.py @@ -1,12 +1,21 @@ """Python implementation of a general card and specific versions.""" import tomlkit +FRENCH_SUITS = ('♦', '♣', '♥', '♠') + +FRENCH_RANKS = ('A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K') + class Card: - """ - General representation of a card. - """ - def __init__(self, suit: str, rank: str): + """General representation of a card.""" + + def __init__(self, suit: str, rank: str) -> None: + """ + Construct a card. + + :param suit: The suit of the card. + :param rank: The rank of the card. + """ self._suit: str = self._valid_suit(suit) self._rank: str = self._valid_rank(rank) @@ -37,20 +46,21 @@ def rank(self) -> str: return self._rank def dumps(self) -> str: - """Returns the card as TOML string.""" + """Return the card as TOML string.""" return tomlkit.dumps({'suit': self._suit, 'rank': self._rank}) class FrenchCard(Card): """Represents a French card.""" + @staticmethod def _valid_suit(suit: str) -> str: - if suit not in ('♦', '♣', '♥', '♠'): + if suit not in FRENCH_SUITS: raise ValueError('Not a correct french suit.') return suit @staticmethod def _valid_rank(rank: str) -> str: - if rank not in ('A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'): + if rank not in FRENCH_RANKS: raise ValueError('Not a correct french rank.') return rank diff --git a/notation/stack.py b/notation/stack.py index 282267e..9e47df9 100644 --- a/notation/stack.py +++ b/notation/stack.py @@ -5,13 +5,20 @@ from notation.card import Card + # pylint: disable=too-few-public-methods class Stack: """A list of cards.""" + def __init__(self, cards: List[Card]): + """ + Construct a stack of cards. + + :param cards: A list of cards. + """ self._card_list: List[Card] = cards def dumps(self) -> str: - """Returns the stack as TOML string.""" + """Return the stack as TOML string.""" card_dump = {'cards': [{'suit': card.suit, 'rank': card.rank} for card in self._card_list]} return tomlkit.dumps({'stack': card_dump}) From e785d7e41655f3f59f0bc7fe0beed9b16e1ec068 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Fri, 1 Nov 2024 11:14:03 +0100 Subject: [PATCH 50/68] UPDATE: use seat instead of names --- docs/source/standard.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/source/standard.rst b/docs/source/standard.rst index b67de1d..dc16a1c 100644 --- a/docs/source/standard.rst +++ b/docs/source/standard.rst @@ -17,11 +17,13 @@ Furthermore, the location and datetime is stated. location = "Hamburg" # Unsigned Integer number_of_teams = 2 - [[players.player_name_1]] + [[players.seat_1]] # Unsigned Integer: ID of team starting with 0 team = 0 - [[players.player_name_2]] + name = "John" + [[players.seat_2]] team = 1 + Name = "Lucy" Stack ----- From 1bbc37eddf2e120e372a0746204eb0c8abb7d99a Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Fri, 1 Nov 2024 20:08:26 +0100 Subject: [PATCH 51/68] ADD: builder player --- tests/composites.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/tests/composites.py b/tests/composites.py index 903d3cc..2235c24 100644 --- a/tests/composites.py +++ b/tests/composites.py @@ -1,7 +1,7 @@ -from hypothesis import assume -from hypothesis.strategies import composite, text, characters +from hypothesis.strategies import composite, text, characters, integers from notation.card import Card +from notation.player import Player @composite @@ -13,3 +13,10 @@ def build_card(draw): alphabet=characters(whitelist_categories=('L', 'N', 'S'), blacklist_characters=('"', "'")))) return Card(suit=suit, rank=rank) + + +@composite +def build_player(draw): + name = draw(text(alphabet=characters())) + team = draw(integers()) + return Player(name, team) From 037aa1cafece97b445a9a0910083dac354a0ec2d Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Fri, 1 Nov 2024 20:08:41 +0100 Subject: [PATCH 52/68] ADD: player class --- notation/player.py | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 notation/player.py diff --git a/notation/player.py b/notation/player.py new file mode 100644 index 0000000..bbc1a6a --- /dev/null +++ b/notation/player.py @@ -0,0 +1,4 @@ +class Player: + def __init__(self, name: str, team: int): + self._name = name + self._team = team From 6f4e1417f1aa23609dd0be195416656017b00ccd Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Fri, 1 Nov 2024 20:08:50 +0100 Subject: [PATCH 53/68] ADD: header --- notation/header.py | 24 ++++++++++++++++++++++++ tests/test_header.py | 24 ++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 notation/header.py create mode 100644 tests/test_header.py diff --git a/notation/header.py b/notation/header.py new file mode 100644 index 0000000..4a3ec50 --- /dev/null +++ b/notation/header.py @@ -0,0 +1,24 @@ +from datetime import datetime +from typing import List, Optional + +import tomlkit + +from notation.player import Player + + +class Header: + def __init__(self, start_time: datetime, players: List[Player], + number_teams: int, location: Optional[str] = None, ): + self._start_time: datetime = start_time + self._location = location + self._players = players + self._number_teams = number_teams + + def dumps(self) -> str: + players = {f'seat_{index}': + [{'name': player._name, + 'team': player._team}] for index, player in enumerate(self._players)} + header_dump = {'header': {'timestamp': self._start_time.isoformat(), + 'number_of_teams': self._number_teams}, + 'players': players} + return tomlkit.dumps(header_dump) diff --git a/tests/test_header.py b/tests/test_header.py new file mode 100644 index 0000000..f785045 --- /dev/null +++ b/tests/test_header.py @@ -0,0 +1,24 @@ +from datetime import datetime + +import tomlkit +from hypothesis import assume, example, given +from hypothesis.strategies import datetimes, lists, integers + +from notation.header import Header +from notation.player import Player +from tests.composites import build_player + + +@given(datetimes(), lists(build_player(), max_size=6), integers()) +@example(datetime.now(), [Player(name='John', team=1)], 1) +def test_dumps(start_time: datetime, players, number_teams): + header = Header(start_time=start_time, players=players, number_teams=number_teams) + header_dump = header.dumps() + player_string = ((f'[[players.seat_{index}]]\n' + f'name = "{player._name}"\n' + f'team = {player._team}') for index, player in enumerate(players)) + expected_toml = (f'[header]\ntimestamp = "{start_time.isoformat()}"\nnumber_of_teams = ' + f'{number_teams}\n\n') + expected_toml += "\n".join(player_string) + '\n' + assume(tomlkit.loads(expected_toml)) + assert header_dump == expected_toml From a92d4a5ced58fc07dd1abcd8b1f786fb4d0581f7 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Fri, 1 Nov 2024 20:46:34 +0100 Subject: [PATCH 54/68] UPDATE: check for pausible team setups --- notation/header.py | 4 ++++ tests/test_header.py | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/notation/header.py b/notation/header.py index 4a3ec50..a6d6c45 100644 --- a/notation/header.py +++ b/notation/header.py @@ -11,6 +11,10 @@ def __init__(self, start_time: datetime, players: List[Player], number_teams: int, location: Optional[str] = None, ): self._start_time: datetime = start_time self._location = location + if players is None or len(players) == 0: + raise ValueError('Player list cannot be empty') + if number_teams > len(players): + raise ValueError('Number teams cannot be greater than amount of players') self._players = players self._number_teams = number_teams diff --git a/tests/test_header.py b/tests/test_header.py index f785045..797adf5 100644 --- a/tests/test_header.py +++ b/tests/test_header.py @@ -1,5 +1,6 @@ from datetime import datetime +import pytest import tomlkit from hypothesis import assume, example, given from hypothesis.strategies import datetimes, lists, integers @@ -22,3 +23,13 @@ def test_dumps(start_time: datetime, players, number_teams): expected_toml += "\n".join(player_string) + '\n' assume(tomlkit.loads(expected_toml)) assert header_dump == expected_toml + + +def test_empty_player_list(): + with pytest.raises(ValueError): + Header(start_time=datetime.now(), players=[], number_teams=1) + + +def test_more_teams_than_players(): + with pytest.raises(ValueError): + Header(start_time=datetime.now(), players=[Player(name='John', team=1)], number_teams=2) From e0b314d5b851ca9d6ec47c40ff75ba26ead8ff1e Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Sat, 2 Nov 2024 10:49:03 +0100 Subject: [PATCH 55/68] FIX: player names --- tests/composites.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/composites.py b/tests/composites.py index 2235c24..30f77f9 100644 --- a/tests/composites.py +++ b/tests/composites.py @@ -1,3 +1,5 @@ +import string + from hypothesis.strategies import composite, text, characters, integers from notation.card import Card @@ -17,6 +19,6 @@ def build_card(draw): @composite def build_player(draw): - name = draw(text(alphabet=characters())) + name = draw(text(alphabet=string.ascii_letters, min_size=1)) team = draw(integers()) return Player(name, team) From 2d2c82bf86be8e3d9b5dfcafd95f5659f594cf26 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Sat, 2 Nov 2024 10:49:29 +0100 Subject: [PATCH 56/68] UPDATE: test edge cases --- tests/test_header.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/tests/test_header.py b/tests/test_header.py index 797adf5..4901699 100644 --- a/tests/test_header.py +++ b/tests/test_header.py @@ -3,16 +3,25 @@ import pytest import tomlkit from hypothesis import assume, example, given -from hypothesis.strategies import datetimes, lists, integers +from hypothesis.strategies import datetimes, lists, integers, composite from notation.header import Header from notation.player import Player from tests.composites import build_player -@given(datetimes(), lists(build_player(), max_size=6), integers()) -@example(datetime.now(), [Player(name='John', team=1)], 1) -def test_dumps(start_time: datetime, players, number_teams): +@composite +def build_header_dumps(draw): + timestamp = draw(datetimes()) + players = draw(lists(build_player(), min_size=1)) + teams = draw(integers(max_value=len(players))) + return (timestamp, players, teams) + + +@given(build_header_dumps()) +@example((datetime.now(), [Player(name='John', team=1)], 1)) +def test_dumps(data): + start_time, players, number_teams = data header = Header(start_time=start_time, players=players, number_teams=number_teams) header_dump = header.dumps() player_string = ((f'[[players.seat_{index}]]\n' @@ -20,7 +29,7 @@ def test_dumps(start_time: datetime, players, number_teams): f'team = {player._team}') for index, player in enumerate(players)) expected_toml = (f'[header]\ntimestamp = "{start_time.isoformat()}"\nnumber_of_teams = ' f'{number_teams}\n\n') - expected_toml += "\n".join(player_string) + '\n' + expected_toml += "\n\n".join(player_string) + '\n' assume(tomlkit.loads(expected_toml)) assert header_dump == expected_toml From 2154797990c39d7cc790fd9eec463d141661973d Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Sat, 2 Nov 2024 10:51:25 +0100 Subject: [PATCH 57/68] ADD: player dict --- notation/header.py | 3 +-- notation/player.py | 3 +++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/notation/header.py b/notation/header.py index a6d6c45..5d342a8 100644 --- a/notation/header.py +++ b/notation/header.py @@ -20,8 +20,7 @@ def __init__(self, start_time: datetime, players: List[Player], def dumps(self) -> str: players = {f'seat_{index}': - [{'name': player._name, - 'team': player._team}] for index, player in enumerate(self._players)} + [player.dict()] for index, player in enumerate(self._players)} header_dump = {'header': {'timestamp': self._start_time.isoformat(), 'number_of_teams': self._number_teams}, 'players': players} diff --git a/notation/player.py b/notation/player.py index bbc1a6a..9876129 100644 --- a/notation/player.py +++ b/notation/player.py @@ -2,3 +2,6 @@ class Player: def __init__(self, name: str, team: int): self._name = name self._team = team + + def dict(self) -> dict[str, str]: + return {'name': self._name, 'team': self._team} From cadbc245580047e6fdc43d3f17a5482967dcb9a6 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Sat, 2 Nov 2024 10:52:28 +0100 Subject: [PATCH 58/68] ADD: card dict --- notation/card.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/notation/card.py b/notation/card.py index ee21885..27ca50e 100644 --- a/notation/card.py +++ b/notation/card.py @@ -47,7 +47,10 @@ def rank(self) -> str: def dumps(self) -> str: """Return the card as TOML string.""" - return tomlkit.dumps({'suit': self._suit, 'rank': self._rank}) + return tomlkit.dumps(self.dict()) + + def dict(self): + return {'suit': self._suit, 'rank': self._rank} class FrenchCard(Card): From f5b48a7878e3469300315fbcbc2043abe4d87aae Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Sat, 2 Nov 2024 10:58:05 +0100 Subject: [PATCH 59/68] ADD: location support --- notation/header.py | 2 ++ notation/stack.py | 2 +- tests/test_header.py | 20 +++++++++++++++++++- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/notation/header.py b/notation/header.py index 5d342a8..2937da8 100644 --- a/notation/header.py +++ b/notation/header.py @@ -24,4 +24,6 @@ def dumps(self) -> str: header_dump = {'header': {'timestamp': self._start_time.isoformat(), 'number_of_teams': self._number_teams}, 'players': players} + if self._location: + header_dump['header']['location'] = self._location return tomlkit.dumps(header_dump) diff --git a/notation/stack.py b/notation/stack.py index 9e47df9..c5d4529 100644 --- a/notation/stack.py +++ b/notation/stack.py @@ -20,5 +20,5 @@ def __init__(self, cards: List[Card]): def dumps(self) -> str: """Return the stack as TOML string.""" - card_dump = {'cards': [{'suit': card.suit, 'rank': card.rank} for card in self._card_list]} + card_dump = {'cards': [card.dict() for card in self._card_list]} return tomlkit.dumps({'stack': card_dump}) diff --git a/tests/test_header.py b/tests/test_header.py index 4901699..ae7b1b9 100644 --- a/tests/test_header.py +++ b/tests/test_header.py @@ -1,9 +1,10 @@ +import string from datetime import datetime import pytest import tomlkit from hypothesis import assume, example, given -from hypothesis.strategies import datetimes, lists, integers, composite +from hypothesis.strategies import datetimes, lists, integers, composite, text from notation.header import Header from notation.player import Player @@ -34,6 +35,23 @@ def test_dumps(data): assert header_dump == expected_toml +@given(build_header_dumps(), text(alphabet=string.ascii_letters, min_size=1)) +@example((datetime.now(), [Player(name='John', team=1)], 1), 'Europe') +def test_dumps_with_location(data, location): + start_time, players, number_teams = data + header = Header(start_time=start_time, players=players, number_teams=number_teams, + location=location) + header_dump = header.dumps() + player_string = ((f'[[players.seat_{index}]]\n' + f'name = "{player._name}"\n' + f'team = {player._team}') for index, player in enumerate(players)) + expected_toml = (f'[header]\ntimestamp = "{start_time.isoformat()}"\nnumber_of_teams = ' + f'{number_teams}\nlocation = "{location}"\n\n') + expected_toml += "\n\n".join(player_string) + '\n' + assume(tomlkit.loads(expected_toml)) + assert header_dump == expected_toml + + def test_empty_player_list(): with pytest.raises(ValueError): Header(start_time=datetime.now(), players=[], number_teams=1) From 82398a0fe4c43d6a037f8300a499d415ad141fd5 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Sat, 2 Nov 2024 11:53:19 +0100 Subject: [PATCH 60/68] UPDATE: documentation --- notation/card.py | 1 + notation/header.py | 14 ++++++++++++-- notation/player.py | 11 +++++++++++ tests/composites.py | 3 +++ 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/notation/card.py b/notation/card.py index 27ca50e..f2a8077 100644 --- a/notation/card.py +++ b/notation/card.py @@ -50,6 +50,7 @@ def dumps(self) -> str: return tomlkit.dumps(self.dict()) def dict(self): + """Return the card as dictionary.""" return {'suit': self._suit, 'rank': self._rank} diff --git a/notation/header.py b/notation/header.py index 2937da8..7af56c9 100644 --- a/notation/header.py +++ b/notation/header.py @@ -1,3 +1,4 @@ +"""Header containing the meta data of a game.""" from datetime import datetime from typing import List, Optional @@ -6,9 +7,18 @@ from notation.player import Player +# pylint: disable=too-few-public-methods class Header: + """Class implementation of a meta data wrapper.""" + def __init__(self, start_time: datetime, players: List[Player], number_teams: int, location: Optional[str] = None, ): + """Constructor. + :param start_time: The start time of the game as datetime object + :param players: The list of players. + :param number_teams: The number of teams. + :param location: Optional. Where the game to place. + """ self._start_time: datetime = start_time self._location = location if players is None or len(players) == 0: @@ -19,8 +29,8 @@ def __init__(self, start_time: datetime, players: List[Player], self._number_teams = number_teams def dumps(self) -> str: - players = {f'seat_{index}': - [player.dict()] for index, player in enumerate(self._players)} + """Return a TOML string representation of the header.""" + players = {f'seat_{index}': [player.dict()] for index, player in enumerate(self._players)} header_dump = {'header': {'timestamp': self._start_time.isoformat(), 'number_of_teams': self._number_teams}, 'players': players} diff --git a/notation/player.py b/notation/player.py index 9876129..c14c5cd 100644 --- a/notation/player.py +++ b/notation/player.py @@ -1,7 +1,18 @@ +"""Wrapper for player data.""" + + +# pylint: disable=too-few-public-methods class Player: + """Class containing player data.""" + def __init__(self, name: str, team: int): + """Constructs + :param name: name of player + :param team: integer of the team ID + """ self._name = name self._team = team def dict(self) -> dict[str, str]: + """Return player data as dictionary.""" return {'name': self._name, 'team': self._team} diff --git a/tests/composites.py b/tests/composites.py index 30f77f9..38d2a3d 100644 --- a/tests/composites.py +++ b/tests/composites.py @@ -1,3 +1,4 @@ +"""Build funtions for hypothesis tests.""" import string from hypothesis.strategies import composite, text, characters, integers @@ -8,6 +9,7 @@ @composite def build_card(draw): + """Build a card with random strings of size one for suit and rank.""" suit: str = draw(text(min_size=1, max_size=1, alphabet=characters(whitelist_categories=('L', 'N', 'S'), blacklist_characters=('"', "'")))) @@ -19,6 +21,7 @@ def build_card(draw): @composite def build_player(draw): + """Build a player with random strings of at least size one for the name.""" name = draw(text(alphabet=string.ascii_letters, min_size=1)) team = draw(integers()) return Player(name, team) From 92177eddd27374ac96af13eae673be1d9af16a39 Mon Sep 17 00:00:00 2001 From: Marcel <25705862+Segelzwerg@users.noreply.github.com> Date: Sat, 2 Nov 2024 13:38:22 +0100 Subject: [PATCH 61/68] Update notation/header.py Co-authored-by: iTitus --- notation/header.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notation/header.py b/notation/header.py index 7af56c9..203f969 100644 --- a/notation/header.py +++ b/notation/header.py @@ -11,7 +11,7 @@ class Header: """Class implementation of a meta data wrapper.""" - def __init__(self, start_time: datetime, players: List[Player], + def __init__(self, start_time: datetime, players: list[Player], number_teams: int, location: Optional[str] = None, ): """Constructor. :param start_time: The start time of the game as datetime object From 8f6c775aaf8fcfeabb4c54a453b4e7da09f2af95 Mon Sep 17 00:00:00 2001 From: Marcel <25705862+Segelzwerg@users.noreply.github.com> Date: Sat, 2 Nov 2024 13:45:14 +0100 Subject: [PATCH 62/68] Update docs/source/standard.rst Co-authored-by: iTitus --- docs/source/standard.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/standard.rst b/docs/source/standard.rst index dc16a1c..a6743cd 100644 --- a/docs/source/standard.rst +++ b/docs/source/standard.rst @@ -17,7 +17,7 @@ Furthermore, the location and datetime is stated. location = "Hamburg" # Unsigned Integer number_of_teams = 2 - [[players.seat_1]] + [[players]] # Unsigned Integer: ID of team starting with 0 team = 0 name = "John" From 6ea1087271eea07df68ee190b6b02b789a422172 Mon Sep 17 00:00:00 2001 From: Marcel <25705862+Segelzwerg@users.noreply.github.com> Date: Sat, 2 Nov 2024 13:45:22 +0100 Subject: [PATCH 63/68] Update docs/source/standard.rst Co-authored-by: iTitus --- docs/source/standard.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/standard.rst b/docs/source/standard.rst index a6743cd..5d0859b 100644 --- a/docs/source/standard.rst +++ b/docs/source/standard.rst @@ -21,7 +21,7 @@ Furthermore, the location and datetime is stated. # Unsigned Integer: ID of team starting with 0 team = 0 name = "John" - [[players.seat_2]] + [[players]] team = 1 Name = "Lucy" From 5e71ae33ca99ee8a127b3c9bddcc3ff84f6731fa Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Sat, 2 Nov 2024 13:42:28 +0100 Subject: [PATCH 64/68] REMOVE: unused row --- docs/source/standard.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/standard.rst b/docs/source/standard.rst index 5d0859b..626616c 100644 --- a/docs/source/standard.rst +++ b/docs/source/standard.rst @@ -42,7 +42,7 @@ One card can be represented with [[stack.card]] suit="heart" rank="A" - [[data.stack.card]] + [[stack.card]] suit="heart" rank="K" From 07471a5da714a712aa03863426776af5f1ba2b52 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Sat, 2 Nov 2024 15:05:40 +0100 Subject: [PATCH 65/68] UPDATE: move seat to attribute --- notation/header.py | 9 ++++----- notation/player.py | 6 ++++-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/notation/header.py b/notation/header.py index 203f969..5000abd 100644 --- a/notation/header.py +++ b/notation/header.py @@ -1,6 +1,6 @@ """Header containing the meta data of a game.""" from datetime import datetime -from typing import List, Optional +from typing import Optional import tomlkit @@ -30,10 +30,9 @@ def __init__(self, start_time: datetime, players: list[Player], def dumps(self) -> str: """Return a TOML string representation of the header.""" - players = {f'seat_{index}': [player.dict()] for index, player in enumerate(self._players)} + players = [tomlkit.dumps({'players': [player.dict()]}) for player in self._players] header_dump = {'header': {'timestamp': self._start_time.isoformat(), - 'number_of_teams': self._number_teams}, - 'players': players} + 'number_of_teams': self._number_teams}} if self._location: header_dump['header']['location'] = self._location - return tomlkit.dumps(header_dump) + return f'{tomlkit.dumps(header_dump)}\n{"\n".join(players)}' diff --git a/notation/player.py b/notation/player.py index c14c5cd..20548d4 100644 --- a/notation/player.py +++ b/notation/player.py @@ -5,14 +5,16 @@ class Player: """Class containing player data.""" - def __init__(self, name: str, team: int): + def __init__(self, name: str, team: int, seat: int): """Constructs :param name: name of player :param team: integer of the team ID + :param seat: The unique identifier of place at table for that player. """ self._name = name self._team = team + self._seat = seat def dict(self) -> dict[str, str]: """Return player data as dictionary.""" - return {'name': self._name, 'team': self._team} + return {'name': self._name, 'team': self._team, 'seat': self._seat} From 9db26c60278959f93195f84c08b09029fb4890aa Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Sat, 2 Nov 2024 15:05:58 +0100 Subject: [PATCH 66/68] UPDATE: tests --- tests/composites.py | 10 ++++++++-- tests/test_header.py | 30 ++++++++++++++++++++---------- 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/tests/composites.py b/tests/composites.py index 38d2a3d..168e676 100644 --- a/tests/composites.py +++ b/tests/composites.py @@ -20,8 +20,14 @@ def build_card(draw): @composite -def build_player(draw): +def build_player(draw, seat: int): """Build a player with random strings of at least size one for the name.""" name = draw(text(alphabet=string.ascii_letters, min_size=1)) team = draw(integers()) - return Player(name, team) + return Player(name, team, seat) + + +@composite +def build_player_list(draw): + amount_players = draw(integers(min_value=1, max_value=10)) + return [build_player(seat=seat) for seat in range(amount_players)] diff --git a/tests/test_header.py b/tests/test_header.py index ae7b1b9..8760162 100644 --- a/tests/test_header.py +++ b/tests/test_header.py @@ -4,30 +4,38 @@ import pytest import tomlkit from hypothesis import assume, example, given -from hypothesis.strategies import datetimes, lists, integers, composite, text +from hypothesis.strategies import datetimes, lists, integers, composite, text, builds, uuids from notation.header import Header from notation.player import Player -from tests.composites import build_player +from tests.composites import build_player, build_player_list @composite def build_header_dumps(draw): timestamp = draw(datetimes()) - players = draw(lists(build_player(), min_size=1)) + amount_players = draw(integers(min_value=1, max_value=10)) + players = draw(lists(builds(Player, name=text(alphabet=string.ascii_letters, min_size=1), + team=integers(), seat=integers()), + min_size=1, + max_size=amount_players, + unique=True)) teams = draw(integers(max_value=len(players))) return (timestamp, players, teams) @given(build_header_dumps()) -@example((datetime.now(), [Player(name='John', team=1)], 1)) +@example((datetime.now(), [Player(name='John', team=1, seat=0)], 1)) +@example((datetime.now(), [Player(name='John', team=1, seat=0), + Player(name='John', team=1, seat=1)], 1)) def test_dumps(data): start_time, players, number_teams = data header = Header(start_time=start_time, players=players, number_teams=number_teams) header_dump = header.dumps() - player_string = ((f'[[players.seat_{index}]]\n' + player_string = ((f'[[players]]\n' f'name = "{player._name}"\n' - f'team = {player._team}') for index, player in enumerate(players)) + f'team = {player._team}\n' + f'seat = {player._seat}') for player in players) expected_toml = (f'[header]\ntimestamp = "{start_time.isoformat()}"\nnumber_of_teams = ' f'{number_teams}\n\n') expected_toml += "\n\n".join(player_string) + '\n' @@ -36,15 +44,16 @@ def test_dumps(data): @given(build_header_dumps(), text(alphabet=string.ascii_letters, min_size=1)) -@example((datetime.now(), [Player(name='John', team=1)], 1), 'Europe') +@example((datetime.now(), [Player(name='John', team=1, seat=0)], 1), 'Europe') def test_dumps_with_location(data, location): start_time, players, number_teams = data header = Header(start_time=start_time, players=players, number_teams=number_teams, location=location) header_dump = header.dumps() - player_string = ((f'[[players.seat_{index}]]\n' + player_string = ((f'[[players]]\n' f'name = "{player._name}"\n' - f'team = {player._team}') for index, player in enumerate(players)) + f'team = {player._team}\n' + f'seat = {player._seat}') for player in players) expected_toml = (f'[header]\ntimestamp = "{start_time.isoformat()}"\nnumber_of_teams = ' f'{number_teams}\nlocation = "{location}"\n\n') expected_toml += "\n\n".join(player_string) + '\n' @@ -59,4 +68,5 @@ def test_empty_player_list(): def test_more_teams_than_players(): with pytest.raises(ValueError): - Header(start_time=datetime.now(), players=[Player(name='John', team=1)], number_teams=2) + Header(start_time=datetime.now(), players=[Player(name='John', team=1, seat=0)], + number_teams=2) From 4af5909bbee5b4e65674fa0f4031dddf8004b0ef Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Sat, 2 Nov 2024 15:11:07 +0100 Subject: [PATCH 67/68] FIX: f string notation --- notation/header.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/notation/header.py b/notation/header.py index 5000abd..c2c6c5b 100644 --- a/notation/header.py +++ b/notation/header.py @@ -35,4 +35,5 @@ def dumps(self) -> str: 'number_of_teams': self._number_teams}} if self._location: header_dump['header']['location'] = self._location - return f'{tomlkit.dumps(header_dump)}\n{"\n".join(players)}' + player_string = '\n'.join(players) + return f'{tomlkit.dumps(header_dump)}\n{player_string}' From 66f81bf6c0a7732e571418c8157c4c5b6be373a2 Mon Sep 17 00:00:00 2001 From: Segelzwerg <25705862+Segelzwerg@users.noreply.github.com> Date: Sat, 2 Nov 2024 15:30:52 +0100 Subject: [PATCH 68/68] REMOVE: double wrap --- docs/source/standard.rst | 4 ++-- notation/stack.py | 2 +- tests/test_stack.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/source/standard.rst b/docs/source/standard.rst index 626616c..29bb918 100644 --- a/docs/source/standard.rst +++ b/docs/source/standard.rst @@ -39,10 +39,10 @@ One card can be represented with .. code-block:: toml - [[stack.card]] + [[stack]] suit="heart" rank="A" - [[stack.card]] + [[stack]] suit="heart" rank="K" diff --git a/notation/stack.py b/notation/stack.py index c5d4529..ada6510 100644 --- a/notation/stack.py +++ b/notation/stack.py @@ -20,5 +20,5 @@ def __init__(self, cards: List[Card]): def dumps(self) -> str: """Return the stack as TOML string.""" - card_dump = {'cards': [card.dict() for card in self._card_list]} + card_dump = [card.dict() for card in self._card_list] return tomlkit.dumps({'stack': card_dump}) diff --git a/tests/test_stack.py b/tests/test_stack.py index 769f138..4edd3d6 100644 --- a/tests/test_stack.py +++ b/tests/test_stack.py @@ -13,7 +13,7 @@ def test_dumps(cards): stack = Stack(cards=cards) toml_stack: str = stack.dumps() - stack = (f'[[stack.cards]]\nsuit = "{card.suit}"\nrank = "{card.rank}"\n' for card in cards) + stack = (f'[[stack]]\nsuit = "{card.suit}"\nrank = "{card.rank}"\n' for card in cards) expected_toml = "\n".join(stack) assume(tomlkit.loads(expected_toml)) assert toml_stack == expected_toml