diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 758510e..9abb4e4 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -1,5 +1,9 @@ name: CodeCov -on: [push, pull_request] +on: + push: + branches: [ master, test_actions ] + pull_request: + branches: [ master ] jobs: run_tests: runs-on: ubuntu-20.04 @@ -8,10 +12,10 @@ jobs: fail-fast: true steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Setup Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v5 with: python-version: 3.9 @@ -23,7 +27,7 @@ jobs: virtualenvs-in-project: true - name: Load cache - uses: actions/cache@v2 + uses: actions/cache@v4 id: cache with: path: .venv @@ -41,6 +45,6 @@ jobs: run: poetry run py.test --runint --cov=ipumspy --cov-report=xml - name: Upload Coverage to Codecov - uses: codecov/codecov-action@v2 + uses: codecov/codecov-action@v4 with: token: ${{secrets.CODECOV_TOKEN}} \ No newline at end of file diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1aef406..0a30baa 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -16,10 +16,10 @@ jobs: python-version: ["3.8", "3.9", "3.10", "3.11"] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Setup Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} @@ -34,7 +34,7 @@ jobs: run: poetry config experimental.new-installer false - name: Load cache - uses: actions/cache@v2 + uses: actions/cache@v4 id: cache with: path: .venv diff --git a/README.md b/README.md index 2b51d30..18fa02e 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ pip install ipumspy ## Getting Started -Documentation found [here](https://ipumspy.readthedocs.io/en/latest/index.html). +Documentation and usage information found [here](https://ipumspy.readthedocs.io/en/latest/index.html). ## Development diff --git a/docs/source/change-log.rst b/docs/source/change-log.rst index 99b5eeb..c52b2b4 100644 --- a/docs/source/change-log.rst +++ b/docs/source/change-log.rst @@ -11,6 +11,33 @@ This project adheres to `Semantic Versioning`_. .. _Semantic Versioning: http://semver.org/ + +0.5.0 +----- +2024-06-27 + +* Breaking Changes + + * ``UsaExtract``, ``CpsExtract``, and ``IpumsiExtract`` have been consolidated into a single :py:class:`~ipumspy.api.extract.MicrodataExtract` class that requires an IPUMS collection id as its first positional argument. + +* New Features + + * Support for new IPUMS API features added in the `Version 2, May 2024 Update `_. + + * Added :py:class:`~ipumspy.api.extract.TimeUseVariable` to support adding IPUMS ATUS, AHTUS, and MTUS time use variables to extracts + * ``sample_members`` is now a valid key word argument in :py:class:`~ipumspy.api.extract.MicrodataExtract` for IPUMS ATUS extracts to request non-respondents and household members of respondents be included in an IPUMS ATUS extract + * Rectangular on activity (``{"rectangular": {"on": "A"}}``) is now a supported data structure for IPUMS ATUS, AHTUS, and MTUS data collections + * Rectangular on round (``{"rectangular": {"on": "R"}}``) is now a supported data structure for IPUMS MEPS + * Rectangular on injury (``{"rectangular": {"on": "I"}}``) is now a supported data structure for IPUMS IHIS + * Household-only extracts (``{"householdOnly": {}``) is now a supported data structure for IPUMS USA + +* Bug Fixes + + * An off-by-one error that was causing variables read using the :py:meth:`~ipumspy.noextract.read_noextract_codebook()` method to be one digit too wide has bee fixed. + * :py:meth:`~ipumspy.readers.read_microdata()` and :py:meth:`~ipumspy.readers.read_hierarchical_microdata()` now handle floating point data in IPUMS extract files correctly. + * :py:meth:`~ipumspy.api.extract.define_extract_from_json()` and :py:meth:`~ipumspy.api.extract.extract_from_dict()` now correctly read the keyword argument elements of the extract definition dictionaries rather than using default values. + * If a list containing both string variable names or time use variable names and :py:class:`~ipumspy.api.Variable` or :py:class:`~ipumspy.api.TimeUseVariable` objects, a TypeError is raised. + 0.4.1 ----- 2023-08-08 diff --git a/docs/source/cli.rst b/docs/source/cli.rst index b5b0d83..83c792f 100644 --- a/docs/source/cli.rst +++ b/docs/source/cli.rst @@ -24,7 +24,7 @@ as described in the :doc:`getting started guide `. description: Simple IPUMS extract collection: usa - api_version: beta + api_version: 2 samples: - us2012b variables: @@ -58,7 +58,7 @@ which contains the following: description: Another extract collection: usa - api_version: beta + api_version: 2 samples: - us2012b variables: @@ -80,7 +80,7 @@ extracts simultaneously. To do so, specify the ``ipums_multiple.yml`` file as fo extracts: - description: Simple IPUMS extract collection: usa - api_version: beta + api_version: 2 samples: - us2012b variables: @@ -88,7 +88,7 @@ extracts simultaneously. To do so, specify the ``ipums_multiple.yml`` file as fo - SEX - description: Another extract collection: usa - api_version: beta + api_version: 2 samples: - us2012b variables: diff --git a/docs/source/conf.py b/docs/source/conf.py index 8298182..df2783b 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -179,6 +179,7 @@ copybutton_prompt_text = r">>> |\.\.\. |\$ |In \[\d*\]: | {2,5}\.\.\.: | {5,8}: " copybutton_prompt_is_regexp = True + # this is a workaround to filter out forward reference issue in # sphinx_autodoc_typehints class FilterPandasTypeAnnotationWarning(pylogging.Filter): @@ -196,6 +197,7 @@ def filter(self, record: pylogging.LogRecord) -> bool: FilterPandasTypeAnnotationWarning() ) + # based on pandas/doc/source/conf.py def linkcode_resolve(domain, info): """Determine the URL corresponding to Python object.""" diff --git a/docs/source/extracts.rst b/docs/source/extracts.rst index dc0d2e5..a36264b 100644 --- a/docs/source/extracts.rst +++ b/docs/source/extracts.rst @@ -30,51 +30,119 @@ filled in as new IPUMS data collections become accessible via API. - collection IDs - sample IDs - variable names - * - IPUMS USA + * - `IPUMS USA `__ - usa - `usa samples `__ - `usa variables `__ - * - IPUMS CPS + * - `IPUMS CPS `__ - cps - `cps samples `__ - `cps variables `__ - * - IPUMS International + * - `IPUMS International `__ - ipumsi - `ipumsi samples `__ - `ipumsi variables `__ + * - `IPUMS ATUS `__ + - atus + - `atus samples `__ + - `atus variables `__ + * - `IPUMS AHTUS `__ + - ahtus + - `ahtus samples `__ + - `ahtus variables `__ + * - `IPUMS MTUS `__ + - mtus + - `mtus samples `__ + - `mtus variables `__ + * - `IPUMS NHIS `__ + - nhis + - `nhis samples `__ + - `nhis variables `__ + * - `IPUMS MEPS `__ + - meps + - `meps samples `__ + - `meps variables `__ Extract Objects --------------- -Each IPUMS data collection that is accessible via API has its own extract class. Using this class to create your extract object obviates the need to specify a data collection. +All IPUMS data collection currently supported by `ipumspy` are microdata collections; extracts for these data collections can be constructed and submitted to the IPUMS API using the :class:`ipumspy.api.extract.MicrodataExtract` class. The minimum required arguments are 1) an IPUMS collection id, 2) a list of sample ids, and 3) a list of variable names. For example: .. code:: python - extract = UsaExtract( + extract = MicrodataExtract( + "usa", ["us2012b"], ["AGE", "SEX"], ) -instantiates a UsaExtract object for the IPUMS USA data collection that includes the us2012b (2012 PRCS) sample, and the variables AGE and SEX. +instantiates a MicrodataExtract object for the IPUMS USA data collection that includes the us2012b (2012 PRCS) sample, and the variables AGE and SEX. IPUMS extracts can be requested as rectangular or hierarchical files. The ``data_structure`` argument defaults to ``{"rectangular": {"on": "P"}}`` to request a rectangular, person-level extract. The code snippet below requests a hierarchical USA extract. .. code:: python - extract = UsaExtract( + extract = MicrodataExtract( + "usa", ["us2012b"], ["AGE", "SEX"], data_structure={"hierarchical": {}} ) + +Some IPUMS data collections offer rectangular files on non-person record types. For example, IPUMS ATUS offers rectangular files at the activity level and IPUMS MEPS offers rectangular files at the round level. Below is an example of an IPUMS MEPS extract object that is rectanularized on round. + +.. code:: python + + extract = MicrodataExtract( + "meps", + ["mp2016"], + ["AGE", "SEX", "PREGNTRD"], + data_structure={"rectangular": {"on": "R"}} + ) + +The table below shows the available data structures and the IPUMS data collections for which each is valid. + +.. _collection data structures table: + +.. list-table:: IPUMS data structures + :widths: 23 40 18 + :header-rows: 1 + :align: center + + * - data structure + - syntax + - collections + * - rectangular on Person (default) + - ``data_structure={"rectangular": {"on": "P"}}`` + - all IPUMS microdata collections + * - hierarchical + - ``data_structure={"hierarchical": {}}`` + - all IPUMS microdata collections + * - rectangular on Activity + - ``data_structure={"rectangular": {"on": "A"}}`` + - atus, ahtus, mtus + * - rectangular on Round + - ``data_structure={"rectangular": {"on": "R"}}`` + - meps + * - rectangular on Injury + - ``data_structure={"rectangular": {"on": "R"}}`` + - nhis + * - household only + - ``data_structure={"householdOnly": {}}`` + - usa + +Note that some types of records are only available as part of hierarchical extracts. This is true of IPUMS ATUS "Who" and "Eldercare" [*]_ records and of IPUMS MEPS "Event", "Condition", and "Prescription Medications" record types. + Users also have the option to specify a data format and an extract description when creating an extract object. .. code:: python - extract = UsaExtract( + extract = MicrodataExtract( + "usa", ["us2012b"], ["AGE", "SEX"], data_format="csv", @@ -87,7 +155,7 @@ Once an extract object has been created, the extract must be submitted to the AP .. code:: python - from ipumspy import IpumsApiClient, UsaExtract + from ipumspy import IpumsApiClient, MicrodataExtract IPUMS_API_KEY = your_api_key DOWNLOAD_DIR = Path(your_download_dir) @@ -95,7 +163,8 @@ Once an extract object has been created, the extract must be submitted to the AP ipums = IpumsApiClient(IPUMS_API_KEY) # define your extract - extract = UsaExtract( + extract = MicrodataExtract( + "usa", ["us2012b"], ["AGE", "SEX"], ) @@ -184,7 +253,8 @@ IPUMS Extract features can be added or updated before an extract request is subm .. code:: python - extract = CPSExtract( + extract = MicrodataExtract( + "cps", ["cps2022_03s"], ["AGE", "SEX", "RACE"], ) @@ -217,7 +287,8 @@ The :meth:`.select_cases()` method defaults to using "general" codes to select c .. code:: python - extract = UsaExtract( + extract = MicrodataExtract( + "usa", ["us2021a"], ["AGE", "SEX", "RACE"] ) @@ -240,7 +311,8 @@ By default, case selection includes only individuals with the specified values f .. code:: python - extract = UsaExtract( + extract = MicrodataExtract( + "usa", ["us2021a"], ["AGE", "SEX", "RACE"], case_select_who = "households" @@ -258,7 +330,8 @@ Data quality flags can be added to an extract on a per-variable basis or for the .. code:: python - extract = CpsExtract( + extract = MicrodataExtract( + "cps", ["cps2022_03s"], ["AGE", "SEX", "RACE"], data_quality_flags=True @@ -285,7 +358,8 @@ It is also possible to define all variable-level extract features when the IPUMS .. code:: python - fancy_extract = CpsExtract( + fancy_extract = MicrodataExtract( + "cps", ["cps2022_03s"], [ Variable(name="AGE", @@ -297,11 +371,72 @@ It is also possible to define all variable-level extract features when the IPUMS ] ) -Unsupported Features --------------------- +Time Use Variables +------------------ +The IPUMS Time Use collections (ATUS, AHTUS, and MTUS) offer a special type of variable called time use variables. These variables correspond to the number of minutes a respondent spent during the 24-hour reference period on activities that match specific criteria. Within time use variables, there are two different variable types: "system" time use variables that IPUMS offers pre-made for users based on common definitions of activities and "user-defined" time use variables that users can construct based on their own criteria using the IPUMS web interface for these collections. Currently time use variable creation is not supported via the IPUMS API. However, users can request system time use variables as well as their own custom user-defined time use variables that they have previously created in the IPUMS web interface and saved to their user account via the IPUMS API. + +Because time use variables are a special type of variable, they need to be requested as time use variables specifically and cannot be added to the `varibles` argument list with non-time use variables. Below is an example of an IPUMS ATUS extract that contains variables AGE and SEX as well as the system time use variable BLS_PCARE. + +.. code:: python + + atus_extract = MicrodataExtract( + collection="atus", + samples=["at2016"], + variables=["AGE", "SEX"], + time_use_variables=["BLS_PCARE"] + ) + +Like other variables, time use variables can also be passed to :class:`ipumspy.api.extract.MicrodataExtract` as a list of :class:`ipumspy.api.extract.TimeUseVariable` objects. + +.. code:: python + + atus_extract = MicrodataExtract( + collection="atus", + samples=["at2016"], + variables=["AGE", "SEX"], + time_use_variables=[TimeUseVariable(name="BLS_PCARE")] + ) + +This approach may be simpler when including user-defined timeuse variables in your extract, as user-defined time use variables also have an owner attribute that must be specified. The owner field contains the email address associated with your IPUMS account. + +.. code:: python + + atus_extract = MicrodataExtract( + collection="atus", + samples=["at2016"], + variables=["AGE", "SEX"], + time_use_variables=[ + TimeUseVariable(name="BLS_PCARE"), + TimeUseVariable(name="MY_CUSTOM_TUV", owner="newipumsuser@gmail.com") + ] + ) + +IPUMS ATUS Sample Members +------------------------- + +Though time use information is only available for designated respondents in IPUMS ATUS, users may also wish to include household members of these respondents and/or non-respondents in their IPUMS ATUS extracts. These "sample members" can be included by using the ``sample_members`` key word argument. The example below includes both household members of ATUS respondents and non-respondents alongside ATUS respondents (included by default). + +.. code:: python + + atus_extract = MicrodataExtract( + collection="atus", + samples=["at2016"], + variables=["AGE", "SEX"], + time_use_variables=[ + TimeUseVariable(name="BLS_PCARE"), + TimeUseVariable(name="MY_CUSTOM_TUV", owner="newipumsuser@gmail.com") + ], + sample_members={ + "include_non_respondents": True, + "include_household_members": True + } + ) + +Unsupported Extract Features +---------------------------- Not all features available through the IPUMS extract web UI are currently supported for extracts made via API. -For a list of currently unsupported features, see `the developer documentation `__. +For a list of supported and unsupported features for each IPUMS data collection, see `the developer documentation `__. This list will be updated as more features become available. Extract Histories @@ -322,16 +457,18 @@ Extract Histories # get my 20 most-recent CPS extracts more_recent_extracts = ipums.get_previous_extracts("cps", limit=20) -The :meth:`.get_extract_history()` generator makes it easy to filter your extract history to pull out extracts with certain variables, samples, features, file formats, etc. By default, this generator returns pages extract definitions of the maximum possible size, 2500. Page size can be set to a lower number using the ``page_size`` argument. +The :meth:`.get_extract_history()` generator makes it easy to filter your extract history to pull out extracts with certain variables, samples, features, file formats, etc. By default, this generator returns pages of extract definitions of the maximum possible size of 500 extract definitions per page. Page size can be set to a lower number using the ``page_size`` argument. .. code:: python # make a list of all of my extracts from IPUMS CPS that include the variable STATEFIP extracts_with_state = [] - # get pages with 50 CPS extracts per page + # get pages with 100 CPS extracts per page for page in ipums.get_extract_history("cps", page_size=100): for ext in page["data"]: - extract_obj = CpsExtract(**ext["extractDefinition"]) + extract_obj = MicrodataExtract(**ext["extractDefinition"]) if "STATEFIP" in [var.name for var in extract_obj.variables]: extracts_with_state.append(extract_obj) + +.. [*] Note that IPUMS ATUS Eldercare records will be included in a hierarchical extract automatically if Eldercare variables are selected. There is no API equivalent to the "include eldercare" checkbox in the Extract Data Structure menu in the IPUMS ATUS web interface. \ No newline at end of file diff --git a/docs/source/index.rst b/docs/source/index.rst index fa2ef13..bbf5ae3 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -10,12 +10,12 @@ What is ipumspy? ``ipumspy`` is a collection of python tools for working with data from `IPUMS `_ and for accessing that data via API. -Currently only IPUMS microdata are supported; we hope to add support for working with spatial data in the future. +Currently only IPUMS microdata collections are supported; we hope to add support for working with spatial data in the future. -IPUMS USA, IPUMS CPS, and IPUMS International are currently the only IPUMS microdata collection available via the IPUMS API. Support for other IPUMS data collections will be added as they become available via API. +``ipumspy`` can only be used to make extract requests for IPUMS data collections that are available via API. These collections are listed in the :ref:`collection availability table` table. Support for other IPUMS data collections will be added as they become available via API. For more information about the IPUMS API program, IPUMS account registration, and API keys, see the `IPUMS developer portal `_. -``ipumspy`` can also be used to analyze microdata extracts made through the IPUMS website for collections unavailable via API. +``ipumspy`` can also be used to read and analyze microdata extracts made through the IPUMS website for collections unavailable via API. Releases diff --git a/docs/source/reference/api.rst b/docs/source/reference/api.rst index 7154ebc..99e088a 100644 --- a/docs/source/reference/api.rst +++ b/docs/source/reference/api.rst @@ -28,10 +28,7 @@ extract class. :nosignatures: ipumspy.api.BaseExtract - ipumspy.api.OtherExtract - ipumspy.api.UsaExtract - ipumspy.api.CpsExtract - ipumspy.api.IpumsiExtract + ipumspy.api.MicrodataExtract Other IPUMS Objects ------------------- @@ -45,6 +42,7 @@ Helpful data classes for defining IPUMS Extract objects. ipumspy.api.Variable ipumspy.api.Sample + ipumspy.api.TimeUseVariable Importing or Exporting Extract Definitions ------------------------------------------ diff --git a/docs/source/variables.rst b/docs/source/variables.rst index 44d1cff..800f571 100644 --- a/docs/source/variables.rst +++ b/docs/source/variables.rst @@ -18,7 +18,7 @@ Currently, IPUMS metadata is not accessible via API and all variable information Variable Descriptions ********************* -The :class:`ipumspy.ddi.VariableDescription` objects built from the ddi codebook provide easy access to variable metadata. These can be returned using the :meth:`.get_variable_info()` method. +The :class:`ipumspy.ddi.VariableDescription` objects built from the DDI codebook provide easy access to variable metadata. These can be returned using the :meth:`.get_variable_info()` method. .. code:: python diff --git a/poetry.lock b/poetry.lock index 83169ba..428c457 100644 --- a/poetry.lock +++ b/poetry.lock @@ -12,38 +12,54 @@ files = [ {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, ] +[[package]] +name = "annotated-types" +version = "0.6.0" +description = "Reusable constraint types to use with typing.Annotated" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "annotated_types-0.6.0-py3-none-any.whl", hash = "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"}, + {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.9\""} + [[package]] name = "anyio" -version = "3.7.1" +version = "4.3.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"}, - {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"}, + {file = "anyio-4.3.0-py3-none-any.whl", hash = "sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8"}, + {file = "anyio-4.3.0.tar.gz", hash = "sha256:f75253795a87df48568485fd18cdd2a3fa5c4f7c5be8e5e36637733fce06fed6"}, ] [package.dependencies] -exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} idna = ">=2.8" sniffio = ">=1.1" +typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} [package.extras] -doc = ["Sphinx", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-jquery"] -test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] -trio = ["trio (<0.22)"] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.23)"] [[package]] name = "astroid" -version = "2.15.6" +version = "2.15.8" 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"}, + {file = "astroid-2.15.8-py3-none-any.whl", hash = "sha256:1aa149fc5c6589e3d0ece885b4491acd80af4f087baafa3fb5203b113e68cd3c"}, + {file = "astroid-2.15.8.tar.gz", hash = "sha256:6c107453dffee9055899705de3c9ead36e74119cee151e5a9aaf7f0b0e020a6a"}, ] [package.dependencies] @@ -56,103 +72,121 @@ wrapt = [ [[package]] name = "attrs" -version = "23.1.0" +version = "23.2.0" description = "Classes Without Boilerplate" category = "dev" 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"}, + {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, + {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, ] [package.extras] cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[docs,tests]", "pre-commit"] +dev = ["attrs[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]"] +tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] +tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] [[package]] name = "babel" -version = "2.12.1" +version = "2.15.0" description = "Internationalization utilities" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, - {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, + {file = "Babel-2.15.0-py3-none-any.whl", hash = "sha256:08706bdad8d0a3413266ab61bd6c34d0c28d6e1e7badf40a2cebe67644e2e1fb"}, + {file = "babel-2.15.0.tar.gz", hash = "sha256:8daf0e265d05768bc6c7a314cf1321e9a123afc328cc635c18622a2f30a04413"}, ] [package.dependencies] pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} +[package.extras] +dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] + [[package]] name = "beautifulsoup4" -version = "4.12.2" +version = "4.12.3" description = "Screen-scraping library" -category = "main" +category = "dev" optional = false python-versions = ">=3.6.0" files = [ - {file = "beautifulsoup4-4.12.2-py3-none-any.whl", hash = "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a"}, - {file = "beautifulsoup4-4.12.2.tar.gz", hash = "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da"}, + {file = "beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed"}, + {file = "beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051"}, ] [package.dependencies] soupsieve = ">1.2" [package.extras] +cchardet = ["cchardet"] +chardet = ["chardet"] +charset-normalizer = ["charset-normalizer"] html5lib = ["html5lib"] lxml = ["lxml"] [[package]] name = "black" -version = "22.12.0" +version = "24.4.2" description = "The uncompromising code formatter." category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "black-22.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d"}, - {file = "black-22.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351"}, - {file = "black-22.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f"}, - {file = "black-22.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4"}, - {file = "black-22.12.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2"}, - {file = "black-22.12.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350"}, - {file = "black-22.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d"}, - {file = "black-22.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc"}, - {file = "black-22.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320"}, - {file = "black-22.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148"}, - {file = "black-22.12.0-py3-none-any.whl", hash = "sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf"}, - {file = "black-22.12.0.tar.gz", hash = "sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f"}, + {file = "black-24.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dd1b5a14e417189db4c7b64a6540f31730713d173f0b63e55fabd52d61d8fdce"}, + {file = "black-24.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e537d281831ad0e71007dcdcbe50a71470b978c453fa41ce77186bbe0ed6021"}, + {file = "black-24.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaea3008c281f1038edb473c1aa8ed8143a5535ff18f978a318f10302b254063"}, + {file = "black-24.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:7768a0dbf16a39aa5e9a3ded568bb545c8c2727396d063bbaf847df05b08cd96"}, + {file = "black-24.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:257d724c2c9b1660f353b36c802ccece186a30accc7742c176d29c146df6e474"}, + {file = "black-24.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bdde6f877a18f24844e381d45e9947a49e97933573ac9d4345399be37621e26c"}, + {file = "black-24.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e151054aa00bad1f4e1f04919542885f89f5f7d086b8a59e5000e6c616896ffb"}, + {file = "black-24.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:7e122b1c4fb252fd85df3ca93578732b4749d9be076593076ef4d07a0233c3e1"}, + {file = "black-24.4.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:accf49e151c8ed2c0cdc528691838afd217c50412534e876a19270fea1e28e2d"}, + {file = "black-24.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:88c57dc656038f1ab9f92b3eb5335ee9b021412feaa46330d5eba4e51fe49b04"}, + {file = "black-24.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be8bef99eb46d5021bf053114442914baeb3649a89dc5f3a555c88737e5e98fc"}, + {file = "black-24.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:415e686e87dbbe6f4cd5ef0fbf764af7b89f9057b97c908742b6008cc554b9c0"}, + {file = "black-24.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bf10f7310db693bb62692609b397e8d67257c55f949abde4c67f9cc574492cc7"}, + {file = "black-24.4.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:98e123f1d5cfd42f886624d84464f7756f60ff6eab89ae845210631714f6db94"}, + {file = "black-24.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48a85f2cb5e6799a9ef05347b476cce6c182d6c71ee36925a6c194d074336ef8"}, + {file = "black-24.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:b1530ae42e9d6d5b670a34db49a94115a64596bc77710b1d05e9801e62ca0a7c"}, + {file = "black-24.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:37aae07b029fa0174d39daf02748b379399b909652a806e5708199bd93899da1"}, + {file = "black-24.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:da33a1a5e49c4122ccdfd56cd021ff1ebc4a1ec4e2d01594fef9b6f267a9e741"}, + {file = "black-24.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef703f83fc32e131e9bcc0a5094cfe85599e7109f896fe8bc96cc402f3eb4b6e"}, + {file = "black-24.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:b9176b9832e84308818a99a561e90aa479e73c523b3f77afd07913380ae2eab7"}, + {file = "black-24.4.2-py3-none-any.whl", hash = "sha256:d36ed1124bb81b32f8614555b34cc4259c3fbc7eec17870e8ff8ded335b58d8c"}, + {file = "black-24.4.2.tar.gz", hash = "sha256:c872b53057f000085da66a19c55d68f6f8ddcac2642392ad3a355878406fbd4d"}, ] [package.dependencies] click = ">=8.0.0" mypy-extensions = ">=0.4.3" +packaging = ">=22.0" pathspec = ">=0.9.0" platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} -typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} [package.extras] colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] +d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "certifi" -version = "2023.7.22" +version = "2024.2.2" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, - {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, + {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, + {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, ] [[package]] @@ -169,87 +203,102 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.2.0" +version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, - {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] [[package]] @@ -281,64 +330,64 @@ files = [ [[package]] name = "coverage" -version = "7.3.0" +version = "7.5.1" description = "Code coverage measurement for Python" category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:db76a1bcb51f02b2007adacbed4c88b6dee75342c37b05d1822815eed19edee5"}, - {file = "coverage-7.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c02cfa6c36144ab334d556989406837336c1d05215a9bdf44c0bc1d1ac1cb637"}, - {file = "coverage-7.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:477c9430ad5d1b80b07f3c12f7120eef40bfbf849e9e7859e53b9c93b922d2af"}, - {file = "coverage-7.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce2ee86ca75f9f96072295c5ebb4ef2a43cecf2870b0ca5e7a1cbdd929cf67e1"}, - {file = "coverage-7.3.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68d8a0426b49c053013e631c0cdc09b952d857efa8f68121746b339912d27a12"}, - {file = "coverage-7.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b3eb0c93e2ea6445b2173da48cb548364f8f65bf68f3d090404080d338e3a689"}, - {file = "coverage-7.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:90b6e2f0f66750c5a1178ffa9370dec6c508a8ca5265c42fbad3ccac210a7977"}, - {file = "coverage-7.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:96d7d761aea65b291a98c84e1250cd57b5b51726821a6f2f8df65db89363be51"}, - {file = "coverage-7.3.0-cp310-cp310-win32.whl", hash = "sha256:63c5b8ecbc3b3d5eb3a9d873dec60afc0cd5ff9d9f1c75981d8c31cfe4df8527"}, - {file = "coverage-7.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:97c44f4ee13bce914272589b6b41165bbb650e48fdb7bd5493a38bde8de730a1"}, - {file = "coverage-7.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:74c160285f2dfe0acf0f72d425f3e970b21b6de04157fc65adc9fd07ee44177f"}, - {file = "coverage-7.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b543302a3707245d454fc49b8ecd2c2d5982b50eb63f3535244fd79a4be0c99d"}, - {file = "coverage-7.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad0f87826c4ebd3ef484502e79b39614e9c03a5d1510cfb623f4a4a051edc6fd"}, - {file = "coverage-7.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:13c6cbbd5f31211d8fdb477f0f7b03438591bdd077054076eec362cf2207b4a7"}, - {file = "coverage-7.3.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fac440c43e9b479d1241fe9d768645e7ccec3fb65dc3a5f6e90675e75c3f3e3a"}, - {file = "coverage-7.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3c9834d5e3df9d2aba0275c9f67989c590e05732439b3318fa37a725dff51e74"}, - {file = "coverage-7.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4c8e31cf29b60859876474034a83f59a14381af50cbe8a9dbaadbf70adc4b214"}, - {file = "coverage-7.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7a9baf8e230f9621f8e1d00c580394a0aa328fdac0df2b3f8384387c44083c0f"}, - {file = "coverage-7.3.0-cp311-cp311-win32.whl", hash = "sha256:ccc51713b5581e12f93ccb9c5e39e8b5d4b16776d584c0f5e9e4e63381356482"}, - {file = "coverage-7.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:887665f00ea4e488501ba755a0e3c2cfd6278e846ada3185f42d391ef95e7e70"}, - {file = "coverage-7.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d000a739f9feed900381605a12a61f7aaced6beae832719ae0d15058a1e81c1b"}, - {file = "coverage-7.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:59777652e245bb1e300e620ce2bef0d341945842e4eb888c23a7f1d9e143c446"}, - {file = "coverage-7.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9737bc49a9255d78da085fa04f628a310c2332b187cd49b958b0e494c125071"}, - {file = "coverage-7.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5247bab12f84a1d608213b96b8af0cbb30d090d705b6663ad794c2f2a5e5b9fe"}, - {file = "coverage-7.3.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2ac9a1de294773b9fa77447ab7e529cf4fe3910f6a0832816e5f3d538cfea9a"}, - {file = "coverage-7.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:85b7335c22455ec12444cec0d600533a238d6439d8d709d545158c1208483873"}, - {file = "coverage-7.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:36ce5d43a072a036f287029a55b5c6a0e9bd73db58961a273b6dc11a2c6eb9c2"}, - {file = "coverage-7.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:211a4576e984f96d9fce61766ffaed0115d5dab1419e4f63d6992b480c2bd60b"}, - {file = "coverage-7.3.0-cp312-cp312-win32.whl", hash = "sha256:56afbf41fa4a7b27f6635bc4289050ac3ab7951b8a821bca46f5b024500e6321"}, - {file = "coverage-7.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:7f297e0c1ae55300ff688568b04ff26b01c13dfbf4c9d2b7d0cb688ac60df479"}, - {file = "coverage-7.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac0dec90e7de0087d3d95fa0533e1d2d722dcc008bc7b60e1143402a04c117c1"}, - {file = "coverage-7.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:438856d3f8f1e27f8e79b5410ae56650732a0dcfa94e756df88c7e2d24851fcd"}, - {file = "coverage-7.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1084393c6bda8875c05e04fce5cfe1301a425f758eb012f010eab586f1f3905e"}, - {file = "coverage-7.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49ab200acf891e3dde19e5aa4b0f35d12d8b4bd805dc0be8792270c71bd56c54"}, - {file = "coverage-7.3.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a67e6bbe756ed458646e1ef2b0778591ed4d1fcd4b146fc3ba2feb1a7afd4254"}, - {file = "coverage-7.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8f39c49faf5344af36042b293ce05c0d9004270d811c7080610b3e713251c9b0"}, - {file = "coverage-7.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7df91fb24c2edaabec4e0eee512ff3bc6ec20eb8dccac2e77001c1fe516c0c84"}, - {file = "coverage-7.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:34f9f0763d5fa3035a315b69b428fe9c34d4fc2f615262d6be3d3bf3882fb985"}, - {file = "coverage-7.3.0-cp38-cp38-win32.whl", hash = "sha256:bac329371d4c0d456e8d5f38a9b0816b446581b5f278474e416ea0c68c47dcd9"}, - {file = "coverage-7.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:b859128a093f135b556b4765658d5d2e758e1fae3e7cc2f8c10f26fe7005e543"}, - {file = "coverage-7.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fc0ed8d310afe013db1eedd37176d0839dc66c96bcfcce8f6607a73ffea2d6ba"}, - {file = "coverage-7.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61260ec93f99f2c2d93d264b564ba912bec502f679793c56f678ba5251f0393"}, - {file = "coverage-7.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97af9554a799bd7c58c0179cc8dbf14aa7ab50e1fd5fa73f90b9b7215874ba28"}, - {file = "coverage-7.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3558e5b574d62f9c46b76120a5c7c16c4612dc2644c3d48a9f4064a705eaee95"}, - {file = "coverage-7.3.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37d5576d35fcb765fca05654f66aa71e2808d4237d026e64ac8b397ffa66a56a"}, - {file = "coverage-7.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:07ea61bcb179f8f05ffd804d2732b09d23a1238642bf7e51dad62082b5019b34"}, - {file = "coverage-7.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:80501d1b2270d7e8daf1b64b895745c3e234289e00d5f0e30923e706f110334e"}, - {file = "coverage-7.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4eddd3153d02204f22aef0825409091a91bf2a20bce06fe0f638f5c19a85de54"}, - {file = "coverage-7.3.0-cp39-cp39-win32.whl", hash = "sha256:2d22172f938455c156e9af2612650f26cceea47dc86ca048fa4e0b2d21646ad3"}, - {file = "coverage-7.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:60f64e2007c9144375dd0f480a54d6070f00bb1a28f65c408370544091c9bc9e"}, - {file = "coverage-7.3.0-pp38.pp39.pp310-none-any.whl", hash = "sha256:5492a6ce3bdb15c6ad66cb68a0244854d9917478877a25671d70378bdc8562d0"}, - {file = "coverage-7.3.0.tar.gz", hash = "sha256:49dbb19cdcafc130f597d9e04a29d0a032ceedf729e41b181f51cd170e6ee865"}, + {file = "coverage-7.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c0884920835a033b78d1c73b6d3bbcda8161a900f38a488829a83982925f6c2e"}, + {file = "coverage-7.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:39afcd3d4339329c5f58de48a52f6e4e50f6578dd6099961cf22228feb25f38f"}, + {file = "coverage-7.5.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a7b0ceee8147444347da6a66be737c9d78f3353b0681715b668b72e79203e4a"}, + {file = "coverage-7.5.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a9ca3f2fae0088c3c71d743d85404cec8df9be818a005ea065495bedc33da35"}, + {file = "coverage-7.5.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fd215c0c7d7aab005221608a3c2b46f58c0285a819565887ee0b718c052aa4e"}, + {file = "coverage-7.5.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4bf0655ab60d754491004a5efd7f9cccefcc1081a74c9ef2da4735d6ee4a6223"}, + {file = "coverage-7.5.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:61c4bf1ba021817de12b813338c9be9f0ad5b1e781b9b340a6d29fc13e7c1b5e"}, + {file = "coverage-7.5.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:db66fc317a046556a96b453a58eced5024af4582a8dbdc0c23ca4dbc0d5b3146"}, + {file = "coverage-7.5.1-cp310-cp310-win32.whl", hash = "sha256:b016ea6b959d3b9556cb401c55a37547135a587db0115635a443b2ce8f1c7228"}, + {file = "coverage-7.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:df4e745a81c110e7446b1cc8131bf986157770fa405fe90e15e850aaf7619bc8"}, + {file = "coverage-7.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:796a79f63eca8814ca3317a1ea443645c9ff0d18b188de470ed7ccd45ae79428"}, + {file = "coverage-7.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4fc84a37bfd98db31beae3c2748811a3fa72bf2007ff7902f68746d9757f3746"}, + {file = "coverage-7.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6175d1a0559986c6ee3f7fccfc4a90ecd12ba0a383dcc2da30c2b9918d67d8a3"}, + {file = "coverage-7.5.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fc81d5878cd6274ce971e0a3a18a8803c3fe25457165314271cf78e3aae3aa2"}, + {file = "coverage-7.5.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:556cf1a7cbc8028cb60e1ff0be806be2eded2daf8129b8811c63e2b9a6c43bca"}, + {file = "coverage-7.5.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9981706d300c18d8b220995ad22627647be11a4276721c10911e0e9fa44c83e8"}, + {file = "coverage-7.5.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d7fed867ee50edf1a0b4a11e8e5d0895150e572af1cd6d315d557758bfa9c057"}, + {file = "coverage-7.5.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ef48e2707fb320c8f139424a596f5b69955a85b178f15af261bab871873bb987"}, + {file = "coverage-7.5.1-cp311-cp311-win32.whl", hash = "sha256:9314d5678dcc665330df5b69c1e726a0e49b27df0461c08ca12674bcc19ef136"}, + {file = "coverage-7.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:5fa567e99765fe98f4e7d7394ce623e794d7cabb170f2ca2ac5a4174437e90dd"}, + {file = "coverage-7.5.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b6cf3764c030e5338e7f61f95bd21147963cf6aa16e09d2f74f1fa52013c1206"}, + {file = "coverage-7.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2ec92012fefebee89a6b9c79bc39051a6cb3891d562b9270ab10ecfdadbc0c34"}, + {file = "coverage-7.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16db7f26000a07efcf6aea00316f6ac57e7d9a96501e990a36f40c965ec7a95d"}, + {file = "coverage-7.5.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:beccf7b8a10b09c4ae543582c1319c6df47d78fd732f854ac68d518ee1fb97fa"}, + {file = "coverage-7.5.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8748731ad392d736cc9ccac03c9845b13bb07d020a33423fa5b3a36521ac6e4e"}, + {file = "coverage-7.5.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7352b9161b33fd0b643ccd1f21f3a3908daaddf414f1c6cb9d3a2fd618bf2572"}, + {file = "coverage-7.5.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7a588d39e0925f6a2bff87154752481273cdb1736270642aeb3635cb9b4cad07"}, + {file = "coverage-7.5.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:68f962d9b72ce69ea8621f57551b2fa9c70509af757ee3b8105d4f51b92b41a7"}, + {file = "coverage-7.5.1-cp312-cp312-win32.whl", hash = "sha256:f152cbf5b88aaeb836127d920dd0f5e7edff5a66f10c079157306c4343d86c19"}, + {file = "coverage-7.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:5a5740d1fb60ddf268a3811bcd353de34eb56dc24e8f52a7f05ee513b2d4f596"}, + {file = "coverage-7.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e2213def81a50519d7cc56ed643c9e93e0247f5bbe0d1247d15fa520814a7cd7"}, + {file = "coverage-7.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5037f8fcc2a95b1f0e80585bd9d1ec31068a9bcb157d9750a172836e98bc7a90"}, + {file = "coverage-7.5.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c3721c2c9e4c4953a41a26c14f4cef64330392a6d2d675c8b1db3b645e31f0e"}, + {file = "coverage-7.5.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca498687ca46a62ae590253fba634a1fe9836bc56f626852fb2720f334c9e4e5"}, + {file = "coverage-7.5.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0cdcbc320b14c3e5877ee79e649677cb7d89ef588852e9583e6b24c2e5072661"}, + {file = "coverage-7.5.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:57e0204b5b745594e5bc14b9b50006da722827f0b8c776949f1135677e88d0b8"}, + {file = "coverage-7.5.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8fe7502616b67b234482c3ce276ff26f39ffe88adca2acf0261df4b8454668b4"}, + {file = "coverage-7.5.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9e78295f4144f9dacfed4f92935fbe1780021247c2fabf73a819b17f0ccfff8d"}, + {file = "coverage-7.5.1-cp38-cp38-win32.whl", hash = "sha256:1434e088b41594baa71188a17533083eabf5609e8e72f16ce8c186001e6b8c41"}, + {file = "coverage-7.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:0646599e9b139988b63704d704af8e8df7fa4cbc4a1f33df69d97f36cb0a38de"}, + {file = "coverage-7.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4cc37def103a2725bc672f84bd939a6fe4522310503207aae4d56351644682f1"}, + {file = "coverage-7.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fc0b4d8bfeabd25ea75e94632f5b6e047eef8adaed0c2161ada1e922e7f7cece"}, + {file = "coverage-7.5.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d0a0f5e06881ecedfe6f3dd2f56dcb057b6dbeb3327fd32d4b12854df36bf26"}, + {file = "coverage-7.5.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9735317685ba6ec7e3754798c8871c2f49aa5e687cc794a0b1d284b2389d1bd5"}, + {file = "coverage-7.5.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d21918e9ef11edf36764b93101e2ae8cc82aa5efdc7c5a4e9c6c35a48496d601"}, + {file = "coverage-7.5.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c3e757949f268364b96ca894b4c342b41dc6f8f8b66c37878aacef5930db61be"}, + {file = "coverage-7.5.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:79afb6197e2f7f60c4824dd4b2d4c2ec5801ceb6ba9ce5d2c3080e5660d51a4f"}, + {file = "coverage-7.5.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d1d0d98d95dd18fe29dc66808e1accf59f037d5716f86a501fc0256455219668"}, + {file = "coverage-7.5.1-cp39-cp39-win32.whl", hash = "sha256:1cc0fe9b0b3a8364093c53b0b4c0c2dd4bb23acbec4c9240b5f284095ccf7981"}, + {file = "coverage-7.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:dde0070c40ea8bb3641e811c1cfbf18e265d024deff6de52c5950677a8fb1e0f"}, + {file = "coverage-7.5.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:6537e7c10cc47c595828b8a8be04c72144725c383c4702703ff4e42e44577312"}, + {file = "coverage-7.5.1.tar.gz", hash = "sha256:54de9ef3a9da981f7af93eafde4ede199e0846cd819eb27c88e2b712aae9708c"}, ] [package.dependencies] @@ -349,18 +398,19 @@ toml = ["tomli"] [[package]] name = "dill" -version = "0.3.7" +version = "0.3.8" description = "serialize all of Python" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "dill-0.3.7-py3-none-any.whl", hash = "sha256:76b122c08ef4ce2eedcd4d1abd8e641114bfc6c2867f49f3c41facf65bf19f5e"}, - {file = "dill-0.3.7.tar.gz", hash = "sha256:cc1c8b182eb3013e24bd475ff2e9295af86c1a38eb1aff128dac8962a9ce3c03"}, + {file = "dill-0.3.8-py3-none-any.whl", hash = "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7"}, + {file = "dill-0.3.8.tar.gz", hash = "sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca"}, ] [package.extras] graph = ["objgraph (>=1.7.2)"] +profile = ["gprof2dot (>=2022.7.29)"] [[package]] name = "docutils" @@ -376,14 +426,14 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.1.3" +version = "1.2.1" description = "Backport of PEP 654 (exception groups)" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, - {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, + {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, + {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, ] [package.extras] @@ -391,25 +441,23 @@ test = ["pytest (>=6)"] [[package]] name = "fastapi" -version = "0.92.0" +version = "0.109.2" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "fastapi-0.92.0-py3-none-any.whl", hash = "sha256:ae7b97c778e2f2ec3fb3cb4fb14162129411d99907fb71920f6d69a524340ebf"}, - {file = "fastapi-0.92.0.tar.gz", hash = "sha256:023a0f5bd2c8b2609014d3bba1e14a1d7df96c6abea0a73070621c9862b9a4de"}, + {file = "fastapi-0.109.2-py3-none-any.whl", hash = "sha256:2c9bab24667293b501cad8dd388c05240c850b58ec5876ee3283c47d6e1e3a4d"}, + {file = "fastapi-0.109.2.tar.gz", hash = "sha256:f3817eac96fe4f65a2ebb4baa000f394e55f5fccdaf7f75250804bc58f354f73"}, ] [package.dependencies] -pydantic = ">=1.6.2,<1.7 || >1.7,<1.7.1 || >1.7.1,<1.7.2 || >1.7.2,<1.7.3 || >1.7.3,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0" -starlette = ">=0.25.0,<0.26.0" +pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" +starlette = ">=0.36.3,<0.37.0" +typing-extensions = ">=4.8.0" [package.extras] -all = ["email-validator (>=1.1.1)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "python-multipart (>=0.0.5)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] -dev = ["pre-commit (>=2.17.0,<3.0.0)", "ruff (==0.0.138)", "uvicorn[standard] (>=0.12.0,<0.21.0)"] -doc = ["mdx-include (>=1.4.1,<2.0.0)", "mkdocs (>=1.1.2,<2.0.0)", "mkdocs-markdownextradata-plugin (>=0.1.7,<0.3.0)", "mkdocs-material (>=8.1.4,<9.0.0)", "pyyaml (>=5.3.1,<7.0.0)", "typer[all] (>=0.6.1,<0.8.0)"] -test = ["anyio[trio] (>=3.2.1,<4.0.0)", "black (==22.10.0)", "coverage[toml] (>=6.5.0,<8.0)", "databases[sqlite] (>=0.3.2,<0.7.0)", "email-validator (>=1.1.1,<2.0.0)", "flask (>=1.1.2,<3.0.0)", "httpx (>=0.23.0,<0.24.0)", "isort (>=5.0.6,<6.0.0)", "mypy (==0.982)", "orjson (>=3.2.1,<4.0.0)", "passlib[bcrypt] (>=1.7.2,<2.0.0)", "peewee (>=3.13.3,<4.0.0)", "pytest (>=7.1.3,<8.0.0)", "python-jose[cryptography] (>=3.3.0,<4.0.0)", "python-multipart (>=0.0.5,<0.0.6)", "pyyaml (>=5.3.1,<7.0.0)", "ruff (==0.0.138)", "sqlalchemy (>=1.3.18,<1.4.43)", "types-orjson (==3.6.2)", "types-ujson (==5.6.0.0)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0,<6.0.0)"] +all = ["email-validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] [[package]] name = "furo" @@ -443,47 +491,48 @@ files = [ [[package]] name = "httptools" -version = "0.6.0" +version = "0.6.1" description = "A collection of framework independent HTTP protocol utils." category = "dev" optional = false -python-versions = ">=3.5.0" -files = [ - {file = "httptools-0.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:818325afee467d483bfab1647a72054246d29f9053fd17cc4b86cda09cc60339"}, - {file = "httptools-0.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72205730bf1be875003692ca54a4a7c35fac77b4746008966061d9d41a61b0f5"}, - {file = "httptools-0.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33eb1d4e609c835966e969a31b1dedf5ba16b38cab356c2ce4f3e33ffa94cad3"}, - {file = "httptools-0.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bdc6675ec6cb79d27e0575750ac6e2b47032742e24eed011b8db73f2da9ed40"}, - {file = "httptools-0.6.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:463c3bc5ef64b9cf091be9ac0e0556199503f6e80456b790a917774a616aff6e"}, - {file = "httptools-0.6.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:82f228b88b0e8c6099a9c4757ce9fdbb8b45548074f8d0b1f0fc071e35655d1c"}, - {file = "httptools-0.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:0781fedc610293a2716bc7fa142d4c85e6776bc59d617a807ff91246a95dea35"}, - {file = "httptools-0.6.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:721e503245d591527cddd0f6fd771d156c509e831caa7a57929b55ac91ee2b51"}, - {file = "httptools-0.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:274bf20eeb41b0956e34f6a81f84d26ed57c84dd9253f13dcb7174b27ccd8aaf"}, - {file = "httptools-0.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:259920bbae18740a40236807915def554132ad70af5067e562f4660b62c59b90"}, - {file = "httptools-0.6.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03bfd2ae8a2d532952ac54445a2fb2504c804135ed28b53fefaf03d3a93eb1fd"}, - {file = "httptools-0.6.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f959e4770b3fc8ee4dbc3578fd910fab9003e093f20ac8c621452c4d62e517cb"}, - {file = "httptools-0.6.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6e22896b42b95b3237eccc42278cd72c0df6f23247d886b7ded3163452481e38"}, - {file = "httptools-0.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:38f3cafedd6aa20ae05f81f2e616ea6f92116c8a0f8dcb79dc798df3356836e2"}, - {file = "httptools-0.6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47043a6e0ea753f006a9d0dd076a8f8c99bc0ecae86a0888448eb3076c43d717"}, - {file = "httptools-0.6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35a541579bed0270d1ac10245a3e71e5beeb1903b5fbbc8d8b4d4e728d48ff1d"}, - {file = "httptools-0.6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65d802e7b2538a9756df5acc062300c160907b02e15ed15ba035b02bce43e89c"}, - {file = "httptools-0.6.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:26326e0a8fe56829f3af483200d914a7cd16d8d398d14e36888b56de30bec81a"}, - {file = "httptools-0.6.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e41ccac9e77cd045f3e4ee0fc62cbf3d54d7d4b375431eb855561f26ee7a9ec4"}, - {file = "httptools-0.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:4e748fc0d5c4a629988ef50ac1aef99dfb5e8996583a73a717fc2cac4ab89932"}, - {file = "httptools-0.6.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:cf8169e839a0d740f3d3c9c4fa630ac1a5aaf81641a34575ca6773ed7ce041a1"}, - {file = "httptools-0.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5dcc14c090ab57b35908d4a4585ec5c0715439df07be2913405991dbb37e049d"}, - {file = "httptools-0.6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d0b0571806a5168013b8c3d180d9f9d6997365a4212cb18ea20df18b938aa0b"}, - {file = "httptools-0.6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fb4a608c631f7dcbdf986f40af7a030521a10ba6bc3d36b28c1dc9e9035a3c0"}, - {file = "httptools-0.6.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:93f89975465133619aea8b1952bc6fa0e6bad22a447c6d982fc338fbb4c89649"}, - {file = "httptools-0.6.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:73e9d66a5a28b2d5d9fbd9e197a31edd02be310186db423b28e6052472dc8201"}, - {file = "httptools-0.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:22c01fcd53648162730a71c42842f73b50f989daae36534c818b3f5050b54589"}, - {file = "httptools-0.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f96d2a351b5625a9fd9133c95744e8ca06f7a4f8f0b8231e4bbaae2c485046a"}, - {file = "httptools-0.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:72ec7c70bd9f95ef1083d14a755f321d181f046ca685b6358676737a5fecd26a"}, - {file = "httptools-0.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b703d15dbe082cc23266bf5d9448e764c7cb3fcfe7cb358d79d3fd8248673ef9"}, - {file = "httptools-0.6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82c723ed5982f8ead00f8e7605c53e55ffe47c47465d878305ebe0082b6a1755"}, - {file = "httptools-0.6.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b0a816bb425c116a160fbc6f34cece097fd22ece15059d68932af686520966bd"}, - {file = "httptools-0.6.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:dea66d94e5a3f68c5e9d86e0894653b87d952e624845e0b0e3ad1c733c6cc75d"}, - {file = "httptools-0.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:23b09537086a5a611fad5696fc8963d67c7e7f98cb329d38ee114d588b0b74cd"}, - {file = "httptools-0.6.0.tar.gz", hash = "sha256:9fc6e409ad38cbd68b177cd5158fc4042c796b82ca88d99ec78f07bed6c6b796"}, +python-versions = ">=3.8.0" +files = [ + {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d2f6c3c4cb1948d912538217838f6e9960bc4a521d7f9b323b3da579cd14532f"}, + {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:00d5d4b68a717765b1fabfd9ca755bd12bf44105eeb806c03d1962acd9b8e563"}, + {file = "httptools-0.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:639dc4f381a870c9ec860ce5c45921db50205a37cc3334e756269736ff0aac58"}, + {file = "httptools-0.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e57997ac7fb7ee43140cc03664de5f268813a481dff6245e0075925adc6aa185"}, + {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0ac5a0ae3d9f4fe004318d64b8a854edd85ab76cffbf7ef5e32920faef62f142"}, + {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3f30d3ce413088a98b9db71c60a6ada2001a08945cb42dd65a9a9fe228627658"}, + {file = "httptools-0.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:1ed99a373e327f0107cb513b61820102ee4f3675656a37a50083eda05dc9541b"}, + {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7a7ea483c1a4485c71cb5f38be9db078f8b0e8b4c4dc0210f531cdd2ddac1ef1"}, + {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:85ed077c995e942b6f1b07583e4eb0a8d324d418954fc6af913d36db7c05a5a0"}, + {file = "httptools-0.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b0bb634338334385351a1600a73e558ce619af390c2b38386206ac6a27fecfc"}, + {file = "httptools-0.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d9ceb2c957320def533671fc9c715a80c47025139c8d1f3797477decbc6edd2"}, + {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4f0f8271c0a4db459f9dc807acd0eadd4839934a4b9b892f6f160e94da309837"}, + {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6a4f5ccead6d18ec072ac0b84420e95d27c1cdf5c9f1bc8fbd8daf86bd94f43d"}, + {file = "httptools-0.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:5cceac09f164bcba55c0500a18fe3c47df29b62353198e4f37bbcc5d591172c3"}, + {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:75c8022dca7935cba14741a42744eee13ba05db00b27a4b940f0d646bd4d56d0"}, + {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:48ed8129cd9a0d62cf4d1575fcf90fb37e3ff7d5654d3a5814eb3d55f36478c2"}, + {file = "httptools-0.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f58e335a1402fb5a650e271e8c2d03cfa7cea46ae124649346d17bd30d59c90"}, + {file = "httptools-0.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93ad80d7176aa5788902f207a4e79885f0576134695dfb0fefc15b7a4648d503"}, + {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9bb68d3a085c2174c2477eb3ffe84ae9fb4fde8792edb7bcd09a1d8467e30a84"}, + {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b512aa728bc02354e5ac086ce76c3ce635b62f5fbc32ab7082b5e582d27867bb"}, + {file = "httptools-0.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:97662ce7fb196c785344d00d638fc9ad69e18ee4bfb4000b35a52efe5adcc949"}, + {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8e216a038d2d52ea13fdd9b9c9c7459fb80d78302b257828285eca1c773b99b3"}, + {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3e802e0b2378ade99cd666b5bffb8b2a7cc8f3d28988685dc300469ea8dd86cb"}, + {file = "httptools-0.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bd3e488b447046e386a30f07af05f9b38d3d368d1f7b4d8f7e10af85393db97"}, + {file = "httptools-0.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe467eb086d80217b7584e61313ebadc8d187a4d95bb62031b7bab4b205c3ba3"}, + {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3c3b214ce057c54675b00108ac42bacf2ab8f85c58e3f324a4e963bbc46424f4"}, + {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8ae5b97f690badd2ca27cbf668494ee1b6d34cf1c464271ef7bfa9ca6b83ffaf"}, + {file = "httptools-0.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:405784577ba6540fa7d6ff49e37daf104e04f4b4ff2d1ac0469eaa6a20fde084"}, + {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:95fb92dd3649f9cb139e9c56604cc2d7c7bf0fc2e7c8d7fbd58f96e35eddd2a3"}, + {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dcbab042cc3ef272adc11220517278519adf8f53fd3056d0e68f0a6f891ba94e"}, + {file = "httptools-0.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cf2372e98406efb42e93bfe10f2948e467edfd792b015f1b4ecd897903d3e8d"}, + {file = "httptools-0.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:678fcbae74477a17d103b7cae78b74800d795d702083867ce160fc202104d0da"}, + {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e0b281cf5a125c35f7f6722b65d8542d2e57331be573e9e88bc8b0115c4a7a81"}, + {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:95658c342529bba4e1d3d2b1a874db16c7cca435e8827422154c9da76ac4e13a"}, + {file = "httptools-0.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:7ebaec1bf683e4bf5e9fbb49b8cc36da482033596a415b3e4ebab5a4c0d7ec5e"}, + {file = "httptools-0.6.1.tar.gz", hash = "sha256:c6e26c30455600b95d94b1b836085138e82f177351454ee841c148f93a9bad5a"}, ] [package.extras] @@ -491,14 +540,14 @@ test = ["Cython (>=0.29.24,<0.30.0)"] [[package]] name = "idna" -version = "3.4" +version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" category = "main" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, + {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, + {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, ] [[package]] @@ -547,32 +596,29 @@ files = [ [[package]] name = "isort" -version = "5.12.0" +version = "5.13.2" description = "A Python utility / library to sort Python imports." category = "dev" optional = false 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"}, + {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"}, + {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"}, ] [package.extras] -colors = ["colorama (>=0.4.3)"] -pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] -plugins = ["setuptools"] -requirements-deprecated-finder = ["pip-api", "pipreqs"] +colors = ["colorama (>=0.4.6)"] [[package]] name = "jinja2" -version = "3.1.2" +version = "3.1.4" description = "A very fast and expressive template engine." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, + {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, + {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, ] [package.dependencies] @@ -583,48 +629,49 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "lazy-object-proxy" -version = "1.9.0" +version = "1.10.0" description = "A fast and thorough lazy object proxy." category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" 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"}, + {file = "lazy-object-proxy-1.10.0.tar.gz", hash = "sha256:78247b6d45f43a52ef35c25b5581459e85117225408a4128a3daf8bf9648ac69"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:855e068b0358ab916454464a884779c7ffa312b8925c6f7401e952dcf3b89977"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab7004cf2e59f7c2e4345604a3e6ea0d92ac44e1c2375527d56492014e690c3"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc0d2fc424e54c70c4bc06787e4072c4f3b1aa2f897dfdc34ce1013cf3ceef05"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e2adb09778797da09d2b5ebdbceebf7dd32e2c96f79da9052b2e87b6ea495895"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1f711e2c6dcd4edd372cf5dec5c5a30d23bba06ee012093267b3376c079ec83"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-win32.whl", hash = "sha256:76a095cfe6045c7d0ca77db9934e8f7b71b14645f0094ffcd842349ada5c5fb9"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:b4f87d4ed9064b2628da63830986c3d2dca7501e6018347798313fcf028e2fd4"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fec03caabbc6b59ea4a638bee5fce7117be8e99a4103d9d5ad77f15d6f81020c"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02c83f957782cbbe8136bee26416686a6ae998c7b6191711a04da776dc9e47d4"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:009e6bb1f1935a62889ddc8541514b6a9e1fcf302667dcb049a0be5c8f613e56"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:75fc59fc450050b1b3c203c35020bc41bd2695ed692a392924c6ce180c6f1dc9"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:782e2c9b2aab1708ffb07d4bf377d12901d7a1d99e5e410d648d892f8967ab1f"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-win32.whl", hash = "sha256:edb45bb8278574710e68a6b021599a10ce730d156e5b254941754a9cc0b17d03"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:e271058822765ad5e3bca7f05f2ace0de58a3f4e62045a8c90a0dfd2f8ad8cc6"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e98c8af98d5707dcdecc9ab0863c0ea6e88545d42ca7c3feffb6b4d1e370c7ba"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:952c81d415b9b80ea261d2372d2a4a2332a3890c2b83e0535f263ddfe43f0d43"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80b39d3a151309efc8cc48675918891b865bdf742a8616a337cb0090791a0de9"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e221060b701e2aa2ea991542900dd13907a5c90fa80e199dbf5a03359019e7a3"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:92f09ff65ecff3108e56526f9e2481b8116c0b9e1425325e13245abfd79bdb1b"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-win32.whl", hash = "sha256:3ad54b9ddbe20ae9f7c1b29e52f123120772b06dbb18ec6be9101369d63a4074"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:127a789c75151db6af398b8972178afe6bda7d6f68730c057fbbc2e96b08d282"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9e4ed0518a14dd26092614412936920ad081a424bdcb54cc13349a8e2c6d106a"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ad9e6ed739285919aa9661a5bbed0aaf410aa60231373c5579c6b4801bd883c"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fc0a92c02fa1ca1e84fc60fa258458e5bf89d90a1ddaeb8ed9cc3147f417255"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0aefc7591920bbd360d57ea03c995cebc204b424524a5bd78406f6e1b8b2a5d8"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5faf03a7d8942bb4476e3b62fd0f4cf94eaf4618e304a19865abf89a35c0bbee"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-win32.whl", hash = "sha256:e333e2324307a7b5d86adfa835bb500ee70bfcd1447384a822e96495796b0ca4"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:cb73507defd385b7705c599a94474b1d5222a508e502553ef94114a143ec6696"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:366c32fe5355ef5fc8a232c5436f4cc66e9d3e8967c01fb2e6302fd6627e3d94"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2297f08f08a2bb0d32a4265e98a006643cd7233fb7983032bd61ac7a02956b3b"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18dd842b49456aaa9a7cf535b04ca4571a302ff72ed8740d06b5adcd41fe0757"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:217138197c170a2a74ca0e05bddcd5f1796c735c37d0eee33e43259b192aa424"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9a3a87cf1e133e5b1994144c12ca4aa3d9698517fe1e2ca82977781b16955658"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-win32.whl", hash = "sha256:30b339b2a743c5288405aa79a69e706a06e02958eab31859f7f3c04980853b70"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:a899b10e17743683b293a729d3a11f2f399e8a90c73b089e29f5d0fe3509f0dd"}, + {file = "lazy_object_proxy-1.10.0-pp310.pp311.pp312.pp38.pp39-none-any.whl", hash = "sha256:80fa48bd89c8f2f456fc0765c11c23bf5af827febacd2f523ca5bc1893fcc09d"}, ] [[package]] @@ -654,62 +701,72 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "markupsafe" -version = "2.1.3" +version = "2.1.5" description = "Safely add untrusted strings to HTML/XML markup." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, - {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, + {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, ] [[package]] @@ -758,123 +815,139 @@ files = [ [[package]] name = "multidict" -version = "6.0.4" +version = "6.0.5" description = "multidict implementation" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"}, - {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"}, - {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5"}, - {file = "multidict-6.0.4-cp310-cp310-win32.whl", hash = "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8"}, - {file = "multidict-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461"}, - {file = "multidict-6.0.4-cp311-cp311-win32.whl", hash = "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636"}, - {file = "multidict-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0"}, - {file = "multidict-6.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d"}, - {file = "multidict-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775"}, - {file = "multidict-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1"}, - {file = "multidict-6.0.4-cp38-cp38-win32.whl", hash = "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779"}, - {file = "multidict-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95"}, - {file = "multidict-6.0.4-cp39-cp39-win32.whl", hash = "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313"}, - {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"}, - {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, + {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:228b644ae063c10e7f324ab1ab6b548bdf6f8b47f3ec234fef1093bc2735e5f9"}, + {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:896ebdcf62683551312c30e20614305f53125750803b614e9e6ce74a96232604"}, + {file = "multidict-6.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:411bf8515f3be9813d06004cac41ccf7d1cd46dfe233705933dd163b60e37600"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d147090048129ce3c453f0292e7697d333db95e52616b3793922945804a433c"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:215ed703caf15f578dca76ee6f6b21b7603791ae090fbf1ef9d865571039ade5"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c6390cf87ff6234643428991b7359b5f59cc15155695deb4eda5c777d2b880f"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fd81c4ebdb4f214161be351eb5bcf385426bf023041da2fd9e60681f3cebae"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3cc2ad10255f903656017363cd59436f2111443a76f996584d1077e43ee51182"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6939c95381e003f54cd4c5516740faba40cf5ad3eeff460c3ad1d3e0ea2549bf"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:220dd781e3f7af2c2c1053da9fa96d9cf3072ca58f057f4c5adaaa1cab8fc442"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:766c8f7511df26d9f11cd3a8be623e59cca73d44643abab3f8c8c07620524e4a"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:fe5d7785250541f7f5019ab9cba2c71169dc7d74d0f45253f8313f436458a4ef"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1c1496e73051918fcd4f58ff2e0f2f3066d1c76a0c6aeffd9b45d53243702cc"}, + {file = "multidict-6.0.5-cp310-cp310-win32.whl", hash = "sha256:7afcdd1fc07befad18ec4523a782cde4e93e0a2bf71239894b8d61ee578c1319"}, + {file = "multidict-6.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:99f60d34c048c5c2fabc766108c103612344c46e35d4ed9ae0673d33c8fb26e8"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f285e862d2f153a70586579c15c44656f888806ed0e5b56b64489afe4a2dbfba"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:53689bb4e102200a4fafa9de9c7c3c212ab40a7ab2c8e474491914d2305f187e"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:612d1156111ae11d14afaf3a0669ebf6c170dbb735e510a7438ffe2369a847fd"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7be7047bd08accdb7487737631d25735c9a04327911de89ff1b26b81745bd4e3"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de170c7b4fe6859beb8926e84f7d7d6c693dfe8e27372ce3b76f01c46e489fcf"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04bde7a7b3de05732a4eb39c94574db1ec99abb56162d6c520ad26f83267de29"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85f67aed7bb647f93e7520633d8f51d3cbc6ab96957c71272b286b2f30dc70ed"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425bf820055005bfc8aa9a0b99ccb52cc2f4070153e34b701acc98d201693733"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d3eb1ceec286eba8220c26f3b0096cf189aea7057b6e7b7a2e60ed36b373b77f"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7901c05ead4b3fb75113fb1dd33eb1253c6d3ee37ce93305acd9d38e0b5f21a4"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e0e79d91e71b9867c73323a3444724d496c037e578a0e1755ae159ba14f4f3d1"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:29bfeb0dff5cb5fdab2023a7a9947b3b4af63e9c47cae2a10ad58394b517fddc"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e030047e85cbcedbfc073f71836d62dd5dadfbe7531cae27789ff66bc551bd5e"}, + {file = "multidict-6.0.5-cp311-cp311-win32.whl", hash = "sha256:2f4848aa3baa109e6ab81fe2006c77ed4d3cd1e0ac2c1fbddb7b1277c168788c"}, + {file = "multidict-6.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:2faa5ae9376faba05f630d7e5e6be05be22913782b927b19d12b8145968a85ea"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:51d035609b86722963404f711db441cf7134f1889107fb171a970c9701f92e1e"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cbebcd5bcaf1eaf302617c114aa67569dd3f090dd0ce8ba9e35e9985b41ac35b"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2ffc42c922dbfddb4a4c3b438eb056828719f07608af27d163191cb3e3aa6cc5"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ceb3b7e6a0135e092de86110c5a74e46bda4bd4fbfeeb3a3bcec79c0f861e450"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:79660376075cfd4b2c80f295528aa6beb2058fd289f4c9252f986751a4cd0496"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4428b29611e989719874670fd152b6625500ad6c686d464e99f5aaeeaca175a"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d84a5c3a5f7ce6db1f999fb9438f686bc2e09d38143f2d93d8406ed2dd6b9226"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76c0de87358b192de7ea9649beb392f107dcad9ad27276324c24c91774ca5271"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:79a6d2ba910adb2cbafc95dad936f8b9386e77c84c35bc0add315b856d7c3abb"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:92d16a3e275e38293623ebf639c471d3e03bb20b8ebb845237e0d3664914caef"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:fb616be3538599e797a2017cccca78e354c767165e8858ab5116813146041a24"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:14c2976aa9038c2629efa2c148022ed5eb4cb939e15ec7aace7ca932f48f9ba6"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:435a0984199d81ca178b9ae2c26ec3d49692d20ee29bc4c11a2a8d4514c67eda"}, + {file = "multidict-6.0.5-cp312-cp312-win32.whl", hash = "sha256:9fe7b0653ba3d9d65cbe7698cca585bf0f8c83dbbcc710db9c90f478e175f2d5"}, + {file = "multidict-6.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:01265f5e40f5a17f8241d52656ed27192be03bfa8764d88e8220141d1e4b3556"}, + {file = "multidict-6.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:19fe01cea168585ba0f678cad6f58133db2aa14eccaf22f88e4a6dccadfad8b3"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf7a982604375a8d49b6cc1b781c1747f243d91b81035a9b43a2126c04766f5"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:107c0cdefe028703fb5dafe640a409cb146d44a6ae201e55b35a4af8e95457dd"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:403c0911cd5d5791605808b942c88a8155c2592e05332d2bf78f18697a5fa15e"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aeaf541ddbad8311a87dd695ed9642401131ea39ad7bc8cf3ef3967fd093b626"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4972624066095e52b569e02b5ca97dbd7a7ddd4294bf4e7247d52635630dd83"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d946b0a9eb8aaa590df1fe082cee553ceab173e6cb5b03239716338629c50c7a"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b55358304d7a73d7bdf5de62494aaf70bd33015831ffd98bc498b433dfe5b10c"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a3145cb08d8625b2d3fee1b2d596a8766352979c9bffe5d7833e0503d0f0b5e5"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d65f25da8e248202bd47445cec78e0025c0fe7582b23ec69c3b27a640dd7a8e3"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c9bf56195c6bbd293340ea82eafd0071cb3d450c703d2c93afb89f93b8386ccc"}, + {file = "multidict-6.0.5-cp37-cp37m-win32.whl", hash = "sha256:69db76c09796b313331bb7048229e3bee7928eb62bab5e071e9f7fcc4879caee"}, + {file = "multidict-6.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:fce28b3c8a81b6b36dfac9feb1de115bab619b3c13905b419ec71d03a3fc1423"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:76f067f5121dcecf0d63a67f29080b26c43c71a98b10c701b0677e4a065fbd54"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b82cc8ace10ab5bd93235dfaab2021c70637005e1ac787031f4d1da63d493c1d"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5cb241881eefd96b46f89b1a056187ea8e9ba14ab88ba632e68d7a2ecb7aadf7"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8e94e6912639a02ce173341ff62cc1201232ab86b8a8fcc05572741a5dc7d93"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09a892e4a9fb47331da06948690ae38eaa2426de97b4ccbfafbdcbe5c8f37ff8"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55205d03e8a598cfc688c71ca8ea5f66447164efff8869517f175ea632c7cb7b"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37b15024f864916b4951adb95d3a80c9431299080341ab9544ed148091b53f50"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2a1dee728b52b33eebff5072817176c172050d44d67befd681609b4746e1c2e"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:edd08e6f2f1a390bf137080507e44ccc086353c8e98c657e666c017718561b89"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:60d698e8179a42ec85172d12f50b1668254628425a6bd611aba022257cac1386"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:3d25f19500588cbc47dc19081d78131c32637c25804df8414463ec908631e453"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4cc0ef8b962ac7a5e62b9e826bd0cd5040e7d401bc45a6835910ed699037a461"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:eca2e9d0cc5a889850e9bbd68e98314ada174ff6ccd1129500103df7a94a7a44"}, + {file = "multidict-6.0.5-cp38-cp38-win32.whl", hash = "sha256:4a6a4f196f08c58c59e0b8ef8ec441d12aee4125a7d4f4fef000ccb22f8d7241"}, + {file = "multidict-6.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:0275e35209c27a3f7951e1ce7aaf93ce0d163b28948444bec61dd7badc6d3f8c"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e7be68734bd8c9a513f2b0cfd508802d6609da068f40dc57d4e3494cefc92929"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1d9ea7a7e779d7a3561aade7d596649fbecfa5c08a7674b11b423783217933f9"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ea1456df2a27c73ce51120fa2f519f1bea2f4a03a917f4a43c8707cf4cbbae1a"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf590b134eb70629e350691ecca88eac3e3b8b3c86992042fb82e3cb1830d5e1"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5c0631926c4f58e9a5ccce555ad7747d9a9f8b10619621f22f9635f069f6233e"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dce1c6912ab9ff5f179eaf6efe7365c1f425ed690b03341911bf4939ef2f3046"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0868d64af83169e4d4152ec612637a543f7a336e4a307b119e98042e852ad9c"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:141b43360bfd3bdd75f15ed811850763555a251e38b2405967f8e25fb43f7d40"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7df704ca8cf4a073334e0427ae2345323613e4df18cc224f647f251e5e75a527"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6214c5a5571802c33f80e6c84713b2c79e024995b9c5897f794b43e714daeec9"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:cd6c8fca38178e12c00418de737aef1261576bd1b6e8c6134d3e729a4e858b38"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e02021f87a5b6932fa6ce916ca004c4d441509d33bbdbeca70d05dff5e9d2479"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ebd8d160f91a764652d3e51ce0d2956b38efe37c9231cd82cfc0bed2e40b581c"}, + {file = "multidict-6.0.5-cp39-cp39-win32.whl", hash = "sha256:04da1bb8c8dbadf2a18a452639771951c662c5ad03aefe4884775454be322c9b"}, + {file = "multidict-6.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:d6f6d4f185481c9669b9447bf9d9cf3b95a0e9df9d169bbc17e363b7d5487755"}, + {file = "multidict-6.0.5-py3-none-any.whl", hash = "sha256:0d63c74e3d7ab26de115c49bffc92cc77ed23395303d496eae515d4204a625e7"}, + {file = "multidict-6.0.5.tar.gz", hash = "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da"}, ] [[package]] name = "mypy" -version = "1.5.1" +version = "1.10.0" description = "Optional static typing for Python" category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f33592ddf9655a4894aef22d134de7393e95fcbdc2d15c1ab65828eee5c66c70"}, - {file = "mypy-1.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:258b22210a4a258ccd077426c7a181d789d1121aca6db73a83f79372f5569ae0"}, - {file = "mypy-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9ec1f695f0c25986e6f7f8778e5ce61659063268836a38c951200c57479cc12"}, - {file = "mypy-1.5.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:abed92d9c8f08643c7d831300b739562b0a6c9fcb028d211134fc9ab20ccad5d"}, - {file = "mypy-1.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:a156e6390944c265eb56afa67c74c0636f10283429171018446b732f1a05af25"}, - {file = "mypy-1.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6ac9c21bfe7bc9f7f1b6fae441746e6a106e48fc9de530dea29e8cd37a2c0cc4"}, - {file = "mypy-1.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:51cb1323064b1099e177098cb939eab2da42fea5d818d40113957ec954fc85f4"}, - {file = "mypy-1.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:596fae69f2bfcb7305808c75c00f81fe2829b6236eadda536f00610ac5ec2243"}, - {file = "mypy-1.5.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:32cb59609b0534f0bd67faebb6e022fe534bdb0e2ecab4290d683d248be1b275"}, - {file = "mypy-1.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:159aa9acb16086b79bbb0016145034a1a05360626046a929f84579ce1666b315"}, - {file = "mypy-1.5.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f6b0e77db9ff4fda74de7df13f30016a0a663928d669c9f2c057048ba44f09bb"}, - {file = "mypy-1.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:26f71b535dfc158a71264e6dc805a9f8d2e60b67215ca0bfa26e2e1aa4d4d373"}, - {file = "mypy-1.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fc3a600f749b1008cc75e02b6fb3d4db8dbcca2d733030fe7a3b3502902f161"}, - {file = "mypy-1.5.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:26fb32e4d4afa205b24bf645eddfbb36a1e17e995c5c99d6d00edb24b693406a"}, - {file = "mypy-1.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:82cb6193de9bbb3844bab4c7cf80e6227d5225cc7625b068a06d005d861ad5f1"}, - {file = "mypy-1.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4a465ea2ca12804d5b34bb056be3a29dc47aea5973b892d0417c6a10a40b2d65"}, - {file = "mypy-1.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9fece120dbb041771a63eb95e4896791386fe287fefb2837258925b8326d6160"}, - {file = "mypy-1.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d28ddc3e3dfeab553e743e532fb95b4e6afad51d4706dd22f28e1e5e664828d2"}, - {file = "mypy-1.5.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:57b10c56016adce71fba6bc6e9fd45d8083f74361f629390c556738565af8eeb"}, - {file = "mypy-1.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:ff0cedc84184115202475bbb46dd99f8dcb87fe24d5d0ddfc0fe6b8575c88d2f"}, - {file = "mypy-1.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8f772942d372c8cbac575be99f9cc9d9fb3bd95c8bc2de6c01411e2c84ebca8a"}, - {file = "mypy-1.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5d627124700b92b6bbaa99f27cbe615c8ea7b3402960f6372ea7d65faf376c14"}, - {file = "mypy-1.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:361da43c4f5a96173220eb53340ace68cda81845cd88218f8862dfb0adc8cddb"}, - {file = "mypy-1.5.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:330857f9507c24de5c5724235e66858f8364a0693894342485e543f5b07c8693"}, - {file = "mypy-1.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:c543214ffdd422623e9fedd0869166c2f16affe4ba37463975043ef7d2ea8770"}, - {file = "mypy-1.5.1-py3-none-any.whl", hash = "sha256:f757063a83970d67c444f6e01d9550a7402322af3557ce7630d3c957386fa8f5"}, - {file = "mypy-1.5.1.tar.gz", hash = "sha256:b031b9601f1060bf1281feab89697324726ba0c0bae9d7cd7ab4b690940f0b92"}, + {file = "mypy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da1cbf08fb3b851ab3b9523a884c232774008267b1f83371ace57f412fe308c2"}, + {file = "mypy-1.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:12b6bfc1b1a66095ab413160a6e520e1dc076a28f3e22f7fb25ba3b000b4ef99"}, + {file = "mypy-1.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e36fb078cce9904c7989b9693e41cb9711e0600139ce3970c6ef814b6ebc2b2"}, + {file = "mypy-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2b0695d605ddcd3eb2f736cd8b4e388288c21e7de85001e9f85df9187f2b50f9"}, + {file = "mypy-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:cd777b780312ddb135bceb9bc8722a73ec95e042f911cc279e2ec3c667076051"}, + {file = "mypy-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3be66771aa5c97602f382230165b856c231d1277c511c9a8dd058be4784472e1"}, + {file = "mypy-1.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8b2cbaca148d0754a54d44121b5825ae71868c7592a53b7292eeb0f3fdae95ee"}, + {file = "mypy-1.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ec404a7cbe9fc0e92cb0e67f55ce0c025014e26d33e54d9e506a0f2d07fe5de"}, + {file = "mypy-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e22e1527dc3d4aa94311d246b59e47f6455b8729f4968765ac1eacf9a4760bc7"}, + {file = "mypy-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:a87dbfa85971e8d59c9cc1fcf534efe664d8949e4c0b6b44e8ca548e746a8d53"}, + {file = "mypy-1.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a781f6ad4bab20eef8b65174a57e5203f4be627b46291f4589879bf4e257b97b"}, + {file = "mypy-1.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b808e12113505b97d9023b0b5e0c0705a90571c6feefc6f215c1df9381256e30"}, + {file = "mypy-1.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f55583b12156c399dce2df7d16f8a5095291354f1e839c252ec6c0611e86e2e"}, + {file = "mypy-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cf18f9d0efa1b16478c4c129eabec36148032575391095f73cae2e722fcf9d5"}, + {file = "mypy-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:bc6ac273b23c6b82da3bb25f4136c4fd42665f17f2cd850771cb600bdd2ebeda"}, + {file = "mypy-1.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9fd50226364cd2737351c79807775136b0abe084433b55b2e29181a4c3c878c0"}, + {file = "mypy-1.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f90cff89eea89273727d8783fef5d4a934be2fdca11b47def50cf5d311aff727"}, + {file = "mypy-1.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fcfc70599efde5c67862a07a1aaf50e55bce629ace26bb19dc17cece5dd31ca4"}, + {file = "mypy-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:075cbf81f3e134eadaf247de187bd604748171d6b79736fa9b6c9685b4083061"}, + {file = "mypy-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:3f298531bca95ff615b6e9f2fc0333aae27fa48052903a0ac90215021cdcfa4f"}, + {file = "mypy-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa7ef5244615a2523b56c034becde4e9e3f9b034854c93639adb667ec9ec2976"}, + {file = "mypy-1.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3236a4c8f535a0631f85f5fcdffba71c7feeef76a6002fcba7c1a8e57c8be1ec"}, + {file = "mypy-1.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a2b5cdbb5dd35aa08ea9114436e0d79aceb2f38e32c21684dcf8e24e1e92821"}, + {file = "mypy-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92f93b21c0fe73dc00abf91022234c79d793318b8a96faac147cd579c1671746"}, + {file = "mypy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:28d0e038361b45f099cc086d9dd99c15ff14d0188f44ac883010e172ce86c38a"}, + {file = "mypy-1.10.0-py3-none-any.whl", hash = "sha256:f8c083976eb530019175aabadb60921e73b4f45736760826aa1689dda8208aee"}, + {file = "mypy-1.10.0.tar.gz", hash = "sha256:3d087fcbec056c4ee34974da493a826ce316947485cef3901f511848e687c131"}, ] [package.dependencies] @@ -885,6 +958,7 @@ typing-extensions = ">=4.1.0" [package.extras] dmypy = ["psutil (>=4.0)"] install-types = ["pip"] +mypyc = ["setuptools (>=50)"] reports = ["lxml"] [[package]] @@ -966,14 +1040,14 @@ files = [ [[package]] name = "packaging" -version = "23.1" +version = "24.0" description = "Core utilities for Python packages" category = "dev" optional = false 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"}, + {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, + {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, ] [[package]] @@ -1027,42 +1101,43 @@ test = ["hypothesis (>=5.5.3)", "pytest (>=6.0)", "pytest-xdist (>=1.31)"] [[package]] name = "pathspec" -version = "0.11.2" +version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, - {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, ] [[package]] name = "platformdirs" -version = "3.10.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +version = "4.2.1" +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" +python-versions = ">=3.8" files = [ - {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, - {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, + {file = "platformdirs-4.2.1-py3-none-any.whl", hash = "sha256:17d5a1161b3fd67b390023cb2d3b026bbd40abde6fdb052dfbd3a29c3ba22ee1"}, + {file = "platformdirs-4.2.1.tar.gz", hash = "sha256:031cd18d4ec63ec53e82dceaac0417d218a6863f7745dfcc9efe7793b7039bdf"}, ] [package.extras] -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)"] +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)"] [[package]] name = "pluggy" -version = "1.2.0" +version = "1.5.0" description = "plugin and hook calling mechanisms for python" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, - {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, ] [package.extras] @@ -1071,37 +1146,48 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "pyarrow" -version = "10.0.1" +version = "14.0.2" description = "Python library for Apache Arrow" category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pyarrow-10.0.1-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:e00174764a8b4e9d8d5909b6d19ee0c217a6cf0232c5682e31fdfbd5a9f0ae52"}, - {file = "pyarrow-10.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6f7a7dbe2f7f65ac1d0bd3163f756deb478a9e9afc2269557ed75b1b25ab3610"}, - {file = "pyarrow-10.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb627673cb98708ef00864e2e243f51ba7b4c1b9f07a1d821f98043eccd3f585"}, - {file = "pyarrow-10.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba71e6fc348c92477586424566110d332f60d9a35cb85278f42e3473bc1373da"}, - {file = "pyarrow-10.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:7b4ede715c004b6fc535de63ef79fa29740b4080639a5ff1ea9ca84e9282f349"}, - {file = "pyarrow-10.0.1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:e3fe5049d2e9ca661d8e43fab6ad5a4c571af12d20a57dffc392a014caebef65"}, - {file = "pyarrow-10.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:254017ca43c45c5098b7f2a00e995e1f8346b0fb0be225f042838323bb55283c"}, - {file = "pyarrow-10.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70acca1ece4322705652f48db65145b5028f2c01c7e426c5d16a30ba5d739c24"}, - {file = "pyarrow-10.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abb57334f2c57979a49b7be2792c31c23430ca02d24becd0b511cbe7b6b08649"}, - {file = "pyarrow-10.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:1765a18205eb1e02ccdedb66049b0ec148c2a0cb52ed1fb3aac322dfc086a6ee"}, - {file = "pyarrow-10.0.1-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:61f4c37d82fe00d855d0ab522c685262bdeafd3fbcb5fe596fe15025fbc7341b"}, - {file = "pyarrow-10.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e141a65705ac98fa52a9113fe574fdaf87fe0316cde2dffe6b94841d3c61544c"}, - {file = "pyarrow-10.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf26f809926a9d74e02d76593026f0aaeac48a65b64f1bb17eed9964bfe7ae1a"}, - {file = "pyarrow-10.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:443eb9409b0cf78df10ced326490e1a300205a458fbeb0767b6b31ab3ebae6b2"}, - {file = "pyarrow-10.0.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:f2d00aa481becf57098e85d99e34a25dba5a9ade2f44eb0b7d80c80f2984fc03"}, - {file = "pyarrow-10.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b1fc226d28c7783b52a84d03a66573d5a22e63f8a24b841d5fc68caeed6784d4"}, - {file = "pyarrow-10.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efa59933b20183c1c13efc34bd91efc6b2997377c4c6ad9272da92d224e3beb1"}, - {file = "pyarrow-10.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:668e00e3b19f183394388a687d29c443eb000fb3fe25599c9b4762a0afd37775"}, - {file = "pyarrow-10.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1bc6e4d5d6f69e0861d5d7f6cf4d061cf1069cb9d490040129877acf16d4c2a"}, - {file = "pyarrow-10.0.1-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:42ba7c5347ce665338f2bc64685d74855900200dac81a972d49fe127e8132f75"}, - {file = "pyarrow-10.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b069602eb1fc09f1adec0a7bdd7897f4d25575611dfa43543c8b8a75d99d6874"}, - {file = "pyarrow-10.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94fb4a0c12a2ac1ed8e7e2aa52aade833772cf2d3de9dde685401b22cec30002"}, - {file = "pyarrow-10.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db0c5986bf0808927f49640582d2032a07aa49828f14e51f362075f03747d198"}, - {file = "pyarrow-10.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:0ec7587d759153f452d5263dbc8b1af318c4609b607be2bd5127dcda6708cdb1"}, - {file = "pyarrow-10.0.1.tar.gz", hash = "sha256:1a14f57a5f472ce8234f2964cd5184cccaa8df7e04568c64edc33b23eb285dd5"}, + {file = "pyarrow-14.0.2-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:ba9fe808596c5dbd08b3aeffe901e5f81095baaa28e7d5118e01354c64f22807"}, + {file = "pyarrow-14.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:22a768987a16bb46220cef490c56c671993fbee8fd0475febac0b3e16b00a10e"}, + {file = "pyarrow-14.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dbba05e98f247f17e64303eb876f4a80fcd32f73c7e9ad975a83834d81f3fda"}, + {file = "pyarrow-14.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a898d134d00b1eca04998e9d286e19653f9d0fcb99587310cd10270907452a6b"}, + {file = "pyarrow-14.0.2-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:87e879323f256cb04267bb365add7208f302df942eb943c93a9dfeb8f44840b1"}, + {file = "pyarrow-14.0.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:76fc257559404ea5f1306ea9a3ff0541bf996ff3f7b9209fc517b5e83811fa8e"}, + {file = "pyarrow-14.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:b0c4a18e00f3a32398a7f31da47fefcd7a927545b396e1f15d0c85c2f2c778cd"}, + {file = "pyarrow-14.0.2-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:87482af32e5a0c0cce2d12eb3c039dd1d853bd905b04f3f953f147c7a196915b"}, + {file = "pyarrow-14.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:059bd8f12a70519e46cd64e1ba40e97eae55e0cbe1695edd95384653d7626b23"}, + {file = "pyarrow-14.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f16111f9ab27e60b391c5f6d197510e3ad6654e73857b4e394861fc79c37200"}, + {file = "pyarrow-14.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06ff1264fe4448e8d02073f5ce45a9f934c0f3db0a04460d0b01ff28befc3696"}, + {file = "pyarrow-14.0.2-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:6dd4f4b472ccf4042f1eab77e6c8bce574543f54d2135c7e396f413046397d5a"}, + {file = "pyarrow-14.0.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:32356bfb58b36059773f49e4e214996888eeea3a08893e7dbde44753799b2a02"}, + {file = "pyarrow-14.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:52809ee69d4dbf2241c0e4366d949ba035cbcf48409bf404f071f624ed313a2b"}, + {file = "pyarrow-14.0.2-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:c87824a5ac52be210d32906c715f4ed7053d0180c1060ae3ff9b7e560f53f944"}, + {file = "pyarrow-14.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a25eb2421a58e861f6ca91f43339d215476f4fe159eca603c55950c14f378cc5"}, + {file = "pyarrow-14.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c1da70d668af5620b8ba0a23f229030a4cd6c5f24a616a146f30d2386fec422"}, + {file = "pyarrow-14.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2cc61593c8e66194c7cdfae594503e91b926a228fba40b5cf25cc593563bcd07"}, + {file = "pyarrow-14.0.2-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:78ea56f62fb7c0ae8ecb9afdd7893e3a7dbeb0b04106f5c08dbb23f9c0157591"}, + {file = "pyarrow-14.0.2-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:37c233ddbce0c67a76c0985612fef27c0c92aef9413cf5aa56952f359fcb7379"}, + {file = "pyarrow-14.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:e4b123ad0f6add92de898214d404e488167b87b5dd86e9a434126bc2b7a5578d"}, + {file = "pyarrow-14.0.2-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:e354fba8490de258be7687f341bc04aba181fc8aa1f71e4584f9890d9cb2dec2"}, + {file = "pyarrow-14.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:20e003a23a13da963f43e2b432483fdd8c38dc8882cd145f09f21792e1cf22a1"}, + {file = "pyarrow-14.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc0de7575e841f1595ac07e5bc631084fd06ca8b03c0f2ecece733d23cd5102a"}, + {file = "pyarrow-14.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66e986dc859712acb0bd45601229021f3ffcdfc49044b64c6d071aaf4fa49e98"}, + {file = "pyarrow-14.0.2-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:f7d029f20ef56673a9730766023459ece397a05001f4e4d13805111d7c2108c0"}, + {file = "pyarrow-14.0.2-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:209bac546942b0d8edc8debda248364f7f668e4aad4741bae58e67d40e5fcf75"}, + {file = "pyarrow-14.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:1e6987c5274fb87d66bb36816afb6f65707546b3c45c44c28e3c4133c010a881"}, + {file = "pyarrow-14.0.2-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:a01d0052d2a294a5f56cc1862933014e696aa08cc7b620e8c0cce5a5d362e976"}, + {file = "pyarrow-14.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a51fee3a7db4d37f8cda3ea96f32530620d43b0489d169b285d774da48ca9785"}, + {file = "pyarrow-14.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64df2bf1ef2ef14cee531e2dfe03dd924017650ffaa6f9513d7a1bb291e59c15"}, + {file = "pyarrow-14.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c0fa3bfdb0305ffe09810f9d3e2e50a2787e3a07063001dcd7adae0cee3601a"}, + {file = "pyarrow-14.0.2-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c65bf4fd06584f058420238bc47a316e80dda01ec0dfb3044594128a6c2db794"}, + {file = "pyarrow-14.0.2-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:63ac901baec9369d6aae1cbe6cca11178fb018a8d45068aaf5bb54f94804a866"}, + {file = "pyarrow-14.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:75ee0efe7a87a687ae303d63037d08a48ef9ea0127064df18267252cfe2e9541"}, + {file = "pyarrow-14.0.2.tar.gz", hash = "sha256:36cef6ba12b499d864d1def3e990f97949e0b79400d08b7cf74504ffbd3eb025"}, ] [package.dependencies] @@ -1109,86 +1195,145 @@ numpy = ">=1.16.6" [[package]] name = "pydantic" -version = "1.10.12" -description = "Data validation and settings management using python type hints" +version = "2.7.1" +description = "Data validation using Python type hints" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pydantic-1.10.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a1fcb59f2f355ec350073af41d927bf83a63b50e640f4dbaa01053a28b7a7718"}, - {file = "pydantic-1.10.12-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b7ccf02d7eb340b216ec33e53a3a629856afe1c6e0ef91d84a4e6f2fb2ca70fe"}, - {file = "pydantic-1.10.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fb2aa3ab3728d950bcc885a2e9eff6c8fc40bc0b7bb434e555c215491bcf48b"}, - {file = "pydantic-1.10.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:771735dc43cf8383959dc9b90aa281f0b6092321ca98677c5fb6125a6f56d58d"}, - {file = "pydantic-1.10.12-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ca48477862372ac3770969b9d75f1bf66131d386dba79506c46d75e6b48c1e09"}, - {file = "pydantic-1.10.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5e7add47a5b5a40c49b3036d464e3c7802f8ae0d1e66035ea16aa5b7a3923ed"}, - {file = "pydantic-1.10.12-cp310-cp310-win_amd64.whl", hash = "sha256:e4129b528c6baa99a429f97ce733fff478ec955513630e61b49804b6cf9b224a"}, - {file = "pydantic-1.10.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b0d191db0f92dfcb1dec210ca244fdae5cbe918c6050b342d619c09d31eea0cc"}, - {file = "pydantic-1.10.12-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:795e34e6cc065f8f498c89b894a3c6da294a936ee71e644e4bd44de048af1405"}, - {file = "pydantic-1.10.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69328e15cfda2c392da4e713443c7dbffa1505bc9d566e71e55abe14c97ddc62"}, - {file = "pydantic-1.10.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2031de0967c279df0d8a1c72b4ffc411ecd06bac607a212892757db7462fc494"}, - {file = "pydantic-1.10.12-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ba5b2e6fe6ca2b7e013398bc7d7b170e21cce322d266ffcd57cca313e54fb246"}, - {file = "pydantic-1.10.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2a7bac939fa326db1ab741c9d7f44c565a1d1e80908b3797f7f81a4f86bc8d33"}, - {file = "pydantic-1.10.12-cp311-cp311-win_amd64.whl", hash = "sha256:87afda5539d5140cb8ba9e8b8c8865cb5b1463924d38490d73d3ccfd80896b3f"}, - {file = "pydantic-1.10.12-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:549a8e3d81df0a85226963611950b12d2d334f214436a19537b2efed61b7639a"}, - {file = "pydantic-1.10.12-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:598da88dfa127b666852bef6d0d796573a8cf5009ffd62104094a4fe39599565"}, - {file = "pydantic-1.10.12-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba5c4a8552bff16c61882db58544116d021d0b31ee7c66958d14cf386a5b5350"}, - {file = "pydantic-1.10.12-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c79e6a11a07da7374f46970410b41d5e266f7f38f6a17a9c4823db80dadf4303"}, - {file = "pydantic-1.10.12-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab26038b8375581dc832a63c948f261ae0aa21f1d34c1293469f135fa92972a5"}, - {file = "pydantic-1.10.12-cp37-cp37m-win_amd64.whl", hash = "sha256:e0a16d274b588767602b7646fa05af2782576a6cf1022f4ba74cbb4db66f6ca8"}, - {file = "pydantic-1.10.12-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6a9dfa722316f4acf4460afdf5d41d5246a80e249c7ff475c43a3a1e9d75cf62"}, - {file = "pydantic-1.10.12-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a73f489aebd0c2121ed974054cb2759af8a9f747de120acd2c3394cf84176ccb"}, - {file = "pydantic-1.10.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b30bcb8cbfccfcf02acb8f1a261143fab622831d9c0989707e0e659f77a18e0"}, - {file = "pydantic-1.10.12-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fcfb5296d7877af406ba1547dfde9943b1256d8928732267e2653c26938cd9c"}, - {file = "pydantic-1.10.12-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2f9a6fab5f82ada41d56b0602606a5506aab165ca54e52bc4545028382ef1c5d"}, - {file = "pydantic-1.10.12-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dea7adcc33d5d105896401a1f37d56b47d443a2b2605ff8a969a0ed5543f7e33"}, - {file = "pydantic-1.10.12-cp38-cp38-win_amd64.whl", hash = "sha256:1eb2085c13bce1612da8537b2d90f549c8cbb05c67e8f22854e201bde5d98a47"}, - {file = "pydantic-1.10.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ef6c96b2baa2100ec91a4b428f80d8f28a3c9e53568219b6c298c1125572ebc6"}, - {file = "pydantic-1.10.12-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c076be61cd0177a8433c0adcb03475baf4ee91edf5a4e550161ad57fc90f523"}, - {file = "pydantic-1.10.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d5a58feb9a39f481eda4d5ca220aa8b9d4f21a41274760b9bc66bfd72595b86"}, - {file = "pydantic-1.10.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5f805d2d5d0a41633651a73fa4ecdd0b3d7a49de4ec3fadf062fe16501ddbf1"}, - {file = "pydantic-1.10.12-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1289c180abd4bd4555bb927c42ee42abc3aee02b0fb2d1223fb7c6e5bef87dbe"}, - {file = "pydantic-1.10.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5d1197e462e0364906cbc19681605cb7c036f2475c899b6f296104ad42b9f5fb"}, - {file = "pydantic-1.10.12-cp39-cp39-win_amd64.whl", hash = "sha256:fdbdd1d630195689f325c9ef1a12900524dceb503b00a987663ff4f58669b93d"}, - {file = "pydantic-1.10.12-py3-none-any.whl", hash = "sha256:b749a43aa51e32839c9d71dc67eb1e4221bb04af1033a32e3923d46f9effa942"}, - {file = "pydantic-1.10.12.tar.gz", hash = "sha256:0fe8a415cea8f340e7a9af9c54fc71a649b43e8ca3cc732986116b3cb135d303"}, + {file = "pydantic-2.7.1-py3-none-any.whl", hash = "sha256:e029badca45266732a9a79898a15ae2e8b14840b1eabbb25844be28f0b33f3d5"}, + {file = "pydantic-2.7.1.tar.gz", hash = "sha256:e9dbb5eada8abe4d9ae5f46b9939aead650cd2b68f249bb3a8139dbe125803cc"}, ] [package.dependencies] -typing-extensions = ">=4.2.0" +annotated-types = ">=0.4.0" +pydantic-core = "2.18.2" +typing-extensions = ">=4.6.1" [package.extras] -dotenv = ["python-dotenv (>=0.10.4)"] -email = ["email-validator (>=1.0.3)"] +email = ["email-validator (>=2.0.0)"] + +[[package]] +name = "pydantic-core" +version = "2.18.2" +description = "Core functionality for Pydantic validation and serialization" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydantic_core-2.18.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:9e08e867b306f525802df7cd16c44ff5ebbe747ff0ca6cf3fde7f36c05a59a81"}, + {file = "pydantic_core-2.18.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f0a21cbaa69900cbe1a2e7cad2aa74ac3cf21b10c3efb0fa0b80305274c0e8a2"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0680b1f1f11fda801397de52c36ce38ef1c1dc841a0927a94f226dea29c3ae3d"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:95b9d5e72481d3780ba3442eac863eae92ae43a5f3adb5b4d0a1de89d42bb250"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fcf5cd9c4b655ad666ca332b9a081112cd7a58a8b5a6ca7a3104bc950f2038"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b5155ff768083cb1d62f3e143b49a8a3432e6789a3abee8acd005c3c7af1c74"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:553ef617b6836fc7e4df130bb851e32fe357ce36336d897fd6646d6058d980af"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b89ed9eb7d616ef5714e5590e6cf7f23b02d0d539767d33561e3675d6f9e3857"}, + {file = "pydantic_core-2.18.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:75f7e9488238e920ab6204399ded280dc4c307d034f3924cd7f90a38b1829563"}, + {file = "pydantic_core-2.18.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ef26c9e94a8c04a1b2924149a9cb081836913818e55681722d7f29af88fe7b38"}, + {file = "pydantic_core-2.18.2-cp310-none-win32.whl", hash = "sha256:182245ff6b0039e82b6bb585ed55a64d7c81c560715d1bad0cbad6dfa07b4027"}, + {file = "pydantic_core-2.18.2-cp310-none-win_amd64.whl", hash = "sha256:e23ec367a948b6d812301afc1b13f8094ab7b2c280af66ef450efc357d2ae543"}, + {file = "pydantic_core-2.18.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:219da3f096d50a157f33645a1cf31c0ad1fe829a92181dd1311022f986e5fbe3"}, + {file = "pydantic_core-2.18.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cc1cfd88a64e012b74e94cd00bbe0f9c6df57049c97f02bb07d39e9c852e19a4"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05b7133a6e6aeb8df37d6f413f7705a37ab4031597f64ab56384c94d98fa0e90"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:224c421235f6102e8737032483f43c1a8cfb1d2f45740c44166219599358c2cd"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b14d82cdb934e99dda6d9d60dc84a24379820176cc4a0d123f88df319ae9c150"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2728b01246a3bba6de144f9e3115b532ee44bd6cf39795194fb75491824a1413"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:470b94480bb5ee929f5acba6995251ada5e059a5ef3e0dfc63cca287283ebfa6"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:997abc4df705d1295a42f95b4eec4950a37ad8ae46d913caeee117b6b198811c"}, + {file = "pydantic_core-2.18.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:75250dbc5290e3f1a0f4618db35e51a165186f9034eff158f3d490b3fed9f8a0"}, + {file = "pydantic_core-2.18.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4456f2dca97c425231d7315737d45239b2b51a50dc2b6f0c2bb181fce6207664"}, + {file = "pydantic_core-2.18.2-cp311-none-win32.whl", hash = "sha256:269322dcc3d8bdb69f054681edff86276b2ff972447863cf34c8b860f5188e2e"}, + {file = "pydantic_core-2.18.2-cp311-none-win_amd64.whl", hash = "sha256:800d60565aec896f25bc3cfa56d2277d52d5182af08162f7954f938c06dc4ee3"}, + {file = "pydantic_core-2.18.2-cp311-none-win_arm64.whl", hash = "sha256:1404c69d6a676245199767ba4f633cce5f4ad4181f9d0ccb0577e1f66cf4c46d"}, + {file = "pydantic_core-2.18.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:fb2bd7be70c0fe4dfd32c951bc813d9fe6ebcbfdd15a07527796c8204bd36242"}, + {file = "pydantic_core-2.18.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6132dd3bd52838acddca05a72aafb6eab6536aa145e923bb50f45e78b7251043"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d904828195733c183d20a54230c0df0eb46ec746ea1a666730787353e87182"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c9bd70772c720142be1020eac55f8143a34ec9f82d75a8e7a07852023e46617f"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2b8ed04b3582771764538f7ee7001b02e1170223cf9b75dff0bc698fadb00cf3"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e6dac87ddb34aaec85f873d737e9d06a3555a1cc1a8e0c44b7f8d5daeb89d86f"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ca4ae5a27ad7a4ee5170aebce1574b375de390bc01284f87b18d43a3984df72"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:886eec03591b7cf058467a70a87733b35f44707bd86cf64a615584fd72488b7c"}, + {file = "pydantic_core-2.18.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ca7b0c1f1c983e064caa85f3792dd2fe3526b3505378874afa84baf662e12241"}, + {file = "pydantic_core-2.18.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b4356d3538c3649337df4074e81b85f0616b79731fe22dd11b99499b2ebbdf3"}, + {file = "pydantic_core-2.18.2-cp312-none-win32.whl", hash = "sha256:8b172601454f2d7701121bbec3425dd71efcb787a027edf49724c9cefc14c038"}, + {file = "pydantic_core-2.18.2-cp312-none-win_amd64.whl", hash = "sha256:b1bd7e47b1558ea872bd16c8502c414f9e90dcf12f1395129d7bb42a09a95438"}, + {file = "pydantic_core-2.18.2-cp312-none-win_arm64.whl", hash = "sha256:98758d627ff397e752bc339272c14c98199c613f922d4a384ddc07526c86a2ec"}, + {file = "pydantic_core-2.18.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:9fdad8e35f278b2c3eb77cbdc5c0a49dada440657bf738d6905ce106dc1de439"}, + {file = "pydantic_core-2.18.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1d90c3265ae107f91a4f279f4d6f6f1d4907ac76c6868b27dc7fb33688cfb347"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:390193c770399861d8df9670fb0d1874f330c79caaca4642332df7c682bf6b91"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:82d5d4d78e4448683cb467897fe24e2b74bb7b973a541ea1dcfec1d3cbce39fb"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4774f3184d2ef3e14e8693194f661dea5a4d6ca4e3dc8e39786d33a94865cefd"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4d938ec0adf5167cb335acb25a4ee69a8107e4984f8fbd2e897021d9e4ca21b"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0e8b1be28239fc64a88a8189d1df7fad8be8c1ae47fcc33e43d4be15f99cc70"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:868649da93e5a3d5eacc2b5b3b9235c98ccdbfd443832f31e075f54419e1b96b"}, + {file = "pydantic_core-2.18.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:78363590ef93d5d226ba21a90a03ea89a20738ee5b7da83d771d283fd8a56761"}, + {file = "pydantic_core-2.18.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:852e966fbd035a6468fc0a3496589b45e2208ec7ca95c26470a54daed82a0788"}, + {file = "pydantic_core-2.18.2-cp38-none-win32.whl", hash = "sha256:6a46e22a707e7ad4484ac9ee9f290f9d501df45954184e23fc29408dfad61350"}, + {file = "pydantic_core-2.18.2-cp38-none-win_amd64.whl", hash = "sha256:d91cb5ea8b11607cc757675051f61b3d93f15eca3cefb3e6c704a5d6e8440f4e"}, + {file = "pydantic_core-2.18.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:ae0a8a797a5e56c053610fa7be147993fe50960fa43609ff2a9552b0e07013e8"}, + {file = "pydantic_core-2.18.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:042473b6280246b1dbf530559246f6842b56119c2926d1e52b631bdc46075f2a"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a388a77e629b9ec814c1b1e6b3b595fe521d2cdc625fcca26fbc2d44c816804"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e25add29b8f3b233ae90ccef2d902d0ae0432eb0d45370fe315d1a5cf231004b"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f459a5ce8434614dfd39bbebf1041952ae01da6bed9855008cb33b875cb024c0"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eff2de745698eb46eeb51193a9f41d67d834d50e424aef27df2fcdee1b153845"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8309f67285bdfe65c372ea3722b7a5642680f3dba538566340a9d36e920b5f0"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f93a8a2e3938ff656a7c1bc57193b1319960ac015b6e87d76c76bf14fe0244b4"}, + {file = "pydantic_core-2.18.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:22057013c8c1e272eb8d0eebc796701167d8377441ec894a8fed1af64a0bf399"}, + {file = "pydantic_core-2.18.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cfeecd1ac6cc1fb2692c3d5110781c965aabd4ec5d32799773ca7b1456ac636b"}, + {file = "pydantic_core-2.18.2-cp39-none-win32.whl", hash = "sha256:0d69b4c2f6bb3e130dba60d34c0845ba31b69babdd3f78f7c0c8fae5021a253e"}, + {file = "pydantic_core-2.18.2-cp39-none-win_amd64.whl", hash = "sha256:d9319e499827271b09b4e411905b24a426b8fb69464dfa1696258f53a3334641"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a1874c6dd4113308bd0eb568418e6114b252afe44319ead2b4081e9b9521fe75"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:ccdd111c03bfd3666bd2472b674c6899550e09e9f298954cfc896ab92b5b0e6d"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e18609ceaa6eed63753037fc06ebb16041d17d28199ae5aba0052c51449650a9"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e5c584d357c4e2baf0ff7baf44f4994be121e16a2c88918a5817331fc7599d7"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43f0f463cf89ace478de71a318b1b4f05ebc456a9b9300d027b4b57c1a2064fb"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e1b395e58b10b73b07b7cf740d728dd4ff9365ac46c18751bf8b3d8cca8f625a"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0098300eebb1c837271d3d1a2cd2911e7c11b396eac9661655ee524a7f10587b"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:36789b70d613fbac0a25bb07ab3d9dba4d2e38af609c020cf4d888d165ee0bf3"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3f9a801e7c8f1ef8718da265bba008fa121243dfe37c1cea17840b0944dfd72c"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:3a6515ebc6e69d85502b4951d89131ca4e036078ea35533bb76327f8424531ce"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20aca1e2298c56ececfd8ed159ae4dde2df0781988c97ef77d5c16ff4bd5b400"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:223ee893d77a310a0391dca6df00f70bbc2f36a71a895cecd9a0e762dc37b349"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2334ce8c673ee93a1d6a65bd90327588387ba073c17e61bf19b4fd97d688d63c"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:cbca948f2d14b09d20268cda7b0367723d79063f26c4ffc523af9042cad95592"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b3ef08e20ec49e02d5c6717a91bb5af9b20f1805583cb0adfe9ba2c6b505b5ae"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6fdc8627910eed0c01aed6a390a252fe3ea6d472ee70fdde56273f198938374"}, + {file = "pydantic_core-2.18.2.tar.gz", hash = "sha256:2e29d20810dfc3043ee13ac7d9e25105799817683348823f305ab3f349b9386e"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" [[package]] name = "pygments" -version = "2.16.1" +version = "2.18.0" description = "Pygments is a syntax highlighting package written in Python." category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, - {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, + {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, + {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, ] [package.extras] -plugins = ["importlib-metadata"] +windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pylint" -version = "2.17.5" +version = "2.17.7" 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"}, + {file = "pylint-2.17.7-py3-none-any.whl", hash = "sha256:27a8d4c7ddc8c2f8c18aa0050148f89ffc09838142193fdbe98f172781a3ff87"}, + {file = "pylint-2.17.7.tar.gz", hash = "sha256:f4fcac7ae74cfe36bc8451e931d8438e4a476c20314b1101c458ad0f05191fad"}, ] [package.dependencies] -astroid = ">=2.15.6,<=2.17.0-dev0" +astroid = ">=2.15.8,<=2.17.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ {version = ">=0.2", markers = "python_version < \"3.11\""}, @@ -1207,14 +1352,14 @@ testutils = ["gitpython (>3)"] [[package]] name = "pytest" -version = "7.4.0" +version = "7.4.4" 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"}, + {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, + {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, ] [package.dependencies] @@ -1266,14 +1411,14 @@ vcrpy = ">=2.0.1" [[package]] name = "python-dateutil" -version = "2.8.2" +version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, ] [package.dependencies] @@ -1281,14 +1426,14 @@ six = ">=1.5" [[package]] name = "python-dotenv" -version = "1.0.0" +version = "1.0.1" description = "Read key-value pairs from a .env file and set them as environment variables" category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "python-dotenv-1.0.0.tar.gz", hash = "sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba"}, - {file = "python_dotenv-1.0.0-py3-none-any.whl", hash = "sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a"}, + {file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"}, + {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, ] [package.extras] @@ -1296,14 +1441,14 @@ cli = ["click (>=5.0)"] [[package]] name = "pytz" -version = "2023.3" +version = "2024.1" description = "World timezone definitions, modern and historical" category = "main" optional = false python-versions = "*" files = [ - {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, - {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, + {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, + {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, ] [[package]] @@ -1393,14 +1538,14 @@ files = [ [[package]] name = "sniffio" -version = "1.3.0" +version = "1.3.1" description = "Sniff out which async library your code is running under" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, - {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, ] [[package]] @@ -1417,14 +1562,14 @@ files = [ [[package]] name = "soupsieve" -version = "2.4.1" +version = "2.5" description = "A modern CSS selector implementation for Beautiful Soup." -category = "main" +category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "soupsieve-2.4.1-py3-none-any.whl", hash = "sha256:1c1bfee6819544a3447586c889157365a27e10d88cde3ad3da0cf0ddf646feb8"}, - {file = "soupsieve-2.4.1.tar.gz", hash = "sha256:89d12b2d5dfcd2c9e8c22326da9d9aa9cb3dfab0a83a024f05704076ee8d35ea"}, + {file = "soupsieve-2.5-py3-none-any.whl", hash = "sha256:eaa337ff55a1579b6549dc679565eac1e3d000563bcb1c8ab0d0fefbc0c2cdc7"}, + {file = "soupsieve-2.5.tar.gz", hash = "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690"}, ] [[package]] @@ -1617,14 +1762,14 @@ test = ["pytest"] [[package]] name = "starlette" -version = "0.25.0" +version = "0.36.3" description = "The little ASGI library that shines." category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "starlette-0.25.0-py3-none-any.whl", hash = "sha256:774f1df1983fd594b9b6fb3ded39c2aa1979d10ac45caac0f4255cbe2acb8628"}, - {file = "starlette-0.25.0.tar.gz", hash = "sha256:854c71e73736c429c2bdb07801f2c76c9cba497e7c3cf4988fde5e95fe4cdb3c"}, + {file = "starlette-0.36.3-py3-none-any.whl", hash = "sha256:13d429aa93a61dc40bf503e8c801db1f1bca3dc706b10ef2434a36123568f044"}, + {file = "starlette-0.36.3.tar.gz", hash = "sha256:90a671733cfb35771d8cc605e0b679d23b992f8dcfad48cc60b38cb29aeb7080"}, ] [package.dependencies] @@ -1632,7 +1777,7 @@ anyio = ">=3.4.0,<5" typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} [package.extras] -full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart", "pyyaml"] +full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7)", "pyyaml"] [[package]] name = "tomli" @@ -1648,42 +1793,42 @@ files = [ [[package]] name = "tomlkit" -version = "0.12.1" +version = "0.12.4" description = "Style preserving TOML library" category = "dev" optional = false 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"}, + {file = "tomlkit-0.12.4-py3-none-any.whl", hash = "sha256:5cd82d48a3dd89dee1f9d64420aa20ae65cfbd00668d6f094d7578a78efbb77b"}, + {file = "tomlkit-0.12.4.tar.gz", hash = "sha256:7ca1cfc12232806517a8515047ba66a19369e71edf2439d0f5824f91032b6cc3"}, ] [[package]] name = "typing-extensions" -version = "4.7.1" -description = "Backported and Experimental Type Hints for Python 3.7+" +version = "4.11.0" +description = "Backported and Experimental Type Hints for Python 3.8+" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" 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"}, + {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, + {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, ] [[package]] name = "urllib3" -version = "1.26.16" +version = "1.26.19" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "urllib3-1.26.16-py2.py3-none-any.whl", hash = "sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f"}, - {file = "urllib3-1.26.16.tar.gz", hash = "sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14"}, + {file = "urllib3-1.26.19-py2.py3-none-any.whl", hash = "sha256:37a0344459b199fce0e80b0d3569837ec6b6937435c5244e7fd73fa6006830f3"}, + {file = "urllib3-1.26.19.tar.gz", hash = "sha256:3e3d753a8618b86d7de333b4223005f68720bcd6a7d2bcb9fbd2229ec7c1e429"}, ] [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +brotli = ["brotli (==1.0.9)", "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)"] @@ -1715,48 +1860,48 @@ standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", [[package]] name = "uvloop" -version = "0.17.0" +version = "0.19.0" description = "Fast implementation of asyncio event loop on top of libuv" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8.0" files = [ - {file = "uvloop-0.17.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ce9f61938d7155f79d3cb2ffa663147d4a76d16e08f65e2c66b77bd41b356718"}, - {file = "uvloop-0.17.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:68532f4349fd3900b839f588972b3392ee56042e440dd5873dfbbcd2cc67617c"}, - {file = "uvloop-0.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0949caf774b9fcefc7c5756bacbbbd3fc4c05a6b7eebc7c7ad6f825b23998d6d"}, - {file = "uvloop-0.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff3d00b70ce95adce264462c930fbaecb29718ba6563db354608f37e49e09024"}, - {file = "uvloop-0.17.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a5abddb3558d3f0a78949c750644a67be31e47936042d4f6c888dd6f3c95f4aa"}, - {file = "uvloop-0.17.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8efcadc5a0003d3a6e887ccc1fb44dec25594f117a94e3127954c05cf144d811"}, - {file = "uvloop-0.17.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3378eb62c63bf336ae2070599e49089005771cc651c8769aaad72d1bd9385a7c"}, - {file = "uvloop-0.17.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6aafa5a78b9e62493539456f8b646f85abc7093dd997f4976bb105537cf2635e"}, - {file = "uvloop-0.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c686a47d57ca910a2572fddfe9912819880b8765e2f01dc0dd12a9bf8573e539"}, - {file = "uvloop-0.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:864e1197139d651a76c81757db5eb199db8866e13acb0dfe96e6fc5d1cf45fc4"}, - {file = "uvloop-0.17.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2a6149e1defac0faf505406259561bc14b034cdf1d4711a3ddcdfbaa8d825a05"}, - {file = "uvloop-0.17.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6708f30db9117f115eadc4f125c2a10c1a50d711461699a0cbfaa45b9a78e376"}, - {file = "uvloop-0.17.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:23609ca361a7fc587031429fa25ad2ed7242941adec948f9d10c045bfecab06b"}, - {file = "uvloop-0.17.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2deae0b0fb00a6af41fe60a675cec079615b01d68beb4cc7b722424406b126a8"}, - {file = "uvloop-0.17.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45cea33b208971e87a31c17622e4b440cac231766ec11e5d22c76fab3bf9df62"}, - {file = "uvloop-0.17.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9b09e0f0ac29eee0451d71798878eae5a4e6a91aa275e114037b27f7db72702d"}, - {file = "uvloop-0.17.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dbbaf9da2ee98ee2531e0c780455f2841e4675ff580ecf93fe5c48fe733b5667"}, - {file = "uvloop-0.17.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a4aee22ece20958888eedbad20e4dbb03c37533e010fb824161b4f05e641f738"}, - {file = "uvloop-0.17.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:307958f9fc5c8bb01fad752d1345168c0abc5d62c1b72a4a8c6c06f042b45b20"}, - {file = "uvloop-0.17.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ebeeec6a6641d0adb2ea71dcfb76017602ee2bfd8213e3fcc18d8f699c5104f"}, - {file = "uvloop-0.17.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1436c8673c1563422213ac6907789ecb2b070f5939b9cbff9ef7113f2b531595"}, - {file = "uvloop-0.17.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8887d675a64cfc59f4ecd34382e5b4f0ef4ae1da37ed665adba0c2badf0d6578"}, - {file = "uvloop-0.17.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3db8de10ed684995a7f34a001f15b374c230f7655ae840964d51496e2f8a8474"}, - {file = "uvloop-0.17.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7d37dccc7ae63e61f7b96ee2e19c40f153ba6ce730d8ba4d3b4e9738c1dccc1b"}, - {file = "uvloop-0.17.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cbbe908fda687e39afd6ea2a2f14c2c3e43f2ca88e3a11964b297822358d0e6c"}, - {file = "uvloop-0.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d97672dc709fa4447ab83276f344a165075fd9f366a97b712bdd3fee05efae8"}, - {file = "uvloop-0.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1e507c9ee39c61bfddd79714e4f85900656db1aec4d40c6de55648e85c2799c"}, - {file = "uvloop-0.17.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c092a2c1e736086d59ac8e41f9c98f26bbf9b9222a76f21af9dfe949b99b2eb9"}, - {file = "uvloop-0.17.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:30babd84706115626ea78ea5dbc7dd8d0d01a2e9f9b306d24ca4ed5796c66ded"}, - {file = "uvloop-0.17.0.tar.gz", hash = "sha256:0ddf6baf9cf11a1a22c71487f39f15b2cf78eb5bde7e5b45fbb99e8a9d91b9e1"}, + {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de4313d7f575474c8f5a12e163f6d89c0a878bc49219641d49e6f1444369a90e"}, + {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5588bd21cf1fcf06bded085f37e43ce0e00424197e7c10e77afd4bbefffef428"}, + {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b1fd71c3843327f3bbc3237bedcdb6504fd50368ab3e04d0410e52ec293f5b8"}, + {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a05128d315e2912791de6088c34136bfcdd0c7cbc1cf85fd6fd1bb321b7c849"}, + {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:cd81bdc2b8219cb4b2556eea39d2e36bfa375a2dd021404f90a62e44efaaf957"}, + {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5f17766fb6da94135526273080f3455a112f82570b2ee5daa64d682387fe0dcd"}, + {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4ce6b0af8f2729a02a5d1575feacb2a94fc7b2e983868b009d51c9a9d2149bef"}, + {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:31e672bb38b45abc4f26e273be83b72a0d28d074d5b370fc4dcf4c4eb15417d2"}, + {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:570fc0ed613883d8d30ee40397b79207eedd2624891692471808a95069a007c1"}, + {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5138821e40b0c3e6c9478643b4660bd44372ae1e16a322b8fc07478f92684e24"}, + {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:91ab01c6cd00e39cde50173ba4ec68a1e578fee9279ba64f5221810a9e786533"}, + {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:47bf3e9312f63684efe283f7342afb414eea4d3011542155c7e625cd799c3b12"}, + {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:da8435a3bd498419ee8c13c34b89b5005130a476bda1d6ca8cfdde3de35cd650"}, + {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:02506dc23a5d90e04d4f65c7791e65cf44bd91b37f24cfc3ef6cf2aff05dc7ec"}, + {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2693049be9d36fef81741fddb3f441673ba12a34a704e7b4361efb75cf30befc"}, + {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7010271303961c6f0fe37731004335401eb9075a12680738731e9c92ddd96ad6"}, + {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5daa304d2161d2918fa9a17d5635099a2f78ae5b5960e742b2fcfbb7aefaa593"}, + {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7207272c9520203fea9b93843bb775d03e1cf88a80a936ce760f60bb5add92f3"}, + {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:78ab247f0b5671cc887c31d33f9b3abfb88d2614b84e4303f1a63b46c046c8bd"}, + {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:472d61143059c84947aa8bb74eabbace30d577a03a1805b77933d6bd13ddebbd"}, + {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45bf4c24c19fb8a50902ae37c5de50da81de4922af65baf760f7c0c42e1088be"}, + {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271718e26b3e17906b28b67314c45d19106112067205119dddbd834c2b7ce797"}, + {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:34175c9fd2a4bc3adc1380e1261f60306344e3407c20a4d684fd5f3be010fa3d"}, + {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e27f100e1ff17f6feeb1f33968bc185bf8ce41ca557deee9d9bbbffeb72030b7"}, + {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13dfdf492af0aa0a0edf66807d2b465607d11c4fa48f4a1fd41cbea5b18e8e8b"}, + {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e3d4e85ac060e2342ff85e90d0c04157acb210b9ce508e784a944f852a40e67"}, + {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ca4956c9ab567d87d59d49fa3704cf29e37109ad348f2d5223c9bf761a332e7"}, + {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f467a5fd23b4fc43ed86342641f3936a68ded707f4627622fa3f82a120e18256"}, + {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:492e2c32c2af3f971473bc22f086513cedfc66a130756145a931a90c3958cb17"}, + {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2df95fca285a9f5bfe730e51945ffe2fa71ccbfdde3b0da5772b4ee4f2e770d5"}, + {file = "uvloop-0.19.0.tar.gz", hash = "sha256:0246f4fd1bf2bf702e06b0d45ee91677ee5c31242f39aab4ea6fe0c51aedd0fd"}, ] [package.extras] -dev = ["Cython (>=0.29.32,<0.30.0)", "Sphinx (>=4.1.2,<4.2.0)", "aiohttp", "flake8 (>=3.9.2,<3.10.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=22.0.0,<22.1.0)", "pycodestyle (>=2.7.0,<2.8.0)", "pytest (>=3.6.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] -test = ["Cython (>=0.29.32,<0.30.0)", "aiohttp", "flake8 (>=3.9.2,<3.10.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=22.0.0,<22.1.0)", "pycodestyle (>=2.7.0,<2.8.0)"] +test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)", "flake8 (>=5.0,<6.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=23.0.0,<23.1.0)", "pycodestyle (>=2.9.0,<2.10.0)"] [[package]] name = "vcrpy" @@ -1779,34 +1924,87 @@ yarl = "*" [[package]] name = "watchfiles" -version = "0.19.0" +version = "0.21.0" description = "Simple, modern and high performance file watching and code reload in python." category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "watchfiles-0.19.0-cp37-abi3-macosx_10_7_x86_64.whl", hash = "sha256:91633e64712df3051ca454ca7d1b976baf842d7a3640b87622b323c55f3345e7"}, - {file = "watchfiles-0.19.0-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:b6577b8c6c8701ba8642ea9335a129836347894b666dd1ec2226830e263909d3"}, - {file = "watchfiles-0.19.0-cp37-abi3-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:18b28f6ad871b82df9542ff958d0c86bb0d8310bb09eb8e87d97318a3b5273af"}, - {file = "watchfiles-0.19.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fac19dc9cbc34052394dbe81e149411a62e71999c0a19e1e09ce537867f95ae0"}, - {file = "watchfiles-0.19.0-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:09ea3397aecbc81c19ed7f025e051a7387feefdb789cf768ff994c1228182fda"}, - {file = "watchfiles-0.19.0-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c0376deac92377817e4fb8f347bf559b7d44ff556d9bc6f6208dd3f79f104aaf"}, - {file = "watchfiles-0.19.0-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c75eff897786ee262c9f17a48886f4e98e6cfd335e011c591c305e5d083c056"}, - {file = "watchfiles-0.19.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb5d45c4143c1dd60f98a16187fd123eda7248f84ef22244818c18d531a249d1"}, - {file = "watchfiles-0.19.0-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:79c533ff593db861ae23436541f481ec896ee3da4e5db8962429b441bbaae16e"}, - {file = "watchfiles-0.19.0-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:3d7d267d27aceeeaa3de0dd161a0d64f0a282264d592e335fff7958cc0cbae7c"}, - {file = "watchfiles-0.19.0-cp37-abi3-win32.whl", hash = "sha256:176a9a7641ec2c97b24455135d58012a5be5c6217fc4d5fef0b2b9f75dbf5154"}, - {file = "watchfiles-0.19.0-cp37-abi3-win_amd64.whl", hash = "sha256:945be0baa3e2440151eb3718fd8846751e8b51d8de7b884c90b17d271d34cae8"}, - {file = "watchfiles-0.19.0-cp37-abi3-win_arm64.whl", hash = "sha256:0089c6dc24d436b373c3c57657bf4f9a453b13767150d17284fc6162b2791911"}, - {file = "watchfiles-0.19.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:cae3dde0b4b2078f31527acff6f486e23abed307ba4d3932466ba7cdd5ecec79"}, - {file = "watchfiles-0.19.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:7f3920b1285a7d3ce898e303d84791b7bf40d57b7695ad549dc04e6a44c9f120"}, - {file = "watchfiles-0.19.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9afd0d69429172c796164fd7fe8e821ade9be983f51c659a38da3faaaaac44dc"}, - {file = "watchfiles-0.19.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68dce92b29575dda0f8d30c11742a8e2b9b8ec768ae414b54f7453f27bdf9545"}, - {file = "watchfiles-0.19.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:5569fc7f967429d4bc87e355cdfdcee6aabe4b620801e2cf5805ea245c06097c"}, - {file = "watchfiles-0.19.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:5471582658ea56fca122c0f0d0116a36807c63fefd6fdc92c71ca9a4491b6b48"}, - {file = "watchfiles-0.19.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b538014a87f94d92f98f34d3e6d2635478e6be6423a9ea53e4dd96210065e193"}, - {file = "watchfiles-0.19.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20b44221764955b1e703f012c74015306fb7e79a00c15370785f309b1ed9aa8d"}, - {file = "watchfiles-0.19.0.tar.gz", hash = "sha256:d9b073073e048081e502b6c6b0b88714c026a1a4c890569238d04aca5f9ca74b"}, + {file = "watchfiles-0.21.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:27b4035013f1ea49c6c0b42d983133b136637a527e48c132d368eb19bf1ac6aa"}, + {file = "watchfiles-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c81818595eff6e92535ff32825f31c116f867f64ff8cdf6562cd1d6b2e1e8f3e"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6c107ea3cf2bd07199d66f156e3ea756d1b84dfd43b542b2d870b77868c98c03"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d9ac347653ebd95839a7c607608703b20bc07e577e870d824fa4801bc1cb124"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5eb86c6acb498208e7663ca22dbe68ca2cf42ab5bf1c776670a50919a56e64ab"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f564bf68404144ea6b87a78a3f910cc8de216c6b12a4cf0b27718bf4ec38d303"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d0f32ebfaa9c6011f8454994f86108c2eb9c79b8b7de00b36d558cadcedaa3d"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6d45d9b699ecbac6c7bd8e0a2609767491540403610962968d258fd6405c17c"}, + {file = "watchfiles-0.21.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:aff06b2cac3ef4616e26ba17a9c250c1fe9dd8a5d907d0193f84c499b1b6e6a9"}, + {file = "watchfiles-0.21.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d9792dff410f266051025ecfaa927078b94cc7478954b06796a9756ccc7e14a9"}, + {file = "watchfiles-0.21.0-cp310-none-win32.whl", hash = "sha256:214cee7f9e09150d4fb42e24919a1e74d8c9b8a9306ed1474ecaddcd5479c293"}, + {file = "watchfiles-0.21.0-cp310-none-win_amd64.whl", hash = "sha256:1ad7247d79f9f55bb25ab1778fd47f32d70cf36053941f07de0b7c4e96b5d235"}, + {file = "watchfiles-0.21.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:668c265d90de8ae914f860d3eeb164534ba2e836811f91fecc7050416ee70aa7"}, + {file = "watchfiles-0.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a23092a992e61c3a6a70f350a56db7197242f3490da9c87b500f389b2d01eef"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e7941bbcfdded9c26b0bf720cb7e6fd803d95a55d2c14b4bd1f6a2772230c586"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11cd0c3100e2233e9c53106265da31d574355c288e15259c0d40a4405cbae317"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d78f30cbe8b2ce770160d3c08cff01b2ae9306fe66ce899b73f0409dc1846c1b"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6674b00b9756b0af620aa2a3346b01f8e2a3dc729d25617e1b89cf6af4a54eb1"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fd7ac678b92b29ba630d8c842d8ad6c555abda1b9ef044d6cc092dacbfc9719d"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c873345680c1b87f1e09e0eaf8cf6c891b9851d8b4d3645e7efe2ec20a20cc7"}, + {file = "watchfiles-0.21.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:49f56e6ecc2503e7dbe233fa328b2be1a7797d31548e7a193237dcdf1ad0eee0"}, + {file = "watchfiles-0.21.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:02d91cbac553a3ad141db016e3350b03184deaafeba09b9d6439826ee594b365"}, + {file = "watchfiles-0.21.0-cp311-none-win32.whl", hash = "sha256:ebe684d7d26239e23d102a2bad2a358dedf18e462e8808778703427d1f584400"}, + {file = "watchfiles-0.21.0-cp311-none-win_amd64.whl", hash = "sha256:4566006aa44cb0d21b8ab53baf4b9c667a0ed23efe4aaad8c227bfba0bf15cbe"}, + {file = "watchfiles-0.21.0-cp311-none-win_arm64.whl", hash = "sha256:c550a56bf209a3d987d5a975cdf2063b3389a5d16caf29db4bdddeae49f22078"}, + {file = "watchfiles-0.21.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:51ddac60b96a42c15d24fbdc7a4bfcd02b5a29c047b7f8bf63d3f6f5a860949a"}, + {file = "watchfiles-0.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:511f0b034120cd1989932bf1e9081aa9fb00f1f949fbd2d9cab6264916ae89b1"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cfb92d49dbb95ec7a07511bc9efb0faff8fe24ef3805662b8d6808ba8409a71a"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f92944efc564867bbf841c823c8b71bb0be75e06b8ce45c084b46411475a915"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:642d66b75eda909fd1112d35c53816d59789a4b38c141a96d62f50a3ef9b3360"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d23bcd6c8eaa6324fe109d8cac01b41fe9a54b8c498af9ce464c1aeeb99903d6"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18d5b4da8cf3e41895b34e8c37d13c9ed294954907929aacd95153508d5d89d7"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b8d1eae0f65441963d805f766c7e9cd092f91e0c600c820c764a4ff71a0764c"}, + {file = "watchfiles-0.21.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1fd9a5205139f3c6bb60d11f6072e0552f0a20b712c85f43d42342d162be1235"}, + {file = "watchfiles-0.21.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a1e3014a625bcf107fbf38eece0e47fa0190e52e45dc6eee5a8265ddc6dc5ea7"}, + {file = "watchfiles-0.21.0-cp312-none-win32.whl", hash = "sha256:9d09869f2c5a6f2d9df50ce3064b3391d3ecb6dced708ad64467b9e4f2c9bef3"}, + {file = "watchfiles-0.21.0-cp312-none-win_amd64.whl", hash = "sha256:18722b50783b5e30a18a8a5db3006bab146d2b705c92eb9a94f78c72beb94094"}, + {file = "watchfiles-0.21.0-cp312-none-win_arm64.whl", hash = "sha256:a3b9bec9579a15fb3ca2d9878deae789df72f2b0fdaf90ad49ee389cad5edab6"}, + {file = "watchfiles-0.21.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:4ea10a29aa5de67de02256a28d1bf53d21322295cb00bd2d57fcd19b850ebd99"}, + {file = "watchfiles-0.21.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:40bca549fdc929b470dd1dbfcb47b3295cb46a6d2c90e50588b0a1b3bd98f429"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9b37a7ba223b2f26122c148bb8d09a9ff312afca998c48c725ff5a0a632145f7"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec8c8900dc5c83650a63dd48c4d1d245343f904c4b64b48798c67a3767d7e165"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8ad3fe0a3567c2f0f629d800409cd528cb6251da12e81a1f765e5c5345fd0137"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d353c4cfda586db2a176ce42c88f2fc31ec25e50212650c89fdd0f560ee507b"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:83a696da8922314ff2aec02987eefb03784f473281d740bf9170181829133765"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a03651352fc20975ee2a707cd2d74a386cd303cc688f407296064ad1e6d1562"}, + {file = "watchfiles-0.21.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3ad692bc7792be8c32918c699638b660c0de078a6cbe464c46e1340dadb94c19"}, + {file = "watchfiles-0.21.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06247538e8253975bdb328e7683f8515ff5ff041f43be6c40bff62d989b7d0b0"}, + {file = "watchfiles-0.21.0-cp38-none-win32.whl", hash = "sha256:9a0aa47f94ea9a0b39dd30850b0adf2e1cd32a8b4f9c7aa443d852aacf9ca214"}, + {file = "watchfiles-0.21.0-cp38-none-win_amd64.whl", hash = "sha256:8d5f400326840934e3507701f9f7269247f7c026d1b6cfd49477d2be0933cfca"}, + {file = "watchfiles-0.21.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:7f762a1a85a12cc3484f77eee7be87b10f8c50b0b787bb02f4e357403cad0c0e"}, + {file = "watchfiles-0.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6e9be3ef84e2bb9710f3f777accce25556f4a71e15d2b73223788d528fcc2052"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4c48a10d17571d1275701e14a601e36959ffada3add8cdbc9e5061a6e3579a5d"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c889025f59884423428c261f212e04d438de865beda0b1e1babab85ef4c0f01"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:66fac0c238ab9a2e72d026b5fb91cb902c146202bbd29a9a1a44e8db7b710b6f"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4a21f71885aa2744719459951819e7bf5a906a6448a6b2bbce8e9cc9f2c8128"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c9198c989f47898b2c22201756f73249de3748e0fc9de44adaf54a8b259cc0c"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f57c4461cd24fda22493109c45b3980863c58a25b8bec885ca8bea6b8d4b28"}, + {file = "watchfiles-0.21.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:853853cbf7bf9408b404754b92512ebe3e3a83587503d766d23e6bf83d092ee6"}, + {file = "watchfiles-0.21.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d5b1dc0e708fad9f92c296ab2f948af403bf201db8fb2eb4c8179db143732e49"}, + {file = "watchfiles-0.21.0-cp39-none-win32.whl", hash = "sha256:59137c0c6826bd56c710d1d2bda81553b5e6b7c84d5a676747d80caf0409ad94"}, + {file = "watchfiles-0.21.0-cp39-none-win_amd64.whl", hash = "sha256:6cb8fdc044909e2078c248986f2fc76f911f72b51ea4a4fbbf472e01d14faa58"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:ab03a90b305d2588e8352168e8c5a1520b721d2d367f31e9332c4235b30b8994"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:927c589500f9f41e370b0125c12ac9e7d3a2fd166b89e9ee2828b3dda20bfe6f"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bd467213195e76f838caf2c28cd65e58302d0254e636e7c0fca81efa4a2e62c"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02b73130687bc3f6bb79d8a170959042eb56eb3a42df3671c79b428cd73f17cc"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:08dca260e85ffae975448e344834d765983237ad6dc308231aa16e7933db763e"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:3ccceb50c611c433145502735e0370877cced72a6c70fd2410238bcbc7fe51d8"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57d430f5fb63fea141ab71ca9c064e80de3a20b427ca2febcbfcef70ff0ce895"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dd5fad9b9c0dd89904bbdea978ce89a2b692a7ee8a0ce19b940e538c88a809c"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:be6dd5d52b73018b21adc1c5d28ac0c68184a64769052dfeb0c5d9998e7f56a2"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b3cab0e06143768499384a8a5efb9c4dc53e19382952859e4802f294214f36ec"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c6ed10c2497e5fedadf61e465b3ca12a19f96004c15dcffe4bd442ebadc2d85"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43babacef21c519bc6631c5fce2a61eccdfc011b4bcb9047255e9620732c8097"}, + {file = "watchfiles-0.21.0.tar.gz", hash = "sha256:c76c635fabf542bb78524905718c39f736a98e5ab25b23ec6d4abede1a85a6a3"}, ] [package.dependencies] @@ -1814,251 +2012,264 @@ anyio = ">=3.0.0" [[package]] name = "websockets" -version = "11.0.3" +version = "12.0" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "websockets-11.0.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3ccc8a0c387629aec40f2fc9fdcb4b9d5431954f934da3eaf16cdc94f67dbfac"}, - {file = "websockets-11.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d67ac60a307f760c6e65dad586f556dde58e683fab03323221a4e530ead6f74d"}, - {file = "websockets-11.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:84d27a4832cc1a0ee07cdcf2b0629a8a72db73f4cf6de6f0904f6661227f256f"}, - {file = "websockets-11.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffd7dcaf744f25f82190856bc26ed81721508fc5cbf2a330751e135ff1283564"}, - {file = "websockets-11.0.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7622a89d696fc87af8e8d280d9b421db5133ef5b29d3f7a1ce9f1a7bf7fcfa11"}, - {file = "websockets-11.0.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bceab846bac555aff6427d060f2fcfff71042dba6f5fca7dc4f75cac815e57ca"}, - {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:54c6e5b3d3a8936a4ab6870d46bdd6ec500ad62bde9e44462c32d18f1e9a8e54"}, - {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:41f696ba95cd92dc047e46b41b26dd24518384749ed0d99bea0a941ca87404c4"}, - {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:86d2a77fd490ae3ff6fae1c6ceaecad063d3cc2320b44377efdde79880e11526"}, - {file = "websockets-11.0.3-cp310-cp310-win32.whl", hash = "sha256:2d903ad4419f5b472de90cd2d40384573b25da71e33519a67797de17ef849b69"}, - {file = "websockets-11.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:1d2256283fa4b7f4c7d7d3e84dc2ece74d341bce57d5b9bf385df109c2a1a82f"}, - {file = "websockets-11.0.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e848f46a58b9fcf3d06061d17be388caf70ea5b8cc3466251963c8345e13f7eb"}, - {file = "websockets-11.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aa5003845cdd21ac0dc6c9bf661c5beddd01116f6eb9eb3c8e272353d45b3288"}, - {file = "websockets-11.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b58cbf0697721120866820b89f93659abc31c1e876bf20d0b3d03cef14faf84d"}, - {file = "websockets-11.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:660e2d9068d2bedc0912af508f30bbeb505bbbf9774d98def45f68278cea20d3"}, - {file = "websockets-11.0.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c1f0524f203e3bd35149f12157438f406eff2e4fb30f71221c8a5eceb3617b6b"}, - {file = "websockets-11.0.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:def07915168ac8f7853812cc593c71185a16216e9e4fa886358a17ed0fd9fcf6"}, - {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b30c6590146e53149f04e85a6e4fcae068df4289e31e4aee1fdf56a0dead8f97"}, - {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:619d9f06372b3a42bc29d0cd0354c9bb9fb39c2cbc1a9c5025b4538738dbffaf"}, - {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:01f5567d9cf6f502d655151645d4e8b72b453413d3819d2b6f1185abc23e82dd"}, - {file = "websockets-11.0.3-cp311-cp311-win32.whl", hash = "sha256:e1459677e5d12be8bbc7584c35b992eea142911a6236a3278b9b5ce3326f282c"}, - {file = "websockets-11.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:e7837cb169eca3b3ae94cc5787c4fed99eef74c0ab9506756eea335e0d6f3ed8"}, - {file = "websockets-11.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9f59a3c656fef341a99e3d63189852be7084c0e54b75734cde571182c087b152"}, - {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2529338a6ff0eb0b50c7be33dc3d0e456381157a31eefc561771ee431134a97f"}, - {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34fd59a4ac42dff6d4681d8843217137f6bc85ed29722f2f7222bd619d15e95b"}, - {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:332d126167ddddec94597c2365537baf9ff62dfcc9db4266f263d455f2f031cb"}, - {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6505c1b31274723ccaf5f515c1824a4ad2f0d191cec942666b3d0f3aa4cb4007"}, - {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f467ba0050b7de85016b43f5a22b46383ef004c4f672148a8abf32bc999a87f0"}, - {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9d9acd80072abcc98bd2c86c3c9cd4ac2347b5a5a0cae7ed5c0ee5675f86d9af"}, - {file = "websockets-11.0.3-cp37-cp37m-win32.whl", hash = "sha256:e590228200fcfc7e9109509e4d9125eace2042fd52b595dd22bbc34bb282307f"}, - {file = "websockets-11.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:b16fff62b45eccb9c7abb18e60e7e446998093cdcb50fed33134b9b6878836de"}, - {file = "websockets-11.0.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fb06eea71a00a7af0ae6aefbb932fb8a7df3cb390cc217d51a9ad7343de1b8d0"}, - {file = "websockets-11.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8a34e13a62a59c871064dfd8ffb150867e54291e46d4a7cf11d02c94a5275bae"}, - {file = "websockets-11.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4841ed00f1026dfbced6fca7d963c4e7043aa832648671b5138008dc5a8f6d99"}, - {file = "websockets-11.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a073fc9ab1c8aff37c99f11f1641e16da517770e31a37265d2755282a5d28aa"}, - {file = "websockets-11.0.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68b977f21ce443d6d378dbd5ca38621755f2063d6fdb3335bda981d552cfff86"}, - {file = "websockets-11.0.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1a99a7a71631f0efe727c10edfba09ea6bee4166a6f9c19aafb6c0b5917d09c"}, - {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bee9fcb41db2a23bed96c6b6ead6489702c12334ea20a297aa095ce6d31370d0"}, - {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4b253869ea05a5a073ebfdcb5cb3b0266a57c3764cf6fe114e4cd90f4bfa5f5e"}, - {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1553cb82942b2a74dd9b15a018dce645d4e68674de2ca31ff13ebc2d9f283788"}, - {file = "websockets-11.0.3-cp38-cp38-win32.whl", hash = "sha256:f61bdb1df43dc9c131791fbc2355535f9024b9a04398d3bd0684fc16ab07df74"}, - {file = "websockets-11.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:03aae4edc0b1c68498f41a6772d80ac7c1e33c06c6ffa2ac1c27a07653e79d6f"}, - {file = "websockets-11.0.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:777354ee16f02f643a4c7f2b3eff8027a33c9861edc691a2003531f5da4f6bc8"}, - {file = "websockets-11.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8c82f11964f010053e13daafdc7154ce7385ecc538989a354ccc7067fd7028fd"}, - {file = "websockets-11.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3580dd9c1ad0701169e4d6fc41e878ffe05e6bdcaf3c412f9d559389d0c9e016"}, - {file = "websockets-11.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f1a3f10f836fab6ca6efa97bb952300b20ae56b409414ca85bff2ad241d2a61"}, - {file = "websockets-11.0.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:df41b9bc27c2c25b486bae7cf42fccdc52ff181c8c387bfd026624a491c2671b"}, - {file = "websockets-11.0.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279e5de4671e79a9ac877427f4ac4ce93751b8823f276b681d04b2156713b9dd"}, - {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1fdf26fa8a6a592f8f9235285b8affa72748dc12e964a5518c6c5e8f916716f7"}, - {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:69269f3a0b472e91125b503d3c0b3566bda26da0a3261c49f0027eb6075086d1"}, - {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:97b52894d948d2f6ea480171a27122d77af14ced35f62e5c892ca2fae9344311"}, - {file = "websockets-11.0.3-cp39-cp39-win32.whl", hash = "sha256:c7f3cb904cce8e1be667c7e6fef4516b98d1a6a0635a58a57528d577ac18a128"}, - {file = "websockets-11.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:c792ea4eabc0159535608fc5658a74d1a81020eb35195dd63214dcf07556f67e"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f2e58f2c36cc52d41f2659e4c0cbf7353e28c8c9e63e30d8c6d3494dc9fdedcf"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de36fe9c02995c7e6ae6efe2e205816f5f00c22fd1fbf343d4d18c3d5ceac2f5"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0ac56b661e60edd453585f4bd68eb6a29ae25b5184fd5ba51e97652580458998"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e052b8467dd07d4943936009f46ae5ce7b908ddcac3fda581656b1b19c083d9b"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:42cc5452a54a8e46a032521d7365da775823e21bfba2895fb7b77633cce031bb"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e6316827e3e79b7b8e7d8e3b08f4e331af91a48e794d5d8b099928b6f0b85f20"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8531fdcad636d82c517b26a448dcfe62f720e1922b33c81ce695d0edb91eb931"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c114e8da9b475739dde229fd3bc6b05a6537a88a578358bc8eb29b4030fac9c9"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e063b1865974611313a3849d43f2c3f5368093691349cf3c7c8f8f75ad7cb280"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:92b2065d642bf8c0a82d59e59053dd2fdde64d4ed44efe4870fa816c1232647b"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0ee68fe502f9031f19d495dae2c268830df2760c0524cbac5d759921ba8c8e82"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcacf2c7a6c3a84e720d1bb2b543c675bf6c40e460300b628bab1b1efc7c034c"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b67c6f5e5a401fc56394f191f00f9b3811fe843ee93f4a70df3c389d1adf857d"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d5023a4b6a5b183dc838808087033ec5df77580485fc533e7dab2567851b0a4"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ed058398f55163a79bb9f06a90ef9ccc063b204bb346c4de78efc5d15abfe602"}, - {file = "websockets-11.0.3-py3-none-any.whl", hash = "sha256:6681ba9e7f8f3b19440921e99efbb40fc89f26cd71bf539e45d8c8a25c976dc6"}, - {file = "websockets-11.0.3.tar.gz", hash = "sha256:88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016"}, + {file = "websockets-12.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d554236b2a2006e0ce16315c16eaa0d628dab009c33b63ea03f41c6107958374"}, + {file = "websockets-12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2d225bb6886591b1746b17c0573e29804619c8f755b5598d875bb4235ea639be"}, + {file = "websockets-12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eb809e816916a3b210bed3c82fb88eaf16e8afcf9c115ebb2bacede1797d2547"}, + {file = "websockets-12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c588f6abc13f78a67044c6b1273a99e1cf31038ad51815b3b016ce699f0d75c2"}, + {file = "websockets-12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5aa9348186d79a5f232115ed3fa9020eab66d6c3437d72f9d2c8ac0c6858c558"}, + {file = "websockets-12.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6350b14a40c95ddd53e775dbdbbbc59b124a5c8ecd6fbb09c2e52029f7a9f480"}, + {file = "websockets-12.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:70ec754cc2a769bcd218ed8d7209055667b30860ffecb8633a834dde27d6307c"}, + {file = "websockets-12.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6e96f5ed1b83a8ddb07909b45bd94833b0710f738115751cdaa9da1fb0cb66e8"}, + {file = "websockets-12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4d87be612cbef86f994178d5186add3d94e9f31cc3cb499a0482b866ec477603"}, + {file = "websockets-12.0-cp310-cp310-win32.whl", hash = "sha256:befe90632d66caaf72e8b2ed4d7f02b348913813c8b0a32fae1cc5fe3730902f"}, + {file = "websockets-12.0-cp310-cp310-win_amd64.whl", hash = "sha256:363f57ca8bc8576195d0540c648aa58ac18cf85b76ad5202b9f976918f4219cf"}, + {file = "websockets-12.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5d873c7de42dea355d73f170be0f23788cf3fa9f7bed718fd2830eefedce01b4"}, + {file = "websockets-12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3f61726cae9f65b872502ff3c1496abc93ffbe31b278455c418492016e2afc8f"}, + {file = "websockets-12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed2fcf7a07334c77fc8a230755c2209223a7cc44fc27597729b8ef5425aa61a3"}, + {file = "websockets-12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e332c210b14b57904869ca9f9bf4ca32f5427a03eeb625da9b616c85a3a506c"}, + {file = "websockets-12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5693ef74233122f8ebab026817b1b37fe25c411ecfca084b29bc7d6efc548f45"}, + {file = "websockets-12.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e9e7db18b4539a29cc5ad8c8b252738a30e2b13f033c2d6e9d0549b45841c04"}, + {file = "websockets-12.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6e2df67b8014767d0f785baa98393725739287684b9f8d8a1001eb2839031447"}, + {file = "websockets-12.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bea88d71630c5900690fcb03161ab18f8f244805c59e2e0dc4ffadae0a7ee0ca"}, + {file = "websockets-12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dff6cdf35e31d1315790149fee351f9e52978130cef6c87c4b6c9b3baf78bc53"}, + {file = "websockets-12.0-cp311-cp311-win32.whl", hash = "sha256:3e3aa8c468af01d70332a382350ee95f6986db479ce7af14d5e81ec52aa2b402"}, + {file = "websockets-12.0-cp311-cp311-win_amd64.whl", hash = "sha256:25eb766c8ad27da0f79420b2af4b85d29914ba0edf69f547cc4f06ca6f1d403b"}, + {file = "websockets-12.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0e6e2711d5a8e6e482cacb927a49a3d432345dfe7dea8ace7b5790df5932e4df"}, + {file = "websockets-12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:dbcf72a37f0b3316e993e13ecf32f10c0e1259c28ffd0a85cee26e8549595fbc"}, + {file = "websockets-12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12743ab88ab2af1d17dd4acb4645677cb7063ef4db93abffbf164218a5d54c6b"}, + {file = "websockets-12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b645f491f3c48d3f8a00d1fce07445fab7347fec54a3e65f0725d730d5b99cb"}, + {file = "websockets-12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9893d1aa45a7f8b3bc4510f6ccf8db8c3b62120917af15e3de247f0780294b92"}, + {file = "websockets-12.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f38a7b376117ef7aff996e737583172bdf535932c9ca021746573bce40165ed"}, + {file = "websockets-12.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:f764ba54e33daf20e167915edc443b6f88956f37fb606449b4a5b10ba42235a5"}, + {file = "websockets-12.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:1e4b3f8ea6a9cfa8be8484c9221ec0257508e3a1ec43c36acdefb2a9c3b00aa2"}, + {file = "websockets-12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9fdf06fd06c32205a07e47328ab49c40fc1407cdec801d698a7c41167ea45113"}, + {file = "websockets-12.0-cp312-cp312-win32.whl", hash = "sha256:baa386875b70cbd81798fa9f71be689c1bf484f65fd6fb08d051a0ee4e79924d"}, + {file = "websockets-12.0-cp312-cp312-win_amd64.whl", hash = "sha256:ae0a5da8f35a5be197f328d4727dbcfafa53d1824fac3d96cdd3a642fe09394f"}, + {file = "websockets-12.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5f6ffe2c6598f7f7207eef9a1228b6f5c818f9f4d53ee920aacd35cec8110438"}, + {file = "websockets-12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9edf3fc590cc2ec20dc9d7a45108b5bbaf21c0d89f9fd3fd1685e223771dc0b2"}, + {file = "websockets-12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8572132c7be52632201a35f5e08348137f658e5ffd21f51f94572ca6c05ea81d"}, + {file = "websockets-12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:604428d1b87edbf02b233e2c207d7d528460fa978f9e391bd8aaf9c8311de137"}, + {file = "websockets-12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a9d160fd080c6285e202327aba140fc9a0d910b09e423afff4ae5cbbf1c7205"}, + {file = "websockets-12.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87b4aafed34653e465eb77b7c93ef058516cb5acf3eb21e42f33928616172def"}, + {file = "websockets-12.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b2ee7288b85959797970114deae81ab41b731f19ebcd3bd499ae9ca0e3f1d2c8"}, + {file = "websockets-12.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7fa3d25e81bfe6a89718e9791128398a50dec6d57faf23770787ff441d851967"}, + {file = "websockets-12.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a571f035a47212288e3b3519944f6bf4ac7bc7553243e41eac50dd48552b6df7"}, + {file = "websockets-12.0-cp38-cp38-win32.whl", hash = "sha256:3c6cc1360c10c17463aadd29dd3af332d4a1adaa8796f6b0e9f9df1fdb0bad62"}, + {file = "websockets-12.0-cp38-cp38-win_amd64.whl", hash = "sha256:1bf386089178ea69d720f8db6199a0504a406209a0fc23e603b27b300fdd6892"}, + {file = "websockets-12.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ab3d732ad50a4fbd04a4490ef08acd0517b6ae6b77eb967251f4c263011a990d"}, + {file = "websockets-12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a1d9697f3337a89691e3bd8dc56dea45a6f6d975f92e7d5f773bc715c15dde28"}, + {file = "websockets-12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1df2fbd2c8a98d38a66f5238484405b8d1d16f929bb7a33ed73e4801222a6f53"}, + {file = "websockets-12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23509452b3bc38e3a057382c2e941d5ac2e01e251acce7adc74011d7d8de434c"}, + {file = "websockets-12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e5fc14ec6ea568200ea4ef46545073da81900a2b67b3e666f04adf53ad452ec"}, + {file = "websockets-12.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46e71dbbd12850224243f5d2aeec90f0aaa0f2dde5aeeb8fc8df21e04d99eff9"}, + {file = "websockets-12.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b81f90dcc6c85a9b7f29873beb56c94c85d6f0dac2ea8b60d995bd18bf3e2aae"}, + {file = "websockets-12.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a02413bc474feda2849c59ed2dfb2cddb4cd3d2f03a2fedec51d6e959d9b608b"}, + {file = "websockets-12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bbe6013f9f791944ed31ca08b077e26249309639313fff132bfbf3ba105673b9"}, + {file = "websockets-12.0-cp39-cp39-win32.whl", hash = "sha256:cbe83a6bbdf207ff0541de01e11904827540aa069293696dd528a6640bd6a5f6"}, + {file = "websockets-12.0-cp39-cp39-win_amd64.whl", hash = "sha256:fc4e7fa5414512b481a2483775a8e8be7803a35b30ca805afa4998a84f9fd9e8"}, + {file = "websockets-12.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:248d8e2446e13c1d4326e0a6a4e9629cb13a11195051a73acf414812700badbd"}, + {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f44069528d45a933997a6fef143030d8ca8042f0dfaad753e2906398290e2870"}, + {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c4e37d36f0d19f0a4413d3e18c0d03d0c268ada2061868c1e6f5ab1a6d575077"}, + {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d829f975fc2e527a3ef2f9c8f25e553eb7bc779c6665e8e1d52aa22800bb38b"}, + {file = "websockets-12.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2c71bd45a777433dd9113847af751aae36e448bc6b8c361a566cb043eda6ec30"}, + {file = "websockets-12.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0bee75f400895aef54157b36ed6d3b308fcab62e5260703add87f44cee9c82a6"}, + {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:423fc1ed29f7512fceb727e2d2aecb952c46aa34895e9ed96071821309951123"}, + {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27a5e9964ef509016759f2ef3f2c1e13f403725a5e6a1775555994966a66e931"}, + {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3181df4583c4d3994d31fb235dc681d2aaad744fbdbf94c4802485ececdecf2"}, + {file = "websockets-12.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b067cb952ce8bf40115f6c19f478dc71c5e719b7fbaa511359795dfd9d1a6468"}, + {file = "websockets-12.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:00700340c6c7ab788f176d118775202aadea7602c5cc6be6ae127761c16d6b0b"}, + {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e469d01137942849cff40517c97a30a93ae79917752b34029f0ec72df6b46399"}, + {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffefa1374cd508d633646d51a8e9277763a9b78ae71324183693959cf94635a7"}, + {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba0cab91b3956dfa9f512147860783a1829a8d905ee218a9837c18f683239611"}, + {file = "websockets-12.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2cb388a5bfb56df4d9a406783b7f9dbefb888c09b71629351cc6b036e9259370"}, + {file = "websockets-12.0-py3-none-any.whl", hash = "sha256:dc284bbc8d7c78a6c69e0c7325ab46ee5e40bb4d50e494d8131a07ef47500e9e"}, + {file = "websockets-12.0.tar.gz", hash = "sha256:81df9cbcbb6c260de1e007e58c011bfebe2dafc8435107b0537f393dd38c8b1b"}, ] [[package]] name = "wrapt" -version = "1.15.0" +version = "1.16.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 = [ - {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"}, +python-versions = ">=3.6" +files = [ + {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, + {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136"}, + {file = "wrapt-1.16.0-cp310-cp310-win32.whl", hash = "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d"}, + {file = "wrapt-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d"}, + {file = "wrapt-1.16.0-cp311-cp311-win32.whl", hash = "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362"}, + {file = "wrapt-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c"}, + {file = "wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc"}, + {file = "wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"}, + {file = "wrapt-1.16.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465"}, + {file = "wrapt-1.16.0-cp36-cp36m-win32.whl", hash = "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e"}, + {file = "wrapt-1.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966"}, + {file = "wrapt-1.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win32.whl", hash = "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6"}, + {file = "wrapt-1.16.0-cp38-cp38-win32.whl", hash = "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b"}, + {file = "wrapt-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537"}, + {file = "wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3"}, + {file = "wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35"}, + {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, + {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, ] [[package]] name = "yarl" -version = "1.9.2" +version = "1.9.4" description = "Yet another URL library" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82"}, - {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8"}, - {file = "yarl-1.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528"}, - {file = "yarl-1.9.2-cp310-cp310-win32.whl", hash = "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3"}, - {file = "yarl-1.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde"}, - {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6"}, - {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb"}, - {file = "yarl-1.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a"}, - {file = "yarl-1.9.2-cp311-cp311-win32.whl", hash = "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8"}, - {file = "yarl-1.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051"}, - {file = "yarl-1.9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582"}, - {file = "yarl-1.9.2-cp37-cp37m-win32.whl", hash = "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b"}, - {file = "yarl-1.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368"}, - {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac"}, - {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4"}, - {file = "yarl-1.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b"}, - {file = "yarl-1.9.2-cp38-cp38-win32.whl", hash = "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7"}, - {file = "yarl-1.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72"}, - {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9"}, - {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8"}, - {file = "yarl-1.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80"}, - {file = "yarl-1.9.2-cp39-cp39-win32.whl", hash = "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623"}, - {file = "yarl-1.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18"}, - {file = "yarl-1.9.2.tar.gz", hash = "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c38c9ddb6103ceae4e4498f9c08fac9b590c5c71b0370f98714768e22ac6fa66"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9e09c9d74f4566e905a0b8fa668c58109f7624db96a2171f21747abc7524234"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8477c1ee4bd47c57d49621a062121c3023609f7a13b8a46953eb6c9716ca392"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5ff2c858f5f6a42c2a8e751100f237c5e869cbde669a724f2062d4c4ef93551"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:357495293086c5b6d34ca9616a43d329317feab7917518bc97a08f9e55648455"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54525ae423d7b7a8ee81ba189f131054defdb122cde31ff17477951464c1691c"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:801e9264d19643548651b9db361ce3287176671fb0117f96b5ac0ee1c3530d53"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e516dc8baf7b380e6c1c26792610230f37147bb754d6426462ab115a02944385"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7d5aaac37d19b2904bb9dfe12cdb08c8443e7ba7d2852894ad448d4b8f442863"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:54beabb809ffcacbd9d28ac57b0db46e42a6e341a030293fb3185c409e626b8b"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bac8d525a8dbc2a1507ec731d2867025d11ceadcb4dd421423a5d42c56818541"}, + {file = "yarl-1.9.4-cp310-cp310-win32.whl", hash = "sha256:7855426dfbddac81896b6e533ebefc0af2f132d4a47340cee6d22cac7190022d"}, + {file = "yarl-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:848cd2a1df56ddbffeb375535fb62c9d1645dde33ca4d51341378b3f5954429b"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:35a2b9396879ce32754bd457d31a51ff0a9d426fd9e0e3c33394bf4b9036b099"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c7d56b293cc071e82532f70adcbd8b61909eec973ae9d2d1f9b233f3d943f2c"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8a1c6c0be645c745a081c192e747c5de06e944a0d21245f4cf7c05e457c36e0"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b3c1ffe10069f655ea2d731808e76e0f452fc6c749bea04781daf18e6039525"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:549d19c84c55d11687ddbd47eeb348a89df9cb30e1993f1b128f4685cd0ebbf8"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7409f968456111140c1c95301cadf071bd30a81cbd7ab829169fb9e3d72eae9"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e23a6d84d9d1738dbc6e38167776107e63307dfc8ad108e580548d1f2c587f42"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8b889777de69897406c9fb0b76cdf2fd0f31267861ae7501d93003d55f54fbe"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:03caa9507d3d3c83bca08650678e25364e1843b484f19986a527630ca376ecce"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e9035df8d0880b2f1c7f5031f33f69e071dfe72ee9310cfc76f7b605958ceb9"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:c0ec0ed476f77db9fb29bca17f0a8fcc7bc97ad4c6c1d8959c507decb22e8572"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:ee04010f26d5102399bd17f8df8bc38dc7ccd7701dc77f4a68c5b8d733406958"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:49a180c2e0743d5d6e0b4d1a9e5f633c62eca3f8a86ba5dd3c471060e352ca98"}, + {file = "yarl-1.9.4-cp311-cp311-win32.whl", hash = "sha256:81eb57278deb6098a5b62e88ad8281b2ba09f2f1147c4767522353eaa6260b31"}, + {file = "yarl-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:d1d2532b340b692880261c15aee4dc94dd22ca5d61b9db9a8a361953d36410b1"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d2454f0aef65ea81037759be5ca9947539667eecebca092733b2eb43c965a81"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:44d8ffbb9c06e5a7f529f38f53eda23e50d1ed33c6c869e01481d3fafa6b8142"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aaaea1e536f98754a6e5c56091baa1b6ce2f2700cc4a00b0d49eca8dea471074"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3777ce5536d17989c91696db1d459574e9a9bd37660ea7ee4d3344579bb6f129"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fc5fc1eeb029757349ad26bbc5880557389a03fa6ada41703db5e068881e5f2"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea65804b5dc88dacd4a40279af0cdadcfe74b3e5b4c897aa0d81cf86927fee78"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa102d6d280a5455ad6a0f9e6d769989638718e938a6a0a2ff3f4a7ff8c62cc4"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09efe4615ada057ba2d30df871d2f668af661e971dfeedf0c159927d48bbeff0"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:008d3e808d03ef28542372d01057fd09168419cdc8f848efe2804f894ae03e51"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6f5cb257bc2ec58f437da2b37a8cd48f666db96d47b8a3115c29f316313654ff"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:992f18e0ea248ee03b5a6e8b3b4738850ae7dbb172cc41c966462801cbf62cf7"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0e9d124c191d5b881060a9e5060627694c3bdd1fe24c5eecc8d5d7d0eb6faabc"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3986b6f41ad22988e53d5778f91855dc0399b043fc8946d4f2e68af22ee9ff10"}, + {file = "yarl-1.9.4-cp312-cp312-win32.whl", hash = "sha256:4b21516d181cd77ebd06ce160ef8cc2a5e9ad35fb1c5930882baff5ac865eee7"}, + {file = "yarl-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a9bd00dc3bc395a662900f33f74feb3e757429e545d831eef5bb280252631984"}, + {file = "yarl-1.9.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63b20738b5aac74e239622d2fe30df4fca4942a86e31bf47a81a0e94c14df94f"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d7f7de27b8944f1fee2c26a88b4dabc2409d2fea7a9ed3df79b67277644e17"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c74018551e31269d56fab81a728f683667e7c28c04e807ba08f8c9e3bba32f14"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca06675212f94e7a610e85ca36948bb8fc023e458dd6c63ef71abfd482481aa5"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aef935237d60a51a62b86249839b51345f47564208c6ee615ed2a40878dccdd"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b134fd795e2322b7684155b7855cc99409d10b2e408056db2b93b51a52accc7"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d25039a474c4c72a5ad4b52495056f843a7ff07b632c1b92ea9043a3d9950f6e"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f7d6b36dd2e029b6bcb8a13cf19664c7b8e19ab3a58e0fefbb5b8461447ed5ec"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:957b4774373cf6f709359e5c8c4a0af9f6d7875db657adb0feaf8d6cb3c3964c"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d7eeb6d22331e2fd42fce928a81c697c9ee2d51400bd1a28803965883e13cead"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6a962e04b8f91f8c4e5917e518d17958e3bdee71fd1d8b88cdce74dd0ebbf434"}, + {file = "yarl-1.9.4-cp37-cp37m-win32.whl", hash = "sha256:f3bc6af6e2b8f92eced34ef6a96ffb248e863af20ef4fde9448cc8c9b858b749"}, + {file = "yarl-1.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4d7a90a92e528aadf4965d685c17dacff3df282db1121136c382dc0b6014d2"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ec61d826d80fc293ed46c9dd26995921e3a82146feacd952ef0757236fc137be"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8be9e837ea9113676e5754b43b940b50cce76d9ed7d2461df1af39a8ee674d9f"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bef596fdaa8f26e3d66af846bbe77057237cb6e8efff8cd7cc8dff9a62278bbf"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d47552b6e52c3319fede1b60b3de120fe83bde9b7bddad11a69fb0af7db32f1"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84fc30f71689d7fc9168b92788abc977dc8cefa806909565fc2951d02f6b7d57"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4aa9741085f635934f3a2583e16fcf62ba835719a8b2b28fb2917bb0537c1dfa"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:206a55215e6d05dbc6c98ce598a59e6fbd0c493e2de4ea6cc2f4934d5a18d130"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07574b007ee20e5c375a8fe4a0789fad26db905f9813be0f9fef5a68080de559"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a2e2433eb9344a163aced6a5f6c9222c0786e5a9e9cac2c89f0b28433f56e23"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6ad6d10ed9b67a382b45f29ea028f92d25bc0bc1daf6c5b801b90b5aa70fb9ec"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6fe79f998a4052d79e1c30eeb7d6c1c1056ad33300f682465e1b4e9b5a188b78"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a825ec844298c791fd28ed14ed1bffc56a98d15b8c58a20e0e08c1f5f2bea1be"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8619d6915b3b0b34420cf9b2bb6d81ef59d984cb0fde7544e9ece32b4b3043c3"}, + {file = "yarl-1.9.4-cp38-cp38-win32.whl", hash = "sha256:686a0c2f85f83463272ddffd4deb5e591c98aac1897d65e92319f729c320eece"}, + {file = "yarl-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:a00862fb23195b6b8322f7d781b0dc1d82cb3bcac346d1e38689370cc1cc398b"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:604f31d97fa493083ea21bd9b92c419012531c4e17ea6da0f65cacdcf5d0bd27"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a854227cf581330ffa2c4824d96e52ee621dd571078a252c25e3a3b3d94a1b1"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ba6f52cbc7809cd8d74604cce9c14868306ae4aa0282016b641c661f981a6e91"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6327976c7c2f4ee6816eff196e25385ccc02cb81427952414a64811037bbc8b"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8397a3817d7dcdd14bb266283cd1d6fc7264a48c186b986f32e86d86d35fbac5"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0381b4ce23ff92f8170080c97678040fc5b08da85e9e292292aba67fdac6c34"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d32a2594cb5d565d358a92e151315d1b2268bc10f4610d098f96b147370136"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddb2a5c08a4eaaba605340fdee8fc08e406c56617566d9643ad8bf6852778fc7"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:26a1dc6285e03f3cc9e839a2da83bcbf31dcb0d004c72d0730e755b33466c30e"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:18580f672e44ce1238b82f7fb87d727c4a131f3a9d33a5e0e82b793362bf18b4"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:29e0f83f37610f173eb7e7b5562dd71467993495e568e708d99e9d1944f561ec"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:1f23e4fe1e8794f74b6027d7cf19dc25f8b63af1483d91d595d4a07eca1fb26c"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db8e58b9d79200c76956cefd14d5c90af54416ff5353c5bfd7cbe58818e26ef0"}, + {file = "yarl-1.9.4-cp39-cp39-win32.whl", hash = "sha256:c7224cab95645c7ab53791022ae77a4509472613e839dab722a72abe5a684575"}, + {file = "yarl-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:824d6c50492add5da9374875ce72db7a0733b29c2394890aef23d533106e2b15"}, + {file = "yarl-1.9.4-py3-none-any.whl", hash = "sha256:928cecb0ef9d5a7946eb6ff58417ad2fe9375762382f1bf5c55e61645f2c43ad"}, + {file = "yarl-1.9.4.tar.gz", hash = "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf"}, ] [package.dependencies] @@ -2067,19 +2278,19 @@ multidict = ">=4.0" [[package]] name = "zipp" -version = "3.16.2" +version = "3.18.1" description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, - {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, + {file = "zipp-3.18.1-py3-none-any.whl", hash = "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b"}, + {file = "zipp-3.18.1.tar.gz", hash = "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [extras] docs = [] @@ -2087,4 +2298,4 @@ docs = [] [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "6774f80fd8775604c99eaf288c30bb60f6ad6b61a1a6c3a1401e48a9da30e8af" +content-hash = "e937d6edba79affd414a8292691a01647e2b9080b83b8e3b9fefa982d2d8ac2b" diff --git a/pyproject.toml b/pyproject.toml index b8cc27f..ca83cf8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "ipumspy" -version = "0.4.1" +version = "0.5.0" description = "A collection of tools for working with IPUMS data" authors = ["Kevin H. Wilson ", "Renae Rodgers "] @@ -13,14 +13,13 @@ packages = [ python = "^3.8" pandas = "^1.5.2" click = "^8.0.0" -pyarrow = "^10.0.0" +pyarrow = "^14.0.2" requests = {extras = ["use_chardet_on_py3"], version = "^2.26.0"} importlib-metadata = "^4.13.0" PyYAML = "^6.0.1" -beautifulsoup4 = "^4.11.1" [tool.poetry.dev-dependencies] -black = "^22.3.0" +black = "^24.4.0" pylint = "^2.7.4" isort = "^5.8.0" mypy = "^1.0.1" @@ -29,7 +28,7 @@ mypy = "^1.0.1" pytest = "^7.2.2" pytest-cov = "^4.0.0" python-dotenv = "^1.0.0" -fastapi = "^0.92.0" +fastapi = "^0.109.2" uvicorn = {extras = ["standard"], version = "^0.20.0"} pytest-recording = "^0.12.2" vcrpy = "^4.2.1" @@ -38,6 +37,7 @@ vcrpy = "^4.2.1" optional=true [tool.poetry.group.docs.dependencies] +beautifulsoup4 = "^4.12.3" Sphinx = "^6.1.3" sphinx-autodoc-typehints = "^1.22.0" sphinx-copybutton = "^0.5.0" @@ -46,6 +46,7 @@ furo = "^2022.12.7" [tool.poetry.extras] docs = [ + "beautifulsoup4", "Sphinx", "sphinx-autodoc-typehints", "sphinx-copybutton", diff --git a/src/ipumspy/__init__.py b/src/ipumspy/__init__.py index ec2cc2a..1c1a01a 100644 --- a/src/ipumspy/__init__.py +++ b/src/ipumspy/__init__.py @@ -1,5 +1,6 @@ """ Convenience imports for ipumspy """ + from .__version__ import __version__ from .api import * diff --git a/src/ipumspy/__version__.py b/src/ipumspy/__version__.py index 9451f21..1c7c8ae 100644 --- a/src/ipumspy/__version__.py +++ b/src/ipumspy/__version__.py @@ -1,6 +1,7 @@ """ Simple version wrapper """ + try: import importlib.metadata as metadata except ImportError: diff --git a/src/ipumspy/api/__init__.py b/src/ipumspy/api/__init__.py index 96c1b93..8c9b6a1 100644 --- a/src/ipumspy/api/__init__.py +++ b/src/ipumspy/api/__init__.py @@ -1,6 +1,7 @@ """ Convenience imports from api """ + from .core import IpumsApiClient from .exceptions import * from .extract import * diff --git a/src/ipumspy/api/core.py b/src/ipumspy/api/core.py index ffe52f8..c5e30ec 100644 --- a/src/ipumspy/api/core.py +++ b/src/ipumspy/api/core.py @@ -1,6 +1,7 @@ """ Core utilities for interacting with the IPUMS API """ + import copy import time import warnings @@ -24,7 +25,7 @@ IpumsTimeoutException, TransientIpumsApiException, ) -from .extract import BaseExtract, OtherExtract +from .extract import BaseExtract, MicrodataExtract class ModifiedIpumsExtract(Warning): @@ -75,7 +76,7 @@ class IpumsApiClient: def __init__( self, api_key: str, - base_url: str = "https://api.ipums.org/extracts", + base_url: str = "https://api.ipums.org", api_version: str = 2, num_retries: int = 3, session: Optional[requests.Session] = None, @@ -164,27 +165,18 @@ def submit_extract( Returns: The number of the extract for the passed user account """ - # define extract collection + if not isinstance(extract, BaseExtract): extract = copy.deepcopy(extract) - if "collection" in extract: - collection = collection or extract["collection"] - del extract["collection"] - else: - if not collection: - ValueError("You must provide a collection") + if "microdata" in BaseExtract._collection_type_to_extract: + extract = MicrodataExtract(extract) - if collection in BaseExtract._collection_to_extract: - extract_type = BaseExtract._collection_to_extract[collection] - extract = extract_type(**extract) - else: - extract = OtherExtract(collection, extract) # if no api version was provided on instantiation of extract object # or in extract definition dict, assign it to the default if extract.api_version is None: extract.api_version = self.api_version response = self.post( - self.base_url, + f"{self.base_url}/extracts", params={"collection": extract.collection, "version": extract.api_version}, json=extract.build(), ) @@ -218,7 +210,7 @@ def extract_status( try: response = self.get( - f"{self.base_url}/{extract_id}", + f"{self.base_url}/extracts/{extract_id}", params={"collection": collection, "version": self.api_version}, ) except IpumsNotFound: @@ -285,7 +277,7 @@ def download_extract( ) response = self.get( - f"{self.base_url}/{extract_id}", + f"{self.base_url}/extracts/{extract_id}", params={"collection": collection, "version": self.api_version}, ) @@ -401,7 +393,7 @@ def get_previous_extracts(self, collection: str, limit: int = 10) -> List[Dict]: """ # TODO: Wrap results in Extract objects. output = self.get( - self.base_url, + f"{self.base_url}/extracts", params={ "collection": collection, "pageSize": limit, @@ -433,7 +425,7 @@ def get_extract_info( return extract._info else: extract_info = self.get( - f"{self.base_url}/{extract_id}", + f"{self.base_url}/extracts/{extract_id}", params={"collection": collection, "version": self.api_version}, ).json() new_line = "\n" @@ -461,11 +453,9 @@ def get_extract_by_id( An IPUMS extract object """ extract_def = self.get_extract_info(extract_id, collection) - if collection in BaseExtract._collection_to_extract: - extract_type = BaseExtract._collection_to_extract[collection] - extract = extract_type(**extract_def["extractDefinition"]) - else: - extract = OtherExtract(collection, extract) + if "microdata" in BaseExtract._collection_type_to_extract: + extract = MicrodataExtract(**extract_def["extractDefinition"]) + return extract def extract_is_expired( @@ -490,13 +480,14 @@ def extract_is_expired( return False def _get_pages( - self, collection: str, page_size: Optional[int] = 2500 + self, collection: str, endpoint: str, page_size: Optional[int] = 2500 ) -> Generator[Dict, None, None]: """ An IPUMS API pages generator. Args: collection: An IPUMS data collection + endpoint: An IPUMS API endpoint page_size: The number of items to return per page. Default to maximum page size, 2500. Yields: @@ -505,7 +496,7 @@ def _get_pages( # made this a private method looking forward to making this a more # general purpose generator for non-extract endpoints first_page = self.get( - self.base_url, + f"{self.base_url}/{endpoint}", params={ "collection": collection, "version": self.api_version, @@ -521,7 +512,7 @@ def _get_pages( next_page = page["links"]["nextPage"] def get_extract_history( - self, collection: str, page_size: Optional[int] = 2500 + self, collection: str, page_size: Optional[int] = 500 ) -> Generator[Dict, None, None]: """ Retrieve extract history for a specific collection. @@ -533,7 +524,7 @@ def get_extract_history( Yields: An iterator of extract history pages """ - yield from self._get_pages(collection, page_size) + yield from self._get_pages(collection, "extracts", page_size) def get_all_sample_info(self, collection: str) -> Dict: """ @@ -546,9 +537,14 @@ def get_all_sample_info(self, collection: str) -> Dict: A dictionary of IPUMS sample descriptions and IPUMS sample IDs; keys are sample ids, values are sample descriptions """ - # shoehorn since this is the only metadata api endpoint avaialble - url = f"https://api.ipums.org/metadata/{collection}/samples" - samples = self.get(url, params={"version": self.api_version}).json() + samples = self.get( + f"{self.base_url}/metadata/samples", + params={ + "collection": collection, + "pageSize": 2500, + "version": self.api_version, + }, + ).json() # make it into the expected dict samples_dict = {} for item in samples["data"]: diff --git a/src/ipumspy/api/exceptions.py b/src/ipumspy/api/exceptions.py index 3c963f2..9076bd5 100644 --- a/src/ipumspy/api/exceptions.py +++ b/src/ipumspy/api/exceptions.py @@ -1,6 +1,7 @@ """ Exceptions which can arise in calls to the IPUMS API """ + __all__ = ["IpumsApiException", "TransientIpumsApiException"] diff --git a/src/ipumspy/api/extract.py b/src/ipumspy/api/extract.py index 265f21b..3933e87 100644 --- a/src/ipumspy/api/extract.py +++ b/src/ipumspy/api/extract.py @@ -1,6 +1,7 @@ """ Wrappers for payloads to ship to the IPUMS API """ + from __future__ import annotations import warnings @@ -9,6 +10,7 @@ import requests import json import inspect +from abc import ABC, abstractmethod from ipumspy.ddi import Codebook @@ -16,10 +18,6 @@ from .exceptions import IpumsExtractNotSubmitted -class DefaultCollectionWarning(Warning): - pass - - class ApiVersionWarning(Warning): pass @@ -29,7 +27,28 @@ class ModifiedExtractWarning(Warning): @dataclass -class Variable: +class IpumsObject(ABC): + + def update(self, attribute: str, value: Any): + """ + Update Variable features + + Args: + attribute: name of the object attribute to update + value: values with which to update the `attribute` + """ + if hasattr(self, attribute): + setattr(self, attribute, value) + else: + raise KeyError(f"{type(self).__name__} has no attribute '{attribute}'.") + + @abstractmethod + def build(self): + pass + + +@dataclass +class Variable(IpumsObject): """ IPUMS variable object to include in an IPUMS extract object. """ @@ -48,19 +67,6 @@ class Variable: def __post_init__(self): self.name = self.name.upper() - def update(self, attribute: str, value: Any): - """ - Update Variable features - - Args: - attribute: name of the Variable attribute to update - value: values with which to update the `attribute` - """ - if hasattr(self, attribute): - setattr(self, attribute, value) - else: - raise KeyError(f"Variable has no attribute '{attribute}'.") - def build(self): """Format Variable information for API Extract submission""" built_var = self.__dict__.copy() @@ -74,7 +80,7 @@ def build(self): @dataclass -class Sample: +class Sample(IpumsObject): """ IPUMS sample object to include in an IPUMS extract object. """ @@ -87,18 +93,36 @@ class Sample: def __post_init__(self): self.id = self.id.lower() - def update(self, attribute: str, value: Any): - """ - Update Sample features + def build(self): + raise NotImplementedError - Args: - attribute: name of the Sample attribute to update - value: values with which to update the `attribute` - """ - if hasattr(self, attribute): - setattr(self, attribute, value) + +@dataclass +class TimeUseVariable(IpumsObject): + name: str + """IPUMS Time Use Variable name""" + owner: Optional[str] = "" + """email address associated with your IPUMS account. Only required for user-defined Time Use Variables.""" + + def __post_init__(self): + self.name = self.name.lower() + + def build(self): + """Format Time Use Variable information for API Extract submission""" + built_tuv = self.__dict__.copy() + # don't repeat the variable name + built_tuv.pop("name") + # only include the owner field if one is specified + if self.owner != "": + if "@" not in self.owner: + raise ValueError( + "'owner' must be the email address associated with your IPUMS user account." + ) + else: + built_tuv["owner"] = built_tuv.pop("owner") else: - raise KeyError(f"Sample has no attribute '{attribute}'.") + built_tuv.pop("owner") + return built_tuv def _unpack_samples_dict(dct: dict) -> List[Sample]: @@ -125,8 +149,18 @@ def _unpack_variables_dict(dct: dict) -> List[Variable]: return vars +def _unpack_tuv_dict(dct: dict) -> List[TimeUseVariable]: + tuvs = [] + for i in dct.keys(): + tuv_obj = TimeUseVariable(name=i) + if "owner" in dct[i]: + tuv_obj.update("owner", dct[i]["owner"]) + tuvs.append(tuv_obj) + return tuvs + + class BaseExtract: - _collection_to_extract: Dict[(str, str), Type[BaseExtract]] = {} + _collection_type_to_extract: Dict[(str, str), Type[BaseExtract]] = {} def __init__(self): """ @@ -140,27 +174,14 @@ def __init__(self): self._info: Optional[Dict[str, Any]] = None self.api_version: Optional[str] = None - def __init_subclass__(cls, collection: str, **kwargs): + def __init_subclass__(cls, collection_type: str, **kwargs): super().__init_subclass__(**kwargs) - cls.collection = collection - BaseExtract._collection_to_extract[collection] = cls + cls.collection_type = collection_type + BaseExtract._collection_type_to_extract[collection_type] = cls + # cls.collection = collection + # BaseExtract._collection_to_extract[collection] = cls def _kwarg_warning(self, kwargs_dict: Dict[str, Any]): - try: - if kwargs_dict["collection"] == self.collection: - # collection kwarg is same as default, nothing to do - pass - elif kwargs_dict["collection"] != self.collection: - warnings.warn( - f"This extract object already has a default collection " - f"{self.collection}. Collection Key Word Arguments " - f"are ignored.", - DefaultCollectionWarning, - ) - except KeyError: - # if there collection isn't specified - # then nothing to warn about there - pass # raise kwarg warnings if they exist if "warnings" in kwargs_dict.keys(): newline = "\n" @@ -206,6 +227,10 @@ def extract_info(self) -> Dict[str, Any]: def _snake_to_camel(self, kwarg_dict): for key in list(kwarg_dict.keys()): + # if the value of the kwarg is also a dict + if isinstance(kwarg_dict[key], dict): + self._snake_to_camel(kwarg_dict[key]) + # create camelCase equivalent key_list = key.split("_") # join capitalized versions of all parts except the first @@ -216,19 +241,30 @@ def _snake_to_camel(self, kwarg_dict): kwarg_dict[camel_key] = kwarg_dict[key] # pop the snake_case key kwarg_dict.pop(key) - return kwarg_dict def _validate_list_args(self, list_arg, arg_obj): # this bit feels extra sketch, but it seems like a better solution # than just having the BaseExtract(**kwargs) method of instantiating # an extract object quietly leave out variable-level extract features + + # before diving into any duplicate validation, make sure the list argument the user provided + # is only strings or only IPUMS objects. Raise a useful error and ask the user to fix themselves + if not all(isinstance(i, str) for i in list_arg) and not all( + isinstance(i, IpumsObject) for i in list_arg + ): + raise TypeError( + f"The items in {list_arg} must all be string type or {arg_obj} type." + ) if isinstance(list_arg, dict) and arg_obj is Variable: args = _unpack_variables_dict(list_arg) return args elif isinstance(list_arg, dict) and arg_obj is Sample: args = _unpack_samples_dict(list_arg) return args + elif isinstance(list_arg, dict) and arg_obj is TimeUseVariable: + args = _unpack_tuv_dict(list_arg) + return args # Make sure extracts don't get built with duplicate variables or samples # if the argument is a list of objects, make sure there are not objects with duplicate names elif all(isinstance(i, arg_obj) for i in list_arg): @@ -306,117 +342,55 @@ def _update_variable_feature(self, variable, feature, specification): f"Expected a string or Variable object; {type(variable)} received." ) - def attach_characteristics(self, variable: Union[Variable, str], of: List[str]): - """ - A method to update existing IPUMS Extract Variable objects - with the IPUMS attach characteristics feature. - Args: - variable: a Variable object or a string variable name - of: a list of records for which to create a variable on the individual record. - Allowable values include "mother", "father", "spouse", "head". For IPUMS - collection that identify same sex couples can also accept "mother2" and "father2" - values in this list. If either "" or "2" values are included, - their same sex counterpart will automatically be included in the extract. - """ - self._update_variable_feature(variable, "attached_characteristics", of) - - def add_data_quality_flags( - self, variable: Union[Variable, str, List[Variable], List[str]] - ): - """ - A method to update existing IPUMS Extract Variable objects to include that - variable's data quality flag in the extract if it exists. - - Args: - variable: a Variable object or a string variable name - - """ - if isinstance(variable, list): - for v in variable: - self._update_variable_feature(v, "data_quality_flags", True) - else: - self._update_variable_feature(variable, "data_quality_flags", True) - - def select_cases( - self, - variable: Union[Variable, str], - values: List[Union[int, str]], - general: bool = True, - ): - """ - A method to update existing IPUMS Extract Variable objects to select cases - with the specified values of that IPUMS variable. - - Args: - variable: a Variable object or a string variable name - values: a list of values for which to select records - general: set to False to select cases on detailed codes. Defaults to True. - """ - # stringify values - values = [str(v) for v in values] - if general: - self._update_variable_feature( - variable, "case_selections", {"general": values} - ) - else: - self._update_variable_feature( - variable, "case_selections", {"detailed": values} - ) - - -class OtherExtract(BaseExtract, collection="other"): - def __init__(self, collection: str, details: Optional[Dict[str, Any]]): - """ - A generic extract object for working with collections that are not - yet officially supported by this API library - """ - - super().__init__() - self.collection = collection - """Name of an IPUMS data collection""" - self.details = details - """dictionary containing variable names and sample IDs""" - - def build(self) -> Dict[str, Any]: - """ - Convert the object into a dictionary to be passed to the IPUMS API - as a JSON string - """ - return self.details - - -class UsaExtract(BaseExtract, collection="usa"): +class MicrodataExtract(BaseExtract, collection_type="microdata"): def __init__( self, + collection: str, samples: Union[List[str], List[Sample]], variables: Union[List[str], List[Variable]], - description: str = "My IPUMS USA extract", + description: str = "", data_format: str = "fixed_width", data_structure: Dict = {"rectangular": {"on": "P"}}, + time_use_variables: Union[List[str], List[TimeUseVariable]] = None, **kwargs, ): """ - Defining an IPUMS USA extract. + Class for defining an extract for an IPUMS microdata collection. Args: - samples: list of IPUMS USA sample IDs - variables: list of IPUMS USA variable names + collection: name of an IPUMS data collection + samples: list of sample IDs from an IPUMS microdata collection + variables: list of variable names from an IPUMS microdata collection description: short description of your extract data_format: fixed_width and csv supported - data_structure: nested dict with "rectangular" or "hierarchical" as first-level key. + data_structure: nested dict with "rectangular", "hierarchical", or "household-only" as first-level key. "rectangular" extracts require further specification of "on" : . Default {"rectangular": "on": "P"} requests an extract rectangularized on the "P" record. + time_use_variables: a list of IPUMS Time Use Variable names or Objects. This argument is only valid for IPUMS ATUS, + MTUS, and AHTUS data collections. If the list contains user-created Time Use Variables, these + must be passed as a list of TimeUseVariable objects with the 'owner' field specified. + + Keyword Args: + data_quality_flags: a boolean value which, if True, adds the data quality flags for each variable included in the `variables` list + if a data quality flag exists for that variable. + sample_members: a dictionary of non-default sample members to include for Time Use collections where keys are strings + indicating sample member type and values are boolean. This argument is only valid for IPUMS ATUS, + MTUS, and AHTUS data collections. Valid keys include 'include_non_respondents' and 'include_household_members'. """ super().__init__() + self.collection_type = self.collection_type + """IPUMS Collection type (microdata currently the only valid value)""" + self.collection = collection self.samples = self._validate_list_args(samples, Sample) self.variables = self._validate_list_args(variables, Variable) - self.description = description + if description == "": + self.description = f"My IPUMS {collection.upper()} extract" + else: + self.description = description self.data_format = data_format self.data_structure = data_structure - self.collection = self.collection - """Name of an IPUMS data collection""" self.api_version = ( self.extract_api_version(kwargs) if len(kwargs.keys()) > 0 @@ -428,12 +402,26 @@ def __init__( # make the kwargs camelCase self.kwargs = self._snake_to_camel(kwargs) + # I don't love this, but it also seems overkill to make a seperate extract class + # just for these features + self.time_use_variables = time_use_variables + if self.time_use_variables is not None: + # XXX remove when the server-side error messaging is improved + if self.collection in ["atus", "mtus", "ahtus"]: + self.time_use_variables = self._validate_list_args( + self.time_use_variables, TimeUseVariable + ) + else: + raise ValueError( + f"Time use variables are unavailable for the IPUMS {self.collection.upper()} data collection" + ) + def build(self) -> Dict[str, Any]: """ Convert the object into a dictionary to be passed to the IPUMS API as a JSON string """ - return { + built = { "description": self.description, "dataFormat": self.data_format, "dataStructure": self.data_structure, @@ -446,129 +434,75 @@ def build(self) -> Dict[str, Any]: **self.kwargs, } + if self.time_use_variables is not None: + built["timeUseVariables"] = { + tuv.name.upper(): tuv.build() for tuv in self.time_use_variables + } -class CpsExtract(BaseExtract, collection="cps"): - def __init__( - self, - samples: Union[List[str], List[Sample]], - variables: Union[List[str], List[Variable]], - description: str = "My IPUMS CPS extract", - data_format: str = "fixed_width", - data_structure: Dict = {"rectangular": {"on": "P"}}, - **kwargs, - ): + # XXX shoehorn fix until server-side bug is fixed + if self.collection == "meps": + for variable in built["variables"].keys(): + built["variables"][variable].pop("attachedCharacteristics") + + return built + + def attach_characteristics(self, variable: Union[Variable, str], of: List[str]): """ - Defining an IPUMS CPS extract. + A method to update existing IPUMS Extract Variable objects + with the IPUMS attach characteristics feature. Args: - samples: list of IPUMS CPS sample IDs - variables: list of IPUMS CPS variable names - description: short description of your extract - data_format: fixed_width and csv supported - data_structure: nested dict with "rectangular" or "hierarchical" as first-level key. - "rectangular" extracts require further specification of "on" : . - Default {"rectangular": "on": "P"} requests an extract rectangularized on the "P" record. + variable: a Variable object or a string variable name + of: a list of records for which to create a variable on the individual record. + Allowable values include "mother", "father", "spouse", "head". For IPUMS + collection that identify same sex couples can also accept "mother2" and "father2" + values in this list. If either "" or "2" values are included, + their same sex counterpart will automatically be included in the extract. """ + self._update_variable_feature(variable, "attached_characteristics", of) - super().__init__() - self.samples = self._validate_list_args(samples, Sample) - self.variables = self._validate_list_args(variables, Variable) - self.description = description - self.data_format = data_format - self.data_structure = data_structure - self.collection = self.collection - """Name of an IPUMS data collection""" - self.api_version = ( - self.extract_api_version(kwargs) - if len(kwargs.keys()) > 0 - else self.api_version - ) - """IPUMS API version number""" + def add_data_quality_flags( + self, variable: Union[Variable, str, List[Variable], List[str]] + ): + """ + A method to update existing IPUMS Extract Variable objects to include that + variable's data quality flag in the extract if it exists. - # check kwargs for conflicts with defaults - self._kwarg_warning(kwargs) - # make the kwargs camelCase - self.kwargs = self._snake_to_camel(kwargs) + Args: + variable: a Variable object or a string variable name - def build(self) -> Dict[str, Any]: - """ - Convert the object into a dictionary to be passed to the IPUMS API - as a JSON string """ - return { - "description": self.description, - "dataFormat": self.data_format, - "dataStructure": self.data_structure, - "samples": {sample.id: {} for sample in self.samples}, - "variables": { - variable.name.upper(): variable.build() for variable in self.variables - }, - "collection": self.collection, - "version": self.api_version, - **self.kwargs, - } - + if isinstance(variable, list): + for v in variable: + self._update_variable_feature(v, "data_quality_flags", True) + else: + self._update_variable_feature(variable, "data_quality_flags", True) -class IpumsiExtract(BaseExtract, collection="ipumsi"): - def __init__( + def select_cases( self, - samples: Union[List[str], List[Sample]], - variables: Union[List[str], List[Variable]], - description: str = "My IPUMS International extract", - data_format: str = "fixed_width", - data_structure: Dict = {"rectangular": {"on": "P"}}, - **kwargs, + variable: Union[Variable, str], + values: List[Union[int, str]], + general: bool = True, ): """ - Defining an IPUMS International extract. + A method to update existing IPUMS Extract Variable objects to select cases + with the specified values of that IPUMS variable. Args: - samples: list of IPUMS International sample IDs - variables: list of IPUMS International variable names - description: short description of your extract - data_format: fixed_width and csv supported - data_structure: nested dict with "rectangular" or "hierarchical" as first-level key. - "rectangular" extracts require further specification of "on" : . - Default {"rectangular": "on": "P"} requests an extract rectangularized on the "P" record. - """ - - super().__init__() - self.samples = self._validate_list_args(samples, Sample) - self.variables = self._validate_list_args(variables, Variable) - self.description = description - self.data_format = data_format - self.data_structure = data_structure - self.collection = self.collection - """Name of an IPUMS data collection""" - self.api_version = ( - self.extract_api_version(kwargs) - if len(kwargs.keys()) > 0 - else self.api_version - ) - """IPUMS API version number""" - - # check kwargs for conflicts with defaults - self._kwarg_warning(kwargs) - # make the kwargs camelCase - self.kwargs = self._snake_to_camel(kwargs) - - def build(self) -> Dict[str, Any]: - """ - Convert the object into a dictionary to be passed to the IPUMS API - as a JSON string + variable: a Variable object or a string variable name + values: a list of values for which to select records + general: set to False to select cases on detailed codes. Defaults to True. """ - return { - "description": self.description, - "dataFormat": self.data_format, - "dataStructure": self.data_structure, - "samples": {sample.id: {} for sample in self.samples}, - "variables": { - variable.name.upper(): variable.build() for variable in self.variables - }, - "collection": self.collection, - "version": self.api_version, - **self.kwargs, - } + # stringify values + values = [str(v) for v in values] + if general: + self._update_variable_feature( + variable, "case_selections", {"general": values} + ) + else: + self._update_variable_feature( + variable, "case_selections", {"detailed": values} + ) def extract_from_dict(dct: Dict[str, Any]) -> Union[BaseExtract, List[BaseExtract]]: @@ -586,23 +520,30 @@ def extract_from_dict(dct: Dict[str, Any]) -> Union[BaseExtract, List[BaseExtrac if "extracts" in dct: # We are returning several extracts return [extract_from_dict(extract) for extract in dct["extracts"]] - if dct["collection"] in BaseExtract._collection_to_extract: - # some fanciness to make sure sample and variable features - # are preserved - # make samples Sample objects - if isinstance(dct["samples"], dict): - dct["samples"] = _unpack_samples_dict(dct["samples"]) - else: - dct["samples"] = [Sample(id=samp) for samp in dct["samples"]] - # make varibales Variable objects - if isinstance(dct["variables"], dict): - dct["variables"] = _unpack_variables_dict(dct["variables"]) - else: - dct["variables"] = [Variable(name=var) for var in dct["variables"]] - - return BaseExtract._collection_to_extract[dct["collection"]](**dct) - return OtherExtract(dct["collection"], dct) + def _camel_to_snake(key): + # don't mess with case for boolean values + if isinstance(key, bool): + return key + cap_idx = [0] + [key.index(i) for i in key if i.isupper()] + parts_list = [key[i:j].lower() for i, j in zip(cap_idx, cap_idx[1:] + [None])] + snake = "_".join(parts_list) + return snake + + def _make_snake_ext(ext_dict): + for key in ext_dict.keys(): + if isinstance(ext_dict[key], dict): + if key not in ["variables", "samples", "timeUseVariables"]: + ext_dict[key] = _make_snake_ext(ext_dict[key]) + return {_camel_to_snake(k): v for k, v in ext_dict.items()} + + ext_dict = _make_snake_ext(dct) + # XXX To Do: When MicrodataExtract is no longer the only extract class, + # this method will need to differentiate between the different collection types + # since this info isn't available from the api response and so won't be stored in any + # dict representation, there needs to be a way to know which collections are micro + # and which are not. + return MicrodataExtract(**ext_dict) def extract_to_dict(extract: Union[BaseExtract, List[BaseExtract]]) -> Dict[str, Any]: diff --git a/src/ipumspy/ddi.py b/src/ipumspy/ddi.py index 2239d93..4e95d24 100644 --- a/src/ipumspy/ddi.py +++ b/src/ipumspy/ddi.py @@ -56,11 +56,14 @@ def python_type(self) -> type: """ The Python type of this variable. """ - if self.vartype == "numeric": + if self.vartype == "numeric" or self.vartype == "integer": if (self.shift is None) or (self.shift == 0): return int return float - return str + elif self.vartype == "float": + return float + else: + return str @property def numpy_type(self) -> type: @@ -68,9 +71,12 @@ def numpy_type(self) -> type: The Numpy type of this variable. Note that this type must support nullability, and hence even for integers it is "float64". """ - if self.vartype == "numeric": - if (self.shift is None) or (self.shift == 0): - return np.float64 + # always return a numpy float if it isn't a character var + if ( + self.vartype == "numeric" + or self.vartype == "integer" + or self.vartype == "float" + ): return np.float64 return str @@ -81,11 +87,15 @@ def pandas_type(self) -> type: pandas dtypes, and so the integer type is "Int64" and the string type is "string" (instead of "object") """ - if self.vartype == "numeric": + if self.vartype == "numeric" or self.vartype == "integer": if (self.shift is None) or (self.shift == 0): return pd.Int64Dtype() + # this should probably actually return pd.Float64Dtype() return np.float64 - return pd.StringDtype() + elif self.vartype == "float": + return np.float64 + else: + return pd.StringDtype() @property def pandas_type_efficient(self) -> type: @@ -95,9 +105,11 @@ def pandas_type_efficient(self) -> type: https://pandas-docs.github.io/pandas-docs-travis/user_guide/integer_na.html It can be considered as a mix between `self.pandas_type` and `self.numpy_type` """ - if self.vartype == "numeric": - if (self.shift is None) or (self.shift == 0): - return np.float64 + if ( + self.vartype == "numeric" + or self.vartype == "integer" + or self.vartype == "float" + ): return np.float64 return pd.StringDtype() @@ -115,12 +127,21 @@ def read(cls, elt: Element, ddi_namespace: str) -> VariableDescription: namespaces = {"ddi": ddi_namespace} vartype = elt.find("./ddi:varFormat", namespaces).attrib["type"] + # for DDI where no distinction is made between integer and float: + intvl = elt.attrib["intrvl"] + wid = int(elt.find("./ddi:location", namespaces).attrib["width"]) + if vartype == "numeric": + if intvl == "contin" and wid > 10: + vartype == "float" + else: + vartype = "integer" + labels_dict = {} for cat in elt.findall("./ddi:catgry", namespaces): label = cat.find("./ddi:labl", namespaces).text value = cat.find("./ddi:catValu", namespaces).text # make values integers when possible - if vartype == "numeric": + if vartype == "numeric" or vartype == "integer": labels_dict[label] = int(value) else: labels_dict[label] = value diff --git a/src/ipumspy/noextract.py b/src/ipumspy/noextract.py index 121643a..feca781 100644 --- a/src/ipumspy/noextract.py +++ b/src/ipumspy/noextract.py @@ -54,7 +54,7 @@ def read_noextract_codebook(collection: str) -> Codebook: val["record_type"], {v["label"]: v["value"] for v in val["values"]}, val["start_column"] - 1, - val["start_column"] + val["width"], + val["start_column"] + val["width"] - 1, val["label"], val["label"], "", # No concept tracked @@ -79,11 +79,11 @@ def download_noextract_data(collection: str, filename: Optional[FilenameType] = Suggested usage to retrieve YRBSS data: >>> from ipumspy.readers import read_microdata - >>> from ipumspy.noextract_collections import read_noextract_codebook, download_noextract_data + >>> from ipumspy.noextract import read_noextract_codebook, download_noextract_data >>> >>> yrbss_codebook = read_noextract_codebook("yrbss") >>> download_noextract_data("yrbss") - >>> read_microdata(yrbss_codebook, "yrbss.dat.gz") + >>> read_microdata(yrbss_codebook, "ipums-yrbss.dat.gz") N.B. You **must** use `read_noextract_codebook()` to parse the codebook provided in this package or else `read_microdata` will fail. diff --git a/src/ipumspy/readers.py b/src/ipumspy/readers.py index bbebb04..e8fd24e 100644 --- a/src/ipumspy/readers.py +++ b/src/ipumspy/readers.py @@ -30,6 +30,27 @@ class CitationWarning(Warning): pass +def _fix_float_dtypes(dtype, df): + # XXX: it would be great to not have to inspect the data at this stage, + # as it might make reading quite slow for extracts with many variables. + # However, currently the IPUMS DDI makes no distinction between floating point and integer + # numeric variables and looking at the data is the only option for fwf extracts. + # The alternative would be to just make all numeric variables floats, + # but that doesn't seem ideal either. + for col in df.columns: + if dtype[col] == pd.Int64Dtype(): + try: + df[col] = df[col].astype(pd.Int64Dtype()) + # except (TypeError, ValueError) as e: + except (TypeError, ValueError) as e: + # if a variable is hitting this exception, + # it is a float in the actual data that is designated as + # an integer due to the 'numeric' typing of all non-character + # variables in the IPUMS ddi files + dtype[col] = pd.Float64Dtype() + return dtype + + def read_ipums_ddi(ddi_file: fileutils.FileType) -> ddi_definitions.Codebook: """ Read a DDI from a IPUMS XML file @@ -86,13 +107,17 @@ def _read_microdata( kwargs = copy.deepcopy(kwargs) if ".dat" in filename.suffixes: # This is a fixed width file - + if dtype is None: + dtype = {desc.name: desc.pandas_type for desc in data_description} kwargs.update( { "colspecs": [(desc.start, desc.end) for desc in data_description], "names": [desc.name for desc in data_description], - # numpy_type since _fix_decimal_expansion call will convert any shiftable integer columns to float anyway. - "dtype": {desc.name: desc.numpy_type for desc in data_description}, + # "dtype": dtype, + # XXX until DDI can differentiate between integer and float types, + # force everything to be a string for reading to ensure that the data + # is read successfully. `dtype` will be assigned after reading. + "dtype": {desc.name: pd.StringDtype() for desc in data_description}, } ) @@ -102,9 +127,18 @@ def _read_microdata( # Fixed width files also require fixing decimal expansions def _fix_decimal_expansion(df): for desc in data_description: - if desc.shift: + if desc.shift is not None and desc.shift > 0: shift = 10**desc.shift - df[desc.name] /= shift + try: + df[desc.name] = df[desc.name].astype(int) / shift + except TypeError: + # XXX: maybe this should just be the only way this gets done + df[desc.name] = ( + pd.to_numeric(df[desc.name], errors="coerce") + .fillna(0) + .astype(int) + ) + df[desc.name] = df[desc.name] / shift return df elif ".csv" in filename.suffixes: @@ -149,29 +183,31 @@ def _fix_decimal_expansion(df): with fileutils.data_opener(filename, encoding=encoding, mode=mode) as infile: if not iterator: data = [reader(infile, **kwargs)] + else: kwargs.update({"iterator": True, "chunksize": chunksize}) data = reader(infile, **kwargs) if dtype is None: + # default to pandas types dtype = {desc.name: desc.pandas_type for desc in data_description} - # NOTE(khw): The following line is for specifically handling YRBSS data, - # which uses a different .dat format from all other files. This should - # be resolved in the future by offering a `.parquet` version of the file - # NOTE(rr): Looking at the codebook, I don't _think_ there are similar variables - # in the NYTS data. - if ddi.ipums_collection == "yrbss": - for col in dtype: - if any(name in col for name in ["WEIGHT", "BMIPCTILE"]): - dtype[col] = pd.Float64Dtype() - yield from (_fix_decimal_expansion(df).astype(dtype) for df in data) + # XXX this is inefficient as _fix_float_dtypes is being called for each df + # when it should really only need to be called once. This could slow reading of + # extracts that include many variables + yield from ( + _fix_decimal_expansion(df).astype(_fix_float_dtypes(dtype, df)) + for df in data + ) else: if ".dat" in filename.suffixes: # convert variables from default numpy_type to corresponding type in dtype. - yield from (_fix_decimal_expansion(df).astype(dtype) for df in data) + yield from ( + _fix_decimal_expansion(df).astype(_fix_float_dtypes(dtype, df)) + for df in data + ) else: - # In contrary to counter condition, df already has right dtype. It would be expensive to call astype for - # nothing. + # In contrary to counter condition, df already has right dtype. + # It would be expensive to call astype for nothing. yield from (_fix_decimal_expansion(df) for df in data) @@ -180,11 +216,19 @@ def _get_common_vars(ddi: ddi_definitions.Codebook, data_description: List): # these variables have all rectypes listed in the variable-level rectype attribute # these are delimited by spaces within the string attribute # this list would probably be a useful thing to have as a file-level attribute... + + # XXX: this is to work around an issue with the Health Surveys DDI specifically. + # Revert to previous method of using the file_description rectypes once this + # DDI issue is fixed + rectype_desc = [desc for desc in data_description if desc.name == "RECTYPE"][0] + all_rectypes = rectype_desc.rectype.split(" ") common_vars = [ desc.name for desc in data_description - if sorted(desc.rectype.split(" ")) == sorted(ddi.file_description.rectypes) + # if sorted(desc.rectype.split(" ")) == sorted(ddi.file_description.rectypes) + if sorted(desc.rectype.split(" ")) == sorted(all_rectypes) ] + return common_vars @@ -311,33 +355,78 @@ def read_hierarchical_microdata( else: df_dict = {} common_vars = _get_common_vars(ddi, data_description) - for rectype in ddi.file_description.rectypes: + # XXX: this is to work around an issue with the Health Surveys DDI specifically. + # Revert to previous method of using the file_description rectypes once this + # DDI issue is fixed + rectype_desc = [desc for desc in data_description if desc.name == "RECTYPE"][0] + all_rectypes = rectype_desc.rectype.split(" ") + + # for rectype in ddi.file_description.rectypes: + for rectype in all_rectypes: rectype_vars = _get_rectype_vars( ddi, rectype, common_vars, data_description ) + # if there are no non-common vars, this can be skipped? + if rectype_vars == common_vars: + continue # it feels like there should be a better way to do this bit... + # read all variables as strings to avoid TypeErrors when non `rectype` + # rows contain data that cannot be cast to variable's data type + dtype_str = {v: pd.StringDtype() for v in rectype_vars} + rectype_df = pd.concat( [ df for df in _read_microdata( - ddi, filename, encoding, rectype_vars, dtype, **kwargs + ddi=ddi, + filename=filename, + encoding=encoding, + subset=rectype_vars, + dtype=dtype_str, + **kwargs, ) ] ) + # filter out non-relevant rectype records - df_dict[rectype] = rectype_df[rectype_df["RECTYPE"] == rectype] + df_dict[rectype] = rectype_df[rectype_df["RECTYPE"] == rectype].copy() + + # Now that the non-relevant rows have been dropped, make data types correct + if dtype is None: + # this fix means that _fix_float_dtypes is actually being called both from within + # _read_microdata() and this method, which is not ideal, but is also the least disruptive + # solution I have found so far. + dtype_rt = { + desc.name: desc.pandas_type + for desc in data_description + if desc.name in rectype_vars + } + dtype_rt = _fix_float_dtypes(dtype_rt, df_dict[rectype]) + else: + dtype_rt = {k: v for k, v in dtype.items() if k in rectype_vars} + + # assign float-fixed pandas data types to record type df + df_dict[rectype] = df_dict[rectype].astype(dtype_rt) + if as_dict: return df_dict else: + dtype_str = {desc.name: pd.StringDtype() for desc in data_description} # read the hierarchical file df = pd.concat( [ df for df in _read_microdata( - ddi, filename, encoding, subset, dtype, **kwargs + ddi=ddi, + filename=filename, + encoding=encoding, + dtype=dtype_str, + subset=subset, + **kwargs, ) ] ) + # for each rectype, nullify variables that belong to other rectypes for rectype in df_dict.keys(): # create a list of variables that are for rectypes other than the current rectype @@ -348,23 +437,53 @@ def read_hierarchical_microdata( for cols in df_dict[rt].columns if rt != rectype and cols not in common_vars ] + dtype_rt = dtype + if dtype_rt is None: + # this fix means that _fix_float_dtypes is actually being called both from within + # _read_microdata() and this method, which is not ideal, but is also the least disruptive + # solution I have found so far. + dtype_rt = { + desc.name: desc.pandas_type + for desc in data_description + if desc.name in non_rt_cols + } + for col in non_rt_cols: # maintain data type when "nullifying" variables from other record types - if df[col].dtype == pd.Int64Dtype(): + if dtype_rt[col] == pd.Int64Dtype(): df[col] = np.where(df["RECTYPE"] == rectype, pd.NA, df[col]) - df[col] = df[col].astype(pd.Int64Dtype()) - elif df[col].dtype == pd.StringDtype(): + df[col] = df[col].astype( + _fix_float_dtypes({col: dtype_rt[col]}, df[[col]].copy()) + ) + elif ( + dtype_rt[col] == pd.StringDtype() + or dtype_rt[col] == str + or dtype_rt[col] == "string" + ): df[col] = np.where(df["RECTYPE"] == rectype, "", df[col]) df[col] = df[col].astype(pd.StringDtype()) - elif df[col].dtype == float: + elif ( + dtype_rt[col].dtype == float + or dtype_rt[col] == pd.Float64Dtype() + or dtype_rt[col] == np.float64 + ): df[col] = np.where(df["RECTYPE"] == rectype, np.nan, df[col]) - df[col] = df[col].astype(float) + df[col] = df[col].astype(dtype_rt[col]) # this should (theoretically) never be hit... unless someone specifies an illegal data type # themselves, but that should also be caught before this stage. else: raise TypeError( f"Data type {df[col].dtype} for {col} is not an allowed type." ) + # XXX common vars are defaulting to pandas. This is probably fine, but could be more flexible. + common_dtype = { + desc.name: desc.pandas_type + for desc in data_description + if desc.name in common_vars + } + for col in common_vars: + df[col] = df[col].astype(common_dtype[col]) + return df diff --git a/src/ipumspy/types.py b/src/ipumspy/types.py index 847264c..be8805d 100644 --- a/src/ipumspy/types.py +++ b/src/ipumspy/types.py @@ -1,6 +1,7 @@ """ Some standard types used throughout the library """ + import io from pathlib import Path from typing import Union diff --git a/tests/cassettes/test_api/test_get_all_sample_info.yaml b/tests/cassettes/test_api/test_get_all_sample_info.yaml index 29f7ac5..5331b08 100644 --- a/tests/cassettes/test_api/test_get_all_sample_info.yaml +++ b/tests/cassettes/test_api/test_get_all_sample_info.yaml @@ -9,49 +9,44 @@ interactions: Connection: - keep-alive User-Agent: - - python-ipumspy:0.2.2a1.github.com/ipums/ipumspy + - python-ipumspy:0.4.1.github.com/ipums/ipumspy method: GET - uri: https://api.ipums.org/metadata/usa/samples?version=2 + uri: https://api.ipums.org/metadata/samples?collection=usa&pageSize=2500&version=2 response: body: - string: '{"data":[{"name":"us1850a","description":"1850 1%"},{"name":"us1850b","description":"1850 - 100% sample (July 2015)"},{"name":"us1850c","description":"1850 100% sample - (Revised December 2017)"},{"name":"us1860a","description":"1860 1%"},{"name":"us1860b","description":"1860 - 1% sample with black oversample"},{"name":"us1860c","description":"1860 100% - sample (Jan 2019)"},{"name":"us1870a","description":"1870 1%"},{"name":"us1870b","description":"1870 - 1% sample with black oversample"},{"name":"us1870c","description":"1870 100% - sample (Jan 2019)"},{"name":"us1880a","description":"1880 1%"},{"name":"us1880b","description":"1880 - 5% sample (preliminary release)"},{"name":"us1880c","description":"1880 100% - database (limited variables)"},{"name":"us1880d","description":"1880 10%"},{"name":"us1880e","description":"1880 - 100% database (January 2010 expanded version)"},{"name":"us1900f","description":"1900 - 1%"},{"name":"us1900g","description":"1900 1% sample with oversamples"},{"name":"us1900h","description":"1900 - 2.5% sample (preliminary release)"},{"name":"us1900i","description":"1900 - 5% sample (pre-May 2011 version)"},{"name":"us1900k","description":"1900 1%"},{"name":"us1900j","description":"1900 - 5%"},{"name":"us1900l","description":"1900 1% sample with oversamples"},{"name":"us1900m","description":"1900 - 100% database"},{"name":"us1910h","description":"1910 Puerto Rico"},{"name":"us1910i","description":"1910 - 1%"},{"name":"us1910j","description":"1910 1.4% sample with oversamples"},{"name":"us1910k","description":"1910 - 1%"},{"name":"us1910l","description":"1910 1.4% sample with oversamples"},{"name":"us1910m","description":"1910 - 100% database"},{"name":"us1920a","description":"1920 1%"},{"name":"us1920b","description":"1920 + string: '{"data":[{"name":"us1850a","description":"1850 1%"},{"name":"us1850c","description":"1850 + 100% sample (Revised November 2023)"},{"name":"us1860a","description":"1860 + 1%"},{"name":"us1860b","description":"1860 1% sample with black oversample"},{"name":"us1860c","description":"1860 + 100% sample (Revised November 2023)"},{"name":"us1870a","description":"1870 + 1%"},{"name":"us1870b","description":"1870 1% sample with black oversample"},{"name":"us1870c","description":"1870 + 100% sample (Revised November 2023)"},{"name":"us1880a","description":"1880 + 1%"},{"name":"us1880d","description":"1880 10%"},{"name":"us1880e","description":"1880 + 100% database (Revised November 2023)"},{"name":"us1900k","description":"1900 + 1%"},{"name":"us1900j","description":"1900 5%"},{"name":"us1900l","description":"1900 + 1% sample with oversamples"},{"name":"us1900m","description":"1900 100% database"},{"name":"us1910h","description":"1910 + Puerto Rico"},{"name":"us1910k","description":"1910 1%"},{"name":"us1910l","description":"1910 + 1.4% sample with oversamples"},{"name":"us1910m","description":"1910 100% + database"},{"name":"us1920a","description":"1920 1%"},{"name":"us1920b","description":"1920 Puerto Rico sample"},{"name":"us1920c","description":"1920 100% database"},{"name":"us1930a","description":"1930 1%"},{"name":"us1930b","description":"1930 5%"},{"name":"us1930c","description":"1930 Puerto Rico"},{"name":"us1930d","description":"1930 100% database"},{"name":"us1940a","description":"1940 1%"},{"name":"us1940b","description":"1940 100% database"},{"name":"us1950a","description":"1950 - 1%"},{"name":"us1960a","description":"1960 1%"},{"name":"us1960b","description":"1960 - 5%"},{"name":"us1970a","description":"1970 Form 1 State"},{"name":"us1970b","description":"1970 - Form 2 State"},{"name":"us1970c","description":"1970 Form 1 Metro"},{"name":"us1970d","description":"1970 - Form 2 Metro"},{"name":"us1970e","description":"1970 Form 1 Neighborhood"},{"name":"us1970f","description":"1970 - Form 2 Neighborhood"},{"name":"us1970h","description":"1970 Puerto Rico State"},{"name":"us1970i","description":"1970 - Puerto Rico Municipio"},{"name":"us1970j","description":"1970 Puerto Rico - Neighborhood"},{"name":"us1980a","description":"1980 5%"},{"name":"us1980b","description":"1980 + 1%"},{"name":"us1950b","description":"1950 100% database"},{"name":"us1960a","description":"1960 + 1%"},{"name":"us1960b","description":"1960 5%"},{"name":"us1970a","description":"1970 + Form 1 State"},{"name":"us1970b","description":"1970 Form 2 State"},{"name":"us1970c","description":"1970 + Form 1 Metro"},{"name":"us1970d","description":"1970 Form 2 Metro"},{"name":"us1970e","description":"1970 + Form 1 Neighborhood"},{"name":"us1970f","description":"1970 Form 2 Neighborhood"},{"name":"us1970h","description":"1970 + Puerto Rico State"},{"name":"us1970i","description":"1970 Puerto Rico Municipio"},{"name":"us1970j","description":"1970 + Puerto Rico Neighborhood"},{"name":"us1980a","description":"1980 5%"},{"name":"us1980b","description":"1980 1%"},{"name":"us1980c","description":"1980 Urban/Rural"},{"name":"us1980d","description":"1980 Labor Market Area"},{"name":"us1980e","description":"1980 Detailed metro/non-metro"},{"name":"us1980f","description":"1980 Puerto Rico 5%"},{"name":"us1980g","description":"1980 Puerto Rico 1%"},{"name":"us1990a","description":"1990 5%"},{"name":"us1990b","description":"1990 1%"},{"name":"us1990c","description":"1990 Unweighted 1%"},{"name":"us1990d","description":"1990 Elderly"},{"name":"us1990e","description":"1990 Labor Market Area"},{"name":"us1990f","description":"1990 Puerto Rico 5%"},{"name":"us1990g","description":"1990 - Puerto Rico 1%"},{"name":"us2000d","description":"2000 ACS"},{"name":"us2000b","description":"2000 + Puerto Rico 1%"},{"name":"us2000a","description":"2000 5%"},{"name":"us2000b","description":"2000 1% sample (old version)"},{"name":"us2000c","description":"2000 Unweighted - 1%"},{"name":"us2000a","description":"2000 5%"},{"name":"us2000e","description":"2000 + 1%"},{"name":"us2000d","description":"2000 ACS"},{"name":"us2000e","description":"2000 Puerto Rico 5%"},{"name":"us2000f","description":"2000 Puerto Rico 1% sample (old version)"},{"name":"us2000g","description":"2000 1%"},{"name":"us2000h","description":"2000 Puerto Rico 1%"},{"name":"us2001a","description":"2001 ACS"},{"name":"us2002a","description":"2002 @@ -93,22 +88,24 @@ interactions: PRCS 5-year"},{"name":"us2020a","description":"2020 ACS"},{"name":"us2020c","description":"2016-2020, ACS 5-year"},{"name":"us2020d","description":"2016-2020, PRCS 5-year"},{"name":"us2021a","description":"2021 ACS"},{"name":"us2021b","description":"2021 PRCS"},{"name":"us2021c","description":"2017-2021, - ACS 5-year"},{"name":"us2021d","description":"2017-2021, PRCS 5-year"}],"pageNumber":1,"pageSize":500,"totalCount":150,"links":{"previousPage":null,"nextPage":null}}' + ACS 5-year"},{"name":"us2021d","description":"2017-2021, PRCS 5-year"},{"name":"us2022a","description":"2022 + ACS"},{"name":"us2022b","description":"2022 PRCS"},{"name":"us2022c","description":"2018-2022, + ACS 5-year"},{"name":"us2022d","description":"2018-2022, PRCS 5-year"}],"pageNumber":1,"pageSize":2500,"totalCount":146,"links":{"previousPage":null,"nextPage":null}}' headers: Cache-Control: - max-age=0, private, must-revalidate Content-Length: - - '8051' + - '7749' Content-Type: - application/json; charset=utf-8 Date: - - Fri, 31 Mar 2023 20:14:38 GMT + - Thu, 02 May 2024 19:35:30 GMT Etag: - - W/"ba8258ece56e7423b2e97a9519da4d4c" + - W/"a160a8ecdb1f8e7aea07945f03b0cc38" Referrer-Policy: - strict-origin-when-cross-origin Server: - - nginx/1.18.0 + - nginx/1.22.1 Vary: - Origin X-Content-Type-Options: @@ -126,9 +123,9 @@ interactions: X-Ratelimit-Reset: - '0' X-Request-Id: - - dc979ea5-ae1f-4d2a-bbd0-de6393a8b1df + - 4d93bfcf-d4d2-4959-a3c3-11995dff2a49 X-Runtime: - - '0.003452' + - '0.134752' X-Xss-Protection: - '0' status: diff --git a/tests/cassettes/test_api/test_get_extract_by_id.yaml b/tests/cassettes/test_api/test_get_extract_by_id.yaml index c818844..cc6537d 100644 --- a/tests/cassettes/test_api/test_get_extract_by_id.yaml +++ b/tests/cassettes/test_api/test_get_extract_by_id.yaml @@ -9,7 +9,7 @@ interactions: Connection: - keep-alive User-Agent: - - python-ipumspy:0.2.2a1.github.com/ipums/ipumspy + - python-ipumspy:0.4.1.github.com/ipums/ipumspy method: GET uri: https://api.ipums.org/extracts/433?collection=cps&version=2 response: @@ -24,13 +24,13 @@ interactions: Content-Type: - application/json; charset=utf-8 Date: - - Thu, 30 Mar 2023 19:49:04 GMT + - Mon, 29 Apr 2024 20:18:47 GMT Etag: - W/"2fd406cc439cb9f107408fd5ebd22c10" Referrer-Policy: - strict-origin-when-cross-origin Server: - - nginx/1.18.0 + - nginx/1.22.1 Vary: - Origin - Accept @@ -49,9 +49,9 @@ interactions: X-Ratelimit-Reset: - '0' X-Request-Id: - - 9aa1fbae-b3fb-4922-adfc-4ba9a2df8b19 + - 16b53115-e251-433f-80bf-93a6c7b2dfc1 X-Runtime: - - '0.306242' + - '0.597869' X-Xss-Protection: - '0' status: @@ -67,28 +67,28 @@ interactions: Connection: - keep-alive User-Agent: - - python-ipumspy:0.2.2a1.github.com/ipums/ipumspy + - python-ipumspy:0.4.1.github.com/ipums/ipumspy method: GET uri: https://api.ipums.org/extracts/6?collection=ipumsi&version=2 response: body: - string: '{"number":6,"status":"completed","email":"rodge103@umn.edu","downloadLinks":{"sasCommandFile":{"url":"https://api.ipums.org/downloads/ipumsi/api/v1/extracts/1995121/ipumsi_00006.sas","bytes":23115,"sha256":"bdf46ba893db954b87e28fd12a38b1995b9fd19893ec0e96bbcfb924bc579661"},"ddiCodebook":{"url":"https://api.ipums.org/downloads/ipumsi/api/v1/extracts/1995121/ipumsi_00006.xml","bytes":100032,"sha256":"fb7fc7c14bae6f5e4fedeb283cdbd7c7c70d9039d582b8aeaa0b5dd21909d099"},"stataCommandFile":{"url":"https://api.ipums.org/downloads/ipumsi/api/v1/extracts/1995121/ipumsi_00006.do","bytes":45247,"sha256":"8156ad38b83a5885861e3585a1e8696a5684f192647675b197b489932fba0484"},"data":{"url":"https://api.ipums.org/downloads/ipumsi/api/v1/extracts/1995121/ipumsi_00006.dat.gz","bytes":1427444,"sha256":"a8b44aae5ea39b836031b0343e495754ff8ddc2d3b1386a450e83bd4d3216eee"},"rCommandFile":{"url":"https://api.ipums.org/downloads/ipumsi/api/v1/extracts/1995121/ipumsi_00006.R","bytes":409,"sha256":"40ce6c97838a6b35e74d12d46bd1971b912df93feac79cd5c78a6f56c677cd9c"},"basicCodebook":{"url":"https://api.ipums.org/downloads/ipumsi/api/v1/extracts/1995121/ipumsi_00006.cbk","bytes":28151,"sha256":"b8aacd66da07f5ee3e067ba1938558bfca8fc3e94bce21137df2f8e28417462a"},"spssCommandFile":{"url":"https://api.ipums.org/downloads/ipumsi/api/v1/extracts/1995121/ipumsi_00006.sps","bytes":24384,"sha256":"98d40bf325c43e8609a9ba5a21f6ef266be53325efd2acdab00e5b34a5f1469b"}},"extractDefinition":{"version":2,"dataStructure":{"rectangular":{"on":"P"}},"dataFormat":"fixed_width","caseSelectWho":"individuals","description":"My + string: '{"number":6,"status":"completed","email":"rodge103@umn.edu","downloadLinks":{},"extractDefinition":{"version":2,"dataStructure":{"rectangular":{"on":"P"}},"dataFormat":"fixed_width","caseSelectWho":"individuals","description":"My IPUMS International extract","samples":{"am2011a":{}},"variables":{"COUNTRY":{"preselected":true},"YEAR":{"preselected":true},"SAMPLE":{"preselected":true},"SERIAL":{"preselected":true},"HHWT":{"preselected":true},"PERNUM":{"preselected":true},"PERWT":{"preselected":true},"AGE":{},"SEX":{}},"collection":"ipumsi"}}' headers: Cache-Control: - max-age=0, private, must-revalidate Content-Length: - - '1911' + - '545' Content-Type: - application/json; charset=utf-8 Date: - - Thu, 30 Mar 2023 19:49:04 GMT + - Mon, 29 Apr 2024 20:18:48 GMT Etag: - - W/"068a3a2d6591e523a16ac6b3b8e25de1" + - W/"b2949c626d23a65e8103bbf47b48ce16" Referrer-Policy: - strict-origin-when-cross-origin Server: - - nginx/1.18.0 + - nginx/1.22.1 Vary: - Origin - Accept @@ -107,9 +107,9 @@ interactions: X-Ratelimit-Reset: - '0' X-Request-Id: - - e05b8b59-ac65-4748-b13d-e12e9942b454 + - 643b364b-d0de-493e-81ac-8511494c87fc X-Runtime: - - '0.422595' + - '0.723123' X-Xss-Protection: - '0' status: @@ -125,7 +125,7 @@ interactions: Connection: - keep-alive User-Agent: - - python-ipumspy:0.2.2a1.github.com/ipums/ipumspy + - python-ipumspy:0.4.1.github.com/ipums/ipumspy method: GET uri: https://api.ipums.org/extracts/95?collection=cps&version=2 response: @@ -143,13 +143,13 @@ interactions: Content-Type: - application/json; charset=utf-8 Date: - - Thu, 30 Mar 2023 19:49:05 GMT + - Mon, 29 Apr 2024 20:18:49 GMT Etag: - W/"b35b767d32fbcd5787654ca9ea3770dc" Referrer-Policy: - strict-origin-when-cross-origin Server: - - nginx/1.18.0 + - nginx/1.22.1 Vary: - Origin - Accept @@ -168,9 +168,9 @@ interactions: X-Ratelimit-Reset: - '0' X-Request-Id: - - 333d1214-d8c6-4426-b6c7-5e5dbbcc62c2 + - 31c3a4b9-e47e-4f7f-9787-c64bc3a15df0 X-Runtime: - - '0.526995' + - '1.378029' X-Xss-Protection: - '0' status: diff --git a/tests/cassettes/test_api/test_rect_on_nonP_extract.yaml b/tests/cassettes/test_api/test_rect_on_nonP_extract.yaml new file mode 100644 index 0000000..e6794e6 --- /dev/null +++ b/tests/cassettes/test_api/test_rect_on_nonP_extract.yaml @@ -0,0 +1,68 @@ +interactions: +- request: + body: '{"description": "My IPUMS NHIS extract", "dataFormat": "fixed_width", "dataStructure": + {"rectangular": {"on": "Y"}}, "samples": {"ih2016": {}}, "variables": {"AGE": + {"preselected": false, "caseSelections": {}, "attachedCharacteristics": [], + "dataQualityFlags": false}, "SEX": {"preselected": false, "caseSelections": + {}, "attachedCharacteristics": [], "dataQualityFlags": false}, "IRCAUSE": {"preselected": + false, "caseSelections": {}, "attachedCharacteristics": [], "dataQualityFlags": + false}}, "collection": "nhis", "version": 2}' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '531' + Content-Type: + - application/json + User-Agent: + - python-ipumspy:0.4.1.github.com/ipums/ipumspy + method: POST + uri: https://api.ipums.org/extracts?collection=nhis&version=2 + response: + body: + string: '{"type":"SemanticValidationError","status":{"code":400,"name":"Bad + Request"},"detail":["Focal Record Type is not valid"]}' + headers: + Cache-Control: + - no-cache + Content-Length: + - '121' + Content-Type: + - application/json; charset=utf-8 + Date: + - Fri, 10 May 2024 23:01:01 GMT + Referrer-Policy: + - strict-origin-when-cross-origin + Server: + - nginx/1.22.1 + Vary: + - Origin + - Accept + X-Content-Type-Options: + - nosniff + X-Download-Options: + - noopen + X-Frame-Options: + - SAMEORIGIN + X-Permitted-Cross-Domain-Policies: + - none + X-Ratelimit-Limit: + - '-1' + X-Ratelimit-Remaining: + - '0' + X-Ratelimit-Reset: + - '0' + X-Request-Id: + - 8b58906b-6082-4416-8f9f-3e3ccae82efd + X-Runtime: + - '0.439716' + X-Xss-Protection: + - '0' + status: + code: 400 + message: Bad Request +version: 1 diff --git a/tests/fixtures/atus_00034.dat.gz b/tests/fixtures/atus_00034.dat.gz new file mode 100644 index 0000000..f94d253 Binary files /dev/null and b/tests/fixtures/atus_00034.dat.gz differ diff --git a/tests/fixtures/atus_00034.xml b/tests/fixtures/atus_00034.xml new file mode 100644 index 0000000..a48a562 --- /dev/null +++ b/tests/fixtures/atus_00034.xml @@ -0,0 +1,3031 @@ + + + + + + + Codebook for an ATUS Data Extract + DDI 2.5 metadata describing the extract file 'atus_00034.dat' + ddi2-27363a39-8e14-11e5-8c97-b82a72e0b782-atus_00034.dat-www.atusdata.org + + + IPUMS + + + IPUMS + May 15, 2024 + IPUMS, 50 Willey Hall, 225 - 19th Avenue South, Minneapolis, MN 55455 + + + IPUMS + + + + + + + User Extract atus_00034.dat + + + IPUMS + + + IPUMS + May 15, 2024 + IPUMS, 50 Willey Hall, 225 - 19th Avenue South, Minneapolis, MN 55455 + + + IPUMS + + + IPUMS ATUS + DOI:10.18128/D060.V3.2 + + + + + + + + Technical Household Variables -- HOUSEHOLD + Geographic Variables -- HOUSEHOLD + Technical Person Variables -- PERSON + Weights Variables -- PERSON + Core Demographic Variables -- PERSON + Technical Activity Variables -- ACTIVITY + + + 2016 + United States + + + + + + + ATUS + + + The user of the data acknowledges that the original collector of the data, the authorized distributor of the data, and the relevant funding agency bear no responsibility for use of the data or for interpretations or inferences based upon such uses. + + + + + + + atus_00034.dat + Microdata records + + ISO-8859-1 data file + fixed length fields + IPUMS, 50 Willey Hall, 225 - 19th Avenue South, Minneapolis, MN 55455 + + + + + Survey year + + + Technical Household Variables -- HOUSEHOLD + + + + + ATUS Case ID + + + Technical Household Variables -- HOUSEHOLD + + + + + Household serial number + + + Technical Household Variables -- HOUSEHOLD + + + + + FIPS State Code + + + 01 + Alabama + + + 02 + Alaska + + + 04 + Arizona + + + 05 + Arkansas + + + 06 + California + + + 08 + Colorado + + + 09 + Connecticut + + + 10 + Delaware + + + 11 + District of Columbia + + + 12 + Florida + + + 13 + Georgia + + + 15 + Hawaii + + + 16 + Idaho + + + 17 + Illinois + + + 18 + Indiana + + + 19 + Iowa + + + 20 + Kansas + + + 21 + Kentucky + + + 22 + Louisiana + + + 23 + Maine + + + 24 + Maryland + + + 25 + Massachusetts + + + 26 + Michigan + + + 27 + Minnesota + + + 28 + Mississippi + + + 29 + Missouri + + + 30 + Montana + + + 31 + Nebraska + + + 32 + Nevada + + + 33 + New Hampshire + + + 34 + New Jersey + + + 35 + New Mexico + + + 36 + New York + + + 37 + North Carolina + + + 38 + North Dakota + + + 39 + Ohio + + + 40 + Oklahoma + + + 41 + Oregon + + + 42 + Pennsylvania + + + 44 + Rhode Island + + + 45 + South Carolina + + + 46 + South Dakota + + + 47 + Tennessee + + + 48 + Texas + + + 49 + Utah + + + 50 + Vermont + + + 51 + Virginia + + + 53 + Washington + + + 54 + West Virginia + + + 55 + Wisconsin + + + 56 + Wyoming + + Geographic Variables -- HOUSEHOLD + + + + + Person number (general) + + + 01 + 1 + + + 02 + 2 + + + 03 + 3 + + + 04 + 4 + + + 05 + 5 + + + 06 + 6 + + + 07 + 7 + + + 08 + 8 + + + 09 + 9 + + + 10 + 10 + + + 11 + 11 + + + 12 + 12 + + + 13 + 13 + + + 14 + 14 + + + 15 + 15 + + + 16 + 16 + + Technical Person Variables -- PERSON + + + + + Person line number + + + 001 + 1 + + + 002 + 2 + + + 003 + 3 + + + 004 + 4 + + + 005 + 5 + + + 006 + 6 + + + 007 + 7 + + + 008 + 8 + + + 009 + 9 + + + 010 + 10 + + + 011 + 11 + + + 012 + 12 + + + 013 + 13 + + + 014 + 14 + + + 015 + 15 + + + 016 + 16 + + + 017 + 17 + + + 018 + 18 + + + 019 + 19 + + + 999 + NIU (Not in universe) + + Technical Person Variables -- PERSON + + + + + Person weight, 2006 methodology + + + Weights Variables -- PERSON + + + + + Age + + + Core Demographic Variables -- PERSON + + + + + Sex + + + 01 + Male + + + 02 + Female + + + 99 + NIU (Not in universe) + + Core Demographic Variables -- PERSON + + + + + Activity + + + 010000 + Personal Care + + + 010100 + Sleeping + + + 010101 + Sleeping + + + 010102 + Sleeplessness + + + 010199 + Sleeping, n.e.c. + + + 010200 + Grooming + + + 010201 + Washing, dressing and grooming oneself + + + 010299 + Grooming, n.e.c. + + + 010300 + Health-Related Self Care + + + 010301 + Health-related self care + + + 010399 + Self care, n.e.c. + + + 010400 + Personal Activities + + + 010401 + Personal/Private activities + + + 010499 + Personal activities, n.e.c. + + + 010500 + Personal Care Emergencies + + + 010501 + Personal emergencies + + + 010599 + Personal care emergencies, n.e.c. + + + 019900 + Personal Care, n.e.c. + + + 019999 + Personal care, n.e.c. + + + 020000 + Household Activities + + + 020100 + Housework + + + 020101 + Interior cleaning + + + 020102 + Laundry + + + 020103 + Sewing, repairing, and maintaining textiles + + + 020104 + Storing interior hh items, inc. food + + + 020199 + Housework, n.e.c. + + + 020200 + Food and Drink Preparation, Presentation, and Clean-up + + + 020201 + Food and drink preparation + + + 020202 + Food presentation + + + 020203 + Kitchen and food clean-up + + + 020299 + Food and drink prep, serving and clean-up, n.e.c. + + + 020300 + Interior Maintenance, Repair, and Decoration + + + 020301 + Interior arrangement, decoration, and repairs + + + 020302 + Building and repairing furniture + + + 020303 + Heating and cooling + + + 020399 + Interior maintenance, repair, and decoration, n.e.c. + + + 020400 + Exterior Maintenance, Repair, and Decoration + + + 020401 + Exterior cleaning + + + 020402 + Exterior repair, improvements, and decoration + + + 020499 + Exterior maintenance, repair and decoration, n.e.c. + + + 020500 + Lawn, Garden, and Houseplants + + + 020501 + Lawn, garden, and houseplant care + + + 020502 + Ponds, pools, and hot tubs + + + 020599 + Lawn and garden, n.e.c. + + + 020600 + Animals and Pets + + + 020601 + Care for animals and pets (not veterinary care) + + + 020602 + Care for animals and pets (not veterinary care) (2008+) + + + 020603 + Walking, exercising, playing with animals (2008+) + + + 020699 + Pet and animal care, n.e.c. + + + 020700 + Vehicles + + + 020701 + Vehicle repair and maintenance (by self) + + + 020799 + Vehicles, n.e.c. + + + 020800 + Appliances, Tools, and Toys + + + 020801 + App, tool, toy set-up, repair, and maint (by self) + + + 020899 + Appliances and tools, n.e.c. + + + 020900 + Household Management + + + 020901 + Financial management + + + 020902 + Household and personal organization and planning + + + 020903 + HH and personal mail and messages (except e-mail) + + + 020904 + HH and personal e-mail and messages + + + 020905 + Home security + + + 020999 + Household management, n.e.c. + + + 029900 + Household Activities, n.e.c. + + + 029999 + Household activities, n.e.c. + + + 030000 + Caring for and Helping Household Members + + + 030100 + Caring for and Helping Household Children + + + 030101 + Physical care for hh children + + + 030102 + Reading to/with hh children + + + 030103 + Playing with hh children, not sports + + + 030104 + Arts and crafts with hh children + + + 030105 + Playing sports with hh children + + + 030106 + Talking with/listening to hh children + + + 030107 + Helping or teaching hh children + + + 030108 + Organization and planning for hh children + + + 030109 + Looking after hh children (as a primary activity) + + + 030110 + Attending hh children's events + + + 030111 + Waiting for/with hh children + + + 030112 + Picking up/dropping off hh children + + + 030199 + Caring for and helping hh children, n.e.c. + + + 030200 + Activities Related to Household Children's Education + + + 030201 + Homework (hh children) + + + 030202 + Meetings and school conferences (hh children) + + + 030203 + Home schooling of hh children + + + 030204 + Waiting associated with hh children's education + + + 030299 + Activities related to hh child's education, n.e.c. + + + 030300 + Activities Related to Household Children's Health + + + 030301 + Providing medical care to hh children + + + 030302 + Obtaining medical care for hh children + + + 030303 + Waiting associated with hh children's health + + + 030399 + Activities related to hh child's health, n.e.c. + + + 030400 + Caring for Household Adults + + + 030401 + Physical care for hh adults + + + 030402 + Looking after hh adult (as a primary activity) + + + 030403 + Providing medical care to hh adult + + + 030404 + Obtaining medical and care services for hh adult + + + 030405 + Waiting associated with caring for hh adults + + + 030499 + Caring for household adults, n.e.c. + + + 030500 + Helping Household Adults + + + 030501 + Helping hh adults + + + 030502 + Organization and planning for hh adults + + + 030503 + Picking up/dropping off hh adult + + + 030504 + Waiting associated with helping hh adults + + + 030599 + Helping household adults, n.e.c. + + + 039900 + Caring for and Helping Household Members, n.e.c. + + + 039999 + Caring for and helping hh members, n.e.c. + + + 040000 + Caring for and Helping Non-Household Members + + + 040100 + Caring for and Helping Non-Household Children + + + 040101 + Physical care for nonhh children + + + 040102 + Reading to/with nonhh children + + + 040103 + Playing with nonhh children, not sports + + + 040104 + Arts and crafts with nonhh children + + + 040105 + Playing sports with nonhh children + + + 040106 + Talking with/listening to nonhh children + + + 040107 + Helping or teaching nonhh children + + + 040108 + Organization and planning for nonhh children + + + 040109 + Looking after nonhh children (as primary activity) + + + 040110 + Attending nonhh children's events + + + 040111 + Waiting for/with nonhh children + + + 040112 + Dropping off/picking up nonhh children + + + 040199 + Caring for and helping nonhh children, n.e.c. + + + 040200 + Activities Related to Non-Household Children's Education + + + 040201 + Homework (nonhh children) + + + 040202 + Mtgs and school conferences (nonhh children) + + + 040203 + Home schooling of nonhh children + + + 040204 + Waiting assoc w/ nonhh children's education + + + 040299 + Activities related to nonhh child's educ., n.e.c. + + + 040300 + Activities Related to Non-Household Children's Health + + + 040301 + Providing medical care to nonhh children + + + 040302 + Obtaining medical care for nonhh children + + + 040303 + Waiting associated with nonhh children's health + + + 040399 + Activities related to nonhh child's health, n.e.c. + + + 040400 + Caring for Non-Household Adults + + + 040401 + Physical care for nonhh adults + + + 040402 + Looking after nonhh adult (as a primary activity) + + + 040403 + Providing medical care to nonhh adult + + + 040404 + Obtaining medical and care svcs for nonhh adult + + + 040405 + Waiting associated with caring for nonhh adults + + + 040499 + Caring for nonhh adults, n.e.c. + + + 040500 + Helping Non-Household Adults + + + 040501 + Hswrk, cooking, and shopping asst, nonhh adults + + + 040502 + House and lawn maint and repair asst, nonhh adults + + + 040503 + Animal and pet care assistance for nonhh adults + + + 040504 + Vehicle/appliance maint/repair asst, nonhh adults + + + 040505 + Financial mgmt asst for nonhh adults + + + 040506 + HH mgmt and paperwork asst, nonhh adults + + + 040507 + Picking up/dropping off nonhh adult + + + 040508 + Waiting associated with helping nonhh adults + + + 040599 + Helping nonhh adults, n.e.c. + + + 049900 + Caring for and Helping Non-Household Members, n.e.c. + + + 049999 + Caring for and helping nonhh members, n.e.c. + + + 050000 + Work and Work-Related Activities + + + 050100 + Working + + + 050101 + Work, main job + + + 050102 + Work, other job(s) + + + 050103 + Security procedures related to work + + + 050104 + Waiting associated with working + + + 050199 + Working, n.e.c. + + + 050200 + Work-Related Activities + + + 050201 + Socializing, relaxing, and leisure as part of job + + + 050202 + Eating and drinking as part of job + + + 050203 + Sports and exercise as part of job + + + 050204 + Security procedures as part of job + + + 050205 + Waiting associated with work-related activities + + + 050299 + Work-related activities, n.e.c. + + + 050300 + Other Income-Generating Activities + + + 050301 + Income-generating hobbies, crafts, and food + + + 050302 + Income-generating performances + + + 050303 + Income-generating services + + + 050304 + Income-generating rental property activities + + + 050305 + Waiting assoc w/other income-generating acts + + + 050399 + Other income-generating activities, n.e.c. + + + 050400 + Job Search and Interviewing + + + 050401 + Job search activities + + + 050403 + Job interviewing + + + 050404 + Waiting associated with job search or interview + + + 050405 + Sec. procedures rel. to job search/interviewing + + + 050499 + Job search and Interviewing, n.e.c. + + + 059900 + Work and Work-Related Activities, n.e.c. + + + 059999 + Work and work-related activities, n.e.c. + + + 060000 + Education + + + 060100 + Taking Class + + + 060101 + Taking class for degree, certification, or lic + + + 060102 + Taking class for personal interest + + + 060103 + Waiting associated with taking classes + + + 060104 + Security procedures rel. to taking classes + + + 060199 + Taking class, n.e.c. + + + 060200 + Extracurricular School Activities (except sports) + + + 060201 + Extracurricular club activities + + + 060202 + Extracurricular music and performance activities + + + 060203 + Extracurricular student government activities + + + 060204 + Waiting associated with extracurricular activities + + + 060299 + Education-related extracurricular activities, n.e.c. + + + 060300 + Research or Homework + + + 060301 + Rsrch/HW for class for degree, cert, or lic + + + 060302 + Research/homework for class for pers. interest + + + 060303 + Waiting associated with research/homework + + + 060399 + Research/homework n.e.c. + + + 060400 + Registration or Administrative Activities + + + 060401 + Admin activities: class for degree, cert, or lic + + + 060402 + Admin activities: class for personal interest + + + 060403 + Waiting assoc w/admin. activities (education) + + + 060499 + Administrative for education, n.e.c. + + + 069900 + Education, n.e.c. + + + 069999 + Education, n.e.c. + + + 070000 + Consumer Purchases + + + 070100 + Shopping (store, telephone, internet) + + + 070101 + Grocery shopping + + + 070102 + Purchasing gas + + + 070103 + Purchasing food (not groceries) + + + 070104 + Shopping, except groceries, food and gas + + + 070105 + Waiting associated with shopping + + + 070199 + Shopping, n.e.c. + + + 070200 + Researching Purchases + + + 070201 + Comparison shopping + + + 070299 + Researching purchases, n.e.c. + + + 070300 + Security Procedures Related to Consumer Purchases + + + 070301 + Security procedures rel. to consumer purchases + + + 070399 + Sec procedures rel. to cons purchases, n.e.c. + + + 079900 + Consumer Purchases, n.e.c. + + + 079999 + Consumer purchases, n.e.c. + + + 080000 + Professional and Personal Care Services + + + 080100 + Childcare Services + + + 080101 + Using paid childcare services + + + 080102 + Waiting associated w/purchasing childcare svcs + + + 080199 + Using paid childcare services, n.e.c. + + + 080200 + Financial Services and Banking + + + 080201 + Banking + + + 080202 + Using other financial services + + + 080203 + Waiting associated w/banking/financial services + + + 080299 + Using financial services and banking, n.e.c. + + + 080300 + Legal Services + + + 080301 + Using legal services + + + 080302 + Waiting associated with legal services + + + 080399 + Using legal services, n.e.c. + + + 080400 + Medical and Care Services + + + 080401 + Using health and care services outside the home + + + 080402 + Using in-home health and care services + + + 080403 + Waiting associated with medical services + + + 080499 + Using medical services, n.e.c. + + + 080500 + Personal Care Services + + + 080501 + Using personal care services + + + 080502 + Waiting associated w/personal care services + + + 080599 + Using personal care services, n.e.c. + + + 080600 + Real Estate + + + 080601 + Activities rel. to purchasing/selling real estate + + + 080602 + Waiting assoc w/purchasing/selling real estate + + + 080699 + Using real estate services, n.e.c. + + + 080700 + Veterinary Services (excluding grooming) + + + 080701 + Using veterinary services + + + 080702 + Waiting associated with veterinary services + + + 080799 + Using veterinary services, n.e.c. + + + 080800 + Security Procedures Related to Professional or Personal Services + + + 080801 + Security procedures rel. to prof/personal svcs. + + + 080899 + Sec procedures rel. to prof/personal svcs n.e.c. + + + 089900 + Professional and Personal Services, n.e.c. + + + 089999 + Professional and personal services, n.e.c. + + + 090000 + Household Services + + + 090100 + Household Services (not done by self) + + + 090101 + Using interior cleaning services + + + 090102 + Using meal preparation services + + + 090103 + Using clothing repair and cleaning services + + + 090104 + Waiting associated with using household services + + + 090199 + Using household services, n.e.c. + + + 090200 + Home Maintenance, Repair, Decoration, and Construction (not done by self) + + + 090201 + Using home maint/repair/décor/construction svcs + + + 090202 + Wtg assoc w/ home main/repair/décor/constr + + + 090299 + Using home maint/repair/décor/constr svcs n.e.c. + + + 090300 + Pet Services (not done by self and not veterinary care) + + + 090301 + Using pet services + + + 090302 + Waiting associated with pet services + + + 090399 + Using pet services, n.e.c. + + + 090400 + Lawn and Garden Services (not done by self) + + + 090401 + Using lawn and garden services + + + 090402 + Waiting assoc with using lawn and garden svcs + + + 090499 + Using lawn and garden services, n.e.c. + + + 090500 + Vehicle Maintenance and Repair Services (not done by self) + + + 090501 + Using vehicle maintenance or repair services + + + 090502 + Waiting assoc with vehicle main. or repair svcs + + + 090599 + Using vehicle maint. and repair svcs, n.e.c. + + + 099900 + Household Services, n.e.c. + + + 099999 + Using household services, n.e.c. + + + 100000 + Government Services and Civic Obligations + + + 100100 + Using Government Services + + + 100101 + Using police and fire services + + + 100102 + Using social services + + + 100103 + Obtaining licenses and paying fines, fees, taxes + + + 100199 + Using government services, n.e.c. + + + 100200 + Civic Obligations and Participation + + + 100201 + Civic obligations and participation + + + 100299 + Civic obligations and participation, n.e.c. + + + 100300 + Waiting Associated with Government Services or Civic Obligations + + + 100303 + Waiting assoc w/civic obligations and participation + + + 100304 + Waiting associated with using government services + + + 100399 + Wtg assoc w/govt svcs or civic obligations, n.e.c. + + + 100400 + Security Procedures Related to Government Services or Civic Obligations + + + 100401 + Sec procedures rel. to govt svcs/civic obligations + + + 100499 + Sec procs rel. to govt svcs/civic obligations, n.e.c. + + + 109900 + Government Services, n.e.c. + + + 109999 + Government services, n.e.c. + + + 110000 + Eating and Drinking + + + 110100 + Eating and Drinking + + + 110101 + Eating and drinking + + + 110199 + Eating and drinking, n.e.c. + + + 110200 + Waiting Associated with Eating and Drinking + + + 110201 + Waiting associated w/eating and drinking + + + 110299 + Waiting associated with eating and drinking, n.e.c. + + + 119900 + Eating and Drinking, n.e.c. + + + 119999 + Eating and drinking, n.e.c. + + + 120000 + Socializing, Relaxing, and Leisure + + + 120100 + Socializing and Communicating + + + 120101 + Socializing and communicating with others + + + 120199 + Socializing and communicating, n.e.c. + + + 120200 + Attending or Hosting Social Events + + + 120201 + Attending or hosting parties/receptions/ceremonies + + + 120202 + Attending meetings for personal interest (not volunteering) + + + 120299 + Attending/hosting social events, n.e.c. + + + 120300 + Relaxing and Leisure + + + 120301 + Relaxing, thinking + + + 120302 + Tobacco and drug use + + + 120303 + Television and movies (not religious) + + + 120304 + Television (religious) + + + 120305 + Listening to the radio + + + 120306 + Listening to/playing music (not radio) + + + 120307 + Playing games + + + 120308 + Computer use for leisure (exc. Games) + + + 120309 + Arts and crafts as a hobby + + + 120310 + Collecting as a hobby + + + 120311 + Hobbies, except arts and crafts and collecting + + + 120312 + Reading for personal interest + + + 120313 + Writing for personal interest + + + 120399 + Relaxing and leisure, n.e.c. + + + 120400 + Arts and Entertainment (other than sports) + + + 120401 + Attending performing arts + + + 120402 + Attending museums + + + 120403 + Attending movies/film + + + 120404 + Attending gambling establishments + + + 120405 + Security procedures rel. to arts and entertainment + + + 120499 + Arts and entertainment, n.e.c. + + + 120500 + Waiting Associated with Socializing, Relaxing, and Leisure + + + 120501 + Waiting assoc. w/socializing and communicating + + + 120502 + Waiting assoc. w/attending/hosting social events + + + 120503 + Waiting associated with relaxing/leisure + + + 120504 + Waiting associated with arts and entertainment + + + 120599 + Waiting associated with socializing, n.e.c. + + + 129900 + Socializing, Relaxing, and Leisure, n.e.c. + + + 129999 + Socializing, relaxing, and leisure, n.e.c. + + + 130000 + Sports, Exercise, and Recreation + + + 130100 + Participating in Sports, Exercise, or Recreation + + + 130101 + Doing aerobics + + + 130102 + Playing baseball + + + 130103 + Playing basketball + + + 130104 + Biking + + + 130105 + Playing billiards + + + 130106 + Boating + + + 130107 + Bowling + + + 130108 + Climbing, spelunking, caving + + + 130109 + Dancing + + + 130110 + Participating in equestrian sports + + + 130111 + Fencing + + + 130112 + Fishing + + + 130113 + Playing football + + + 130114 + Golfing + + + 130115 + Doing gymnastics + + + 130116 + Hiking + + + 130117 + Playing hockey + + + 130118 + Hunting + + + 130119 + Participating in martial arts + + + 130120 + Playing racquet sports + + + 130121 + Participating in rodeo competitions + + + 130122 + Rollerblading + + + 130123 + Playing rugby + + + 130124 + Running + + + 130125 + Skiing, ice skating, snowboarding + + + 130126 + Playing soccer + + + 130127 + Playing softball + + + 130128 + Using cardiovascular equipment + + + 130129 + Vehicle touring/racing + + + 130130 + Playing volleyball + + + 130131 + Walking + + + 130132 + Participating in water sports + + + 130133 + Weightlifting/strength training + + + 130134 + Working out, unspecified + + + 130135 + Wrestling + + + 130136 + Doing yoga + + + 130199 + Playing sports n.e.c. + + + 130200 + Attending Sports or Recreational Events + + + 130201 + Watching aerobics + + + 130202 + Watching baseball + + + 130203 + Watching basketball + + + 130204 + Watching biking + + + 130205 + Watching billiards + + + 130206 + Watching boating + + + 130207 + Watching bowling + + + 130208 + Watching climbing, spelunking, caving + + + 130209 + Watching dancing + + + 130210 + Watching equestrian sports + + + 130211 + Watching fencing + + + 130212 + Watching fishing + + + 130213 + Watching football + + + 130214 + Watching golfing + + + 130215 + Watching gymnastics + + + 130216 + Watching hockey + + + 130217 + Watching martial arts + + + 130218 + Watching racquet sports + + + 130219 + Watching rodeo competitions + + + 130220 + Watching rollerblading + + + 130221 + Watching rugby + + + 130222 + Watching running + + + 130223 + Watching skiing, ice skating, snowboarding + + + 130224 + Watching soccer + + + 130225 + Watching softball + + + 130226 + Watching vehicle touring/racing + + + 130227 + Watching volleyball + + + 130228 + Watching walking + + + 130229 + Watching water sports + + + 130230 + Watching weightlifting/strength training + + + 130231 + Watching people working out, unspecified + + + 130232 + Watching wrestling + + + 130299 + Attending sporting events, n.e.c. + + + 130300 + Waiting Associated with Sports, Exercise, and Recreation + + + 130301 + Waiting related to playing sports or exercising + + + 130302 + Waiting related to attending sporting events + + + 130399 + Wtg assoc with sports, exercise, and rec, n.e.c. + + + 130400 + Security Procedures Related to Sports, Exercise, and Recreation + + + 130401 + Security related to playing sports or exercising + + + 130402 + Security related to attending sporting events + + + 130499 + Sec related to sports, exercise, and rec, n.e.c. + + + 139900 + Sports, Exercise, and Recreation, n.e.c. + + + 139999 + Sports, exercise, and recreation, n.e.c. + + + 140000 + Religious and Spiritual Activities + + + 140100 + Religious or Spiritual Practices + + + 140101 + Attending religious services + + + 140102 + Participation in religious practices + + + 140103 + Waiting assoc w/religious and spiritual activities + + + 140104 + Sec procedures rel. to relig and spiritual activities + + + 140105 + Religious education activities (2007+) + + + 149900 + Religious and Spiritual Activities, n.e.c. + + + 149999 + Religious and spiritual activities, n.e.c. + + + 150000 + Volunteer Activities + + + 150100 + Administrative and Support Activities + + + 150101 + Computer use + + + 150102 + Organizing and preparing + + + 150103 + Reading + + + 150104 + Telephone calls (except hotline counseling) + + + 150105 + Writing + + + 150106 + Fundraising + + + 150199 + Administrative and support activities, n.e.c. + + + 150200 + Social Service and Care Activities (except medical) + + + 150201 + Food preparation, presentation, clean-up + + + 150202 + Collecting and delivering clothing and other goods + + + 150203 + Providing care + + + 150204 + Teaching, leading, counseling, mentoring + + + 150299 + Social service and care activities, n.e.c. + + + 150300 + Indoor and Outdoor Maintenance, Building, and Clean-Up Activities + + + 150301 + Building houses, wildlife sites, and other structures + + + 150302 + Indoor and outdoor maintenance, repair, and clean-up + + + 150399 + Indoor and outdoor maint, bldg and clean-up, n.e.c. + + + 150400 + Participating in Performance and Cultural Activities + + + 150401 + Performing + + + 150402 + Serving at volunteer events and cultural activities + + + 150499 + Participating performance, cultural act., n.e.c. + + + 150500 + Attending Meetings, Conferences, and Training + + + 150501 + Attending meetings, conferences, and training + + + 150599 + Attending mtgs conferences, and training, n.e.c. + + + 150600 + Public Health and Safety Activities + + + 150601 + Public health activities + + + 150602 + Public safety activities + + + 150699 + Public health and safety activities, n.e.c. + + + 150700 + Waiting Associated with Volunteer Activities + + + 150701 + Waiting associated with volunteer activities + + + 150799 + Waiting assoc with volunteer activities, n.e.c. + + + 150800 + Security Procedures Related to Volunteer Activities + + + 150801 + Security procedures related to volunteer activities (2007+) + + + 150899 + Security proecdures related to voluteer activities, n.e.c. (2007+) + + + 159900 + Volunteer Activities, n.e.c. + + + 159999 + Volunteer activities, n.e.c. + + + 160000 + Telephone Calls + + + 160100 + Telephone Calls (to or from) + + + 160101 + Telephone calls to/from family members + + + 160102 + Phone calls to/from friends, neighbors + + + 160103 + Telephone calls to/from education svcs providers + + + 160104 + Telephone calls to/from salespeople + + + 160105 + Phone calls to/from prof, personal svcs providers + + + 160106 + Phone calls to/from household services providers + + + 160107 + Phone calls to/from child or adult care providers + + + 160108 + Telephone calls to/from government officials + + + 160199 + Telephone calls (to or from), n.e.c. + + + 160200 + Waiting Associated with Telephone Calls + + + 160201 + Waiting associated with telephone calls + + + 160299 + Waiting associated with telephone calls, n.e.c. + + + 169900 + Telephone Calls, n.e.c. + + + 169999 + Telephone calls, n.e.c. + + + 180000 + Traveling + + + 180100 + Travel Related to Personal Care + + + 180101 + Travel related to personal care + + + 180199 + Travel related to personal care, n.e.c. + + + 180200 + Travel Related to Household Activities + + + 180201 + Travel related to housework + + + 180202 + Travel related to food and drink prep + + + 180203 + Travel related to int. maint, repair, and decoration + + + 180204 + Travel related to ext. maint, repair, and decoration + + + 180205 + Travel related to lawn, garden, and houseplants + + + 180206 + Travel related to care for animals (not vet care) + + + 180207 + Travel related to vehicle care and maint (by self) + + + 180208 + Trvl rel to app, tool, toy set-up, repair, and maint + + + 180209 + Travel related to household management + + + 180299 + Travel related to household activities, n.e.c. + + + 180300 + Travel Related to Caring for and Helping Household Members + + + 180301 + Travel related to caring for and helping HH children + + + 180302 + Travel related to caring for and helping household children (2005+) + + + 180303 + Travel related to hh children's education + + + 180304 + Travel related to hh children's health + + + 180305 + Travel related to caring for hh adults + + + 180306 + Travel related to helping hh adults + + + 180307 + Travel related to caring for and helping HH adults + + + 180399 + Trvl rel. to caring for, helping HH members, n.e.c. + + + 180400 + Travel Related to Caring for and Helping Non-Household Members + + + 180401 + Trvl rel to caring for and helping nonHH kids, inclusive + + + 180402 + Trvl rel to caring for and helping nonHH kids + + + 180403 + Travel related to nonhh children's education + + + 180404 + Travel related to nonhh children's health + + + 180405 + Travel related to caring for nonhh adults + + + 180406 + Travel related to helping nonhh adults + + + 180407 + Travel related to caring for, helping NonHH adults + + + 180499 + Trvl rel. to caring for, helping NonHH, n.e.c. + + + 180500 + Travel Related to Work + + + 180501 + Travel related to working + + + 180502 + Travel related to work-related activities + + + 180503 + Travel related to income-generating activities + + + 180504 + Travel related to job search and interviewing + + + 180599 + Travel related to work, n.e.c. + + + 180600 + Travel Related to Education + + + 180601 + Travel related to taking class + + + 180602 + Trvl rel to extracurricular activities (ex. Sports) + + + 180603 + Travel related to research/homework + + + 180604 + Travel related to registration/admin activities + + + 180605 + Education-related travel, not commuting + + + 180699 + Education travel, n.e.c. + + + 180700 + Travel Related to Consumer Purchases + + + 180701 + Traveling to/from the grocery store + + + 180702 + Travel related to other shopping + + + 180703 + Travel related to purchasing food (not groceries) + + + 180704 + Travel related to shopping, ex groc, food, gas + + + 180705 + Traveling to/from gas station + + + 180799 + Travel related to consumer purchases, n.e.c. + + + 180800 + Travel Related to Using Professional and Personal Care Services + + + 180801 + Travel related to using childcare services + + + 180802 + Travel related to using financial svcs and banking + + + 180803 + Travel related to using legal services + + + 180804 + Travel related to using medical services + + + 180805 + Travel related to using personal care services + + + 180806 + Travel related to using real estate services + + + 180807 + Travel related to using veterinary services + + + 180899 + Travel rel. to using prof, personal care svcs n.e.c. + + + 180900 + Travel Related to Using Household Services + + + 180901 + Travel related to using household services + + + 180902 + Trvl rel to using home maint etc svcs + + + 180903 + Travel related to using pet services (not vet) + + + 180904 + Travel related to using lawn and garden services + + + 180905 + Trvl rel to using vehicle maint and repair services + + + 180999 + Travel related to using household services, n.e.c. + + + 181000 + Travel Related to Using Government Services and Civic Obligations + + + 181001 + Travel related to using government services + + + 181002 + Travel related to civic obligations and participation + + + 181099 + Travel rel. to govt svcs and civic obligations, n.e.c. + + + 181100 + Travel Related to Eating and Drinking + + + 181101 + Travel related to eating and drinking + + + 181199 + Travel related to eating and drinking, n.e.c. + + + 181200 + Travel Related to Socializing, Relaxing, and Leisure + + + 181201 + Travel related to socializing and communicating + + + 181202 + Trvl related to attending or hosting social events + + + 181203 + Travel related to relaxing and leisure (2003, 2004) + + + 181204 + Travel related to arts and entertainment + + + 181205 + Travel as a form of entertainment + + + 181206 + Travel related to relaxing and leisure (2005+) + + + 181299 + Travel rel. to socializing, relaxing, leisure, n.e.c. + + + 181300 + Travel Related to Sports, Exercise, and Recreation + + + 181301 + Trvl rel to doing sports/exercise/recreation + + + 181302 + Trvl rel to attending sporting/recreational events + + + 181399 + Travel rel to sports, exercise, recreation, n.e.c. + + + 181400 + Travel Related to Religious or Spiritual Activities + + + 181401 + Travel related to religious/spiritual practices + + + 181499 + Travel rel. to religious/spiritual activities, n.e.c. + + + 181500 + Travel Related to Volunteering + + + 181501 + Travel related to volunteering + + + 181599 + Travel related to volunteer activities, n.e.c. + + + 181600 + Travel Related to Phone Calls + + + 181601 + Travel related to phone calls + + + 181699 + Travel rel. to phone calls, n.e.c. + + + 181800 + Security Procedures Related to Traveling + + + 181801 + Security procedures related to traveling + + + 181899 + Security procedures related to traveling, n.e.c. + + + 189900 + Traveling, n.e.c. + + + 189999 + Traveling, n.e.c. + + + 500000 + Data Codes + + + 500100 + Unable to Code + + + 500101 + Insufficient detail in verbatim + + + 500102 + Recorded activity using incorrect words + + + 500103 + Missing travel or destination + + + 500104 + Recorded simultaneous activities incorrectly + + + 500105 + Respondent refused to provide information + + + 500106 + Gap/can't remember + + + 500107 + Unable to code activity at 1st tier + + + 509900 + Data codes, n.e.c. + + + 509999 + Data codes, n.e.c. + + Technical Activity Variables -- ACTIVITY + + + + + Activity start time + + + Technical Activity Variables -- ACTIVITY + + + + + Activity stop time + + + Technical Activity Variables -- ACTIVITY + + + + + BLS: Personal care + + + Time Use Variables -- PERSON + + + + diff --git a/tests/fixtures/atus_00035.dat.gz b/tests/fixtures/atus_00035.dat.gz new file mode 100644 index 0000000..43c3d45 Binary files /dev/null and b/tests/fixtures/atus_00035.dat.gz differ diff --git a/tests/fixtures/atus_00035.xml b/tests/fixtures/atus_00035.xml new file mode 100644 index 0000000..fbdddce --- /dev/null +++ b/tests/fixtures/atus_00035.xml @@ -0,0 +1,3086 @@ + + + + + + + Codebook for an ATUS Data Extract + DDI 2.5 metadata describing the extract file 'atus_00035.dat' + ddi2-27363a39-8e14-11e5-8c97-b82a72e0b782-atus_00035.dat-www.atusdata.org + + + IPUMS + + + IPUMS + May 16, 2024 + IPUMS, 50 Willey Hall, 225 - 19th Avenue South, Minneapolis, MN 55455 + + + IPUMS + + + + + + + User Extract atus_00035.dat + + + IPUMS + + + IPUMS + May 16, 2024 + IPUMS, 50 Willey Hall, 225 - 19th Avenue South, Minneapolis, MN 55455 + + + IPUMS + + + IPUMS ATUS + DOI:10.18128/D060.V3.2 + + + + + + + + Technical Household Variables -- HOUSEHOLD + Geographic Variables -- HOUSEHOLD + Technical Person Variables -- PERSON + Weights Variables -- PERSON + Core Demographic Variables -- PERSON + Technical Activity Variables -- ACTIVITY + + + 2016 + United States + + + + + + + ATUS + + + The user of the data acknowledges that the original collector of the data, the authorized distributor of the data, and the relevant funding agency bear no responsibility for use of the data or for interpretations or inferences based upon such uses. + + + + + + + atus_00035.dat + Microdata records + + + Elder Care Record + + + Who Record + + + Activity Record + + + Person Record + + + Household Record + + + ISO-8859-1 data file + fixed length fields + IPUMS, 50 Willey Hall, 225 - 19th Avenue South, Minneapolis, MN 55455 + + + + + Record Type + + + 1 + Household + + + 2 + Person + + + 3 + Activity + + + 4 + Who + + + 5 + Eldercare + + Technical Household Variables -- HOUSEHOLD + + + + + Survey year + + + Technical Household Variables -- HOUSEHOLD + + + + + ATUS Case ID + + + Technical Household Variables -- HOUSEHOLD + + + + + Household serial number + + + Technical Household Variables -- HOUSEHOLD + + + + + FIPS State Code + + + 01 + Alabama + + + 02 + Alaska + + + 04 + Arizona + + + 05 + Arkansas + + + 06 + California + + + 08 + Colorado + + + 09 + Connecticut + + + 10 + Delaware + + + 11 + District of Columbia + + + 12 + Florida + + + 13 + Georgia + + + 15 + Hawaii + + + 16 + Idaho + + + 17 + Illinois + + + 18 + Indiana + + + 19 + Iowa + + + 20 + Kansas + + + 21 + Kentucky + + + 22 + Louisiana + + + 23 + Maine + + + 24 + Maryland + + + 25 + Massachusetts + + + 26 + Michigan + + + 27 + Minnesota + + + 28 + Mississippi + + + 29 + Missouri + + + 30 + Montana + + + 31 + Nebraska + + + 32 + Nevada + + + 33 + New Hampshire + + + 34 + New Jersey + + + 35 + New Mexico + + + 36 + New York + + + 37 + North Carolina + + + 38 + North Dakota + + + 39 + Ohio + + + 40 + Oklahoma + + + 41 + Oregon + + + 42 + Pennsylvania + + + 44 + Rhode Island + + + 45 + South Carolina + + + 46 + South Dakota + + + 47 + Tennessee + + + 48 + Texas + + + 49 + Utah + + + 50 + Vermont + + + 51 + Virginia + + + 53 + Washington + + + 54 + West Virginia + + + 55 + Wisconsin + + + 56 + Wyoming + + Geographic Variables -- HOUSEHOLD + + + + + Person number (general) + + + 01 + 1 + + + 02 + 2 + + + 03 + 3 + + + 04 + 4 + + + 05 + 5 + + + 06 + 6 + + + 07 + 7 + + + 08 + 8 + + + 09 + 9 + + + 10 + 10 + + + 11 + 11 + + + 12 + 12 + + + 13 + 13 + + + 14 + 14 + + + 15 + 15 + + + 16 + 16 + + Technical Person Variables -- PERSON + + + + + Person line number + + + 001 + 1 + + + 002 + 2 + + + 003 + 3 + + + 004 + 4 + + + 005 + 5 + + + 006 + 6 + + + 007 + 7 + + + 008 + 8 + + + 009 + 9 + + + 010 + 10 + + + 011 + 11 + + + 012 + 12 + + + 013 + 13 + + + 014 + 14 + + + 015 + 15 + + + 016 + 16 + + + 017 + 17 + + + 018 + 18 + + + 019 + 19 + + + 999 + NIU (Not in universe) + + Technical Person Variables -- PERSON + + + + + Person weight, 2006 methodology + + + Weights Variables -- PERSON + + + + + Age + + + Core Demographic Variables -- PERSON + + + + + Sex + + + 01 + Male + + + 02 + Female + + + 99 + NIU (Not in universe) + + Core Demographic Variables -- PERSON + + + + + Activity line number + + + Technical Activity Variables -- ACTIVITY + + + + + Activity + + + 010000 + Personal Care + + + 010100 + Sleeping + + + 010101 + Sleeping + + + 010102 + Sleeplessness + + + 010199 + Sleeping, n.e.c. + + + 010200 + Grooming + + + 010201 + Washing, dressing and grooming oneself + + + 010299 + Grooming, n.e.c. + + + 010300 + Health-Related Self Care + + + 010301 + Health-related self care + + + 010399 + Self care, n.e.c. + + + 010400 + Personal Activities + + + 010401 + Personal/Private activities + + + 010499 + Personal activities, n.e.c. + + + 010500 + Personal Care Emergencies + + + 010501 + Personal emergencies + + + 010599 + Personal care emergencies, n.e.c. + + + 019900 + Personal Care, n.e.c. + + + 019999 + Personal care, n.e.c. + + + 020000 + Household Activities + + + 020100 + Housework + + + 020101 + Interior cleaning + + + 020102 + Laundry + + + 020103 + Sewing, repairing, and maintaining textiles + + + 020104 + Storing interior hh items, inc. food + + + 020199 + Housework, n.e.c. + + + 020200 + Food and Drink Preparation, Presentation, and Clean-up + + + 020201 + Food and drink preparation + + + 020202 + Food presentation + + + 020203 + Kitchen and food clean-up + + + 020299 + Food and drink prep, serving and clean-up, n.e.c. + + + 020300 + Interior Maintenance, Repair, and Decoration + + + 020301 + Interior arrangement, decoration, and repairs + + + 020302 + Building and repairing furniture + + + 020303 + Heating and cooling + + + 020399 + Interior maintenance, repair, and decoration, n.e.c. + + + 020400 + Exterior Maintenance, Repair, and Decoration + + + 020401 + Exterior cleaning + + + 020402 + Exterior repair, improvements, and decoration + + + 020499 + Exterior maintenance, repair and decoration, n.e.c. + + + 020500 + Lawn, Garden, and Houseplants + + + 020501 + Lawn, garden, and houseplant care + + + 020502 + Ponds, pools, and hot tubs + + + 020599 + Lawn and garden, n.e.c. + + + 020600 + Animals and Pets + + + 020601 + Care for animals and pets (not veterinary care) + + + 020602 + Care for animals and pets (not veterinary care) (2008+) + + + 020603 + Walking, exercising, playing with animals (2008+) + + + 020699 + Pet and animal care, n.e.c. + + + 020700 + Vehicles + + + 020701 + Vehicle repair and maintenance (by self) + + + 020799 + Vehicles, n.e.c. + + + 020800 + Appliances, Tools, and Toys + + + 020801 + App, tool, toy set-up, repair, and maint (by self) + + + 020899 + Appliances and tools, n.e.c. + + + 020900 + Household Management + + + 020901 + Financial management + + + 020902 + Household and personal organization and planning + + + 020903 + HH and personal mail and messages (except e-mail) + + + 020904 + HH and personal e-mail and messages + + + 020905 + Home security + + + 020999 + Household management, n.e.c. + + + 029900 + Household Activities, n.e.c. + + + 029999 + Household activities, n.e.c. + + + 030000 + Caring for and Helping Household Members + + + 030100 + Caring for and Helping Household Children + + + 030101 + Physical care for hh children + + + 030102 + Reading to/with hh children + + + 030103 + Playing with hh children, not sports + + + 030104 + Arts and crafts with hh children + + + 030105 + Playing sports with hh children + + + 030106 + Talking with/listening to hh children + + + 030107 + Helping or teaching hh children + + + 030108 + Organization and planning for hh children + + + 030109 + Looking after hh children (as a primary activity) + + + 030110 + Attending hh children's events + + + 030111 + Waiting for/with hh children + + + 030112 + Picking up/dropping off hh children + + + 030199 + Caring for and helping hh children, n.e.c. + + + 030200 + Activities Related to Household Children's Education + + + 030201 + Homework (hh children) + + + 030202 + Meetings and school conferences (hh children) + + + 030203 + Home schooling of hh children + + + 030204 + Waiting associated with hh children's education + + + 030299 + Activities related to hh child's education, n.e.c. + + + 030300 + Activities Related to Household Children's Health + + + 030301 + Providing medical care to hh children + + + 030302 + Obtaining medical care for hh children + + + 030303 + Waiting associated with hh children's health + + + 030399 + Activities related to hh child's health, n.e.c. + + + 030400 + Caring for Household Adults + + + 030401 + Physical care for hh adults + + + 030402 + Looking after hh adult (as a primary activity) + + + 030403 + Providing medical care to hh adult + + + 030404 + Obtaining medical and care services for hh adult + + + 030405 + Waiting associated with caring for hh adults + + + 030499 + Caring for household adults, n.e.c. + + + 030500 + Helping Household Adults + + + 030501 + Helping hh adults + + + 030502 + Organization and planning for hh adults + + + 030503 + Picking up/dropping off hh adult + + + 030504 + Waiting associated with helping hh adults + + + 030599 + Helping household adults, n.e.c. + + + 039900 + Caring for and Helping Household Members, n.e.c. + + + 039999 + Caring for and helping hh members, n.e.c. + + + 040000 + Caring for and Helping Non-Household Members + + + 040100 + Caring for and Helping Non-Household Children + + + 040101 + Physical care for nonhh children + + + 040102 + Reading to/with nonhh children + + + 040103 + Playing with nonhh children, not sports + + + 040104 + Arts and crafts with nonhh children + + + 040105 + Playing sports with nonhh children + + + 040106 + Talking with/listening to nonhh children + + + 040107 + Helping or teaching nonhh children + + + 040108 + Organization and planning for nonhh children + + + 040109 + Looking after nonhh children (as primary activity) + + + 040110 + Attending nonhh children's events + + + 040111 + Waiting for/with nonhh children + + + 040112 + Dropping off/picking up nonhh children + + + 040199 + Caring for and helping nonhh children, n.e.c. + + + 040200 + Activities Related to Non-Household Children's Education + + + 040201 + Homework (nonhh children) + + + 040202 + Mtgs and school conferences (nonhh children) + + + 040203 + Home schooling of nonhh children + + + 040204 + Waiting assoc w/ nonhh children's education + + + 040299 + Activities related to nonhh child's educ., n.e.c. + + + 040300 + Activities Related to Non-Household Children's Health + + + 040301 + Providing medical care to nonhh children + + + 040302 + Obtaining medical care for nonhh children + + + 040303 + Waiting associated with nonhh children's health + + + 040399 + Activities related to nonhh child's health, n.e.c. + + + 040400 + Caring for Non-Household Adults + + + 040401 + Physical care for nonhh adults + + + 040402 + Looking after nonhh adult (as a primary activity) + + + 040403 + Providing medical care to nonhh adult + + + 040404 + Obtaining medical and care svcs for nonhh adult + + + 040405 + Waiting associated with caring for nonhh adults + + + 040499 + Caring for nonhh adults, n.e.c. + + + 040500 + Helping Non-Household Adults + + + 040501 + Hswrk, cooking, and shopping asst, nonhh adults + + + 040502 + House and lawn maint and repair asst, nonhh adults + + + 040503 + Animal and pet care assistance for nonhh adults + + + 040504 + Vehicle/appliance maint/repair asst, nonhh adults + + + 040505 + Financial mgmt asst for nonhh adults + + + 040506 + HH mgmt and paperwork asst, nonhh adults + + + 040507 + Picking up/dropping off nonhh adult + + + 040508 + Waiting associated with helping nonhh adults + + + 040599 + Helping nonhh adults, n.e.c. + + + 049900 + Caring for and Helping Non-Household Members, n.e.c. + + + 049999 + Caring for and helping nonhh members, n.e.c. + + + 050000 + Work and Work-Related Activities + + + 050100 + Working + + + 050101 + Work, main job + + + 050102 + Work, other job(s) + + + 050103 + Security procedures related to work + + + 050104 + Waiting associated with working + + + 050199 + Working, n.e.c. + + + 050200 + Work-Related Activities + + + 050201 + Socializing, relaxing, and leisure as part of job + + + 050202 + Eating and drinking as part of job + + + 050203 + Sports and exercise as part of job + + + 050204 + Security procedures as part of job + + + 050205 + Waiting associated with work-related activities + + + 050299 + Work-related activities, n.e.c. + + + 050300 + Other Income-Generating Activities + + + 050301 + Income-generating hobbies, crafts, and food + + + 050302 + Income-generating performances + + + 050303 + Income-generating services + + + 050304 + Income-generating rental property activities + + + 050305 + Waiting assoc w/other income-generating acts + + + 050399 + Other income-generating activities, n.e.c. + + + 050400 + Job Search and Interviewing + + + 050401 + Job search activities + + + 050403 + Job interviewing + + + 050404 + Waiting associated with job search or interview + + + 050405 + Sec. procedures rel. to job search/interviewing + + + 050499 + Job search and Interviewing, n.e.c. + + + 059900 + Work and Work-Related Activities, n.e.c. + + + 059999 + Work and work-related activities, n.e.c. + + + 060000 + Education + + + 060100 + Taking Class + + + 060101 + Taking class for degree, certification, or lic + + + 060102 + Taking class for personal interest + + + 060103 + Waiting associated with taking classes + + + 060104 + Security procedures rel. to taking classes + + + 060199 + Taking class, n.e.c. + + + 060200 + Extracurricular School Activities (except sports) + + + 060201 + Extracurricular club activities + + + 060202 + Extracurricular music and performance activities + + + 060203 + Extracurricular student government activities + + + 060204 + Waiting associated with extracurricular activities + + + 060299 + Education-related extracurricular activities, n.e.c. + + + 060300 + Research or Homework + + + 060301 + Rsrch/HW for class for degree, cert, or lic + + + 060302 + Research/homework for class for pers. interest + + + 060303 + Waiting associated with research/homework + + + 060399 + Research/homework n.e.c. + + + 060400 + Registration or Administrative Activities + + + 060401 + Admin activities: class for degree, cert, or lic + + + 060402 + Admin activities: class for personal interest + + + 060403 + Waiting assoc w/admin. activities (education) + + + 060499 + Administrative for education, n.e.c. + + + 069900 + Education, n.e.c. + + + 069999 + Education, n.e.c. + + + 070000 + Consumer Purchases + + + 070100 + Shopping (store, telephone, internet) + + + 070101 + Grocery shopping + + + 070102 + Purchasing gas + + + 070103 + Purchasing food (not groceries) + + + 070104 + Shopping, except groceries, food and gas + + + 070105 + Waiting associated with shopping + + + 070199 + Shopping, n.e.c. + + + 070200 + Researching Purchases + + + 070201 + Comparison shopping + + + 070299 + Researching purchases, n.e.c. + + + 070300 + Security Procedures Related to Consumer Purchases + + + 070301 + Security procedures rel. to consumer purchases + + + 070399 + Sec procedures rel. to cons purchases, n.e.c. + + + 079900 + Consumer Purchases, n.e.c. + + + 079999 + Consumer purchases, n.e.c. + + + 080000 + Professional and Personal Care Services + + + 080100 + Childcare Services + + + 080101 + Using paid childcare services + + + 080102 + Waiting associated w/purchasing childcare svcs + + + 080199 + Using paid childcare services, n.e.c. + + + 080200 + Financial Services and Banking + + + 080201 + Banking + + + 080202 + Using other financial services + + + 080203 + Waiting associated w/banking/financial services + + + 080299 + Using financial services and banking, n.e.c. + + + 080300 + Legal Services + + + 080301 + Using legal services + + + 080302 + Waiting associated with legal services + + + 080399 + Using legal services, n.e.c. + + + 080400 + Medical and Care Services + + + 080401 + Using health and care services outside the home + + + 080402 + Using in-home health and care services + + + 080403 + Waiting associated with medical services + + + 080499 + Using medical services, n.e.c. + + + 080500 + Personal Care Services + + + 080501 + Using personal care services + + + 080502 + Waiting associated w/personal care services + + + 080599 + Using personal care services, n.e.c. + + + 080600 + Real Estate + + + 080601 + Activities rel. to purchasing/selling real estate + + + 080602 + Waiting assoc w/purchasing/selling real estate + + + 080699 + Using real estate services, n.e.c. + + + 080700 + Veterinary Services (excluding grooming) + + + 080701 + Using veterinary services + + + 080702 + Waiting associated with veterinary services + + + 080799 + Using veterinary services, n.e.c. + + + 080800 + Security Procedures Related to Professional or Personal Services + + + 080801 + Security procedures rel. to prof/personal svcs. + + + 080899 + Sec procedures rel. to prof/personal svcs n.e.c. + + + 089900 + Professional and Personal Services, n.e.c. + + + 089999 + Professional and personal services, n.e.c. + + + 090000 + Household Services + + + 090100 + Household Services (not done by self) + + + 090101 + Using interior cleaning services + + + 090102 + Using meal preparation services + + + 090103 + Using clothing repair and cleaning services + + + 090104 + Waiting associated with using household services + + + 090199 + Using household services, n.e.c. + + + 090200 + Home Maintenance, Repair, Decoration, and Construction (not done by self) + + + 090201 + Using home maint/repair/décor/construction svcs + + + 090202 + Wtg assoc w/ home main/repair/décor/constr + + + 090299 + Using home maint/repair/décor/constr svcs n.e.c. + + + 090300 + Pet Services (not done by self and not veterinary care) + + + 090301 + Using pet services + + + 090302 + Waiting associated with pet services + + + 090399 + Using pet services, n.e.c. + + + 090400 + Lawn and Garden Services (not done by self) + + + 090401 + Using lawn and garden services + + + 090402 + Waiting assoc with using lawn and garden svcs + + + 090499 + Using lawn and garden services, n.e.c. + + + 090500 + Vehicle Maintenance and Repair Services (not done by self) + + + 090501 + Using vehicle maintenance or repair services + + + 090502 + Waiting assoc with vehicle main. or repair svcs + + + 090599 + Using vehicle maint. and repair svcs, n.e.c. + + + 099900 + Household Services, n.e.c. + + + 099999 + Using household services, n.e.c. + + + 100000 + Government Services and Civic Obligations + + + 100100 + Using Government Services + + + 100101 + Using police and fire services + + + 100102 + Using social services + + + 100103 + Obtaining licenses and paying fines, fees, taxes + + + 100199 + Using government services, n.e.c. + + + 100200 + Civic Obligations and Participation + + + 100201 + Civic obligations and participation + + + 100299 + Civic obligations and participation, n.e.c. + + + 100300 + Waiting Associated with Government Services or Civic Obligations + + + 100303 + Waiting assoc w/civic obligations and participation + + + 100304 + Waiting associated with using government services + + + 100399 + Wtg assoc w/govt svcs or civic obligations, n.e.c. + + + 100400 + Security Procedures Related to Government Services or Civic Obligations + + + 100401 + Sec procedures rel. to govt svcs/civic obligations + + + 100499 + Sec procs rel. to govt svcs/civic obligations, n.e.c. + + + 109900 + Government Services, n.e.c. + + + 109999 + Government services, n.e.c. + + + 110000 + Eating and Drinking + + + 110100 + Eating and Drinking + + + 110101 + Eating and drinking + + + 110199 + Eating and drinking, n.e.c. + + + 110200 + Waiting Associated with Eating and Drinking + + + 110201 + Waiting associated w/eating and drinking + + + 110299 + Waiting associated with eating and drinking, n.e.c. + + + 119900 + Eating and Drinking, n.e.c. + + + 119999 + Eating and drinking, n.e.c. + + + 120000 + Socializing, Relaxing, and Leisure + + + 120100 + Socializing and Communicating + + + 120101 + Socializing and communicating with others + + + 120199 + Socializing and communicating, n.e.c. + + + 120200 + Attending or Hosting Social Events + + + 120201 + Attending or hosting parties/receptions/ceremonies + + + 120202 + Attending meetings for personal interest (not volunteering) + + + 120299 + Attending/hosting social events, n.e.c. + + + 120300 + Relaxing and Leisure + + + 120301 + Relaxing, thinking + + + 120302 + Tobacco and drug use + + + 120303 + Television and movies (not religious) + + + 120304 + Television (religious) + + + 120305 + Listening to the radio + + + 120306 + Listening to/playing music (not radio) + + + 120307 + Playing games + + + 120308 + Computer use for leisure (exc. Games) + + + 120309 + Arts and crafts as a hobby + + + 120310 + Collecting as a hobby + + + 120311 + Hobbies, except arts and crafts and collecting + + + 120312 + Reading for personal interest + + + 120313 + Writing for personal interest + + + 120399 + Relaxing and leisure, n.e.c. + + + 120400 + Arts and Entertainment (other than sports) + + + 120401 + Attending performing arts + + + 120402 + Attending museums + + + 120403 + Attending movies/film + + + 120404 + Attending gambling establishments + + + 120405 + Security procedures rel. to arts and entertainment + + + 120499 + Arts and entertainment, n.e.c. + + + 120500 + Waiting Associated with Socializing, Relaxing, and Leisure + + + 120501 + Waiting assoc. w/socializing and communicating + + + 120502 + Waiting assoc. w/attending/hosting social events + + + 120503 + Waiting associated with relaxing/leisure + + + 120504 + Waiting associated with arts and entertainment + + + 120599 + Waiting associated with socializing, n.e.c. + + + 129900 + Socializing, Relaxing, and Leisure, n.e.c. + + + 129999 + Socializing, relaxing, and leisure, n.e.c. + + + 130000 + Sports, Exercise, and Recreation + + + 130100 + Participating in Sports, Exercise, or Recreation + + + 130101 + Doing aerobics + + + 130102 + Playing baseball + + + 130103 + Playing basketball + + + 130104 + Biking + + + 130105 + Playing billiards + + + 130106 + Boating + + + 130107 + Bowling + + + 130108 + Climbing, spelunking, caving + + + 130109 + Dancing + + + 130110 + Participating in equestrian sports + + + 130111 + Fencing + + + 130112 + Fishing + + + 130113 + Playing football + + + 130114 + Golfing + + + 130115 + Doing gymnastics + + + 130116 + Hiking + + + 130117 + Playing hockey + + + 130118 + Hunting + + + 130119 + Participating in martial arts + + + 130120 + Playing racquet sports + + + 130121 + Participating in rodeo competitions + + + 130122 + Rollerblading + + + 130123 + Playing rugby + + + 130124 + Running + + + 130125 + Skiing, ice skating, snowboarding + + + 130126 + Playing soccer + + + 130127 + Playing softball + + + 130128 + Using cardiovascular equipment + + + 130129 + Vehicle touring/racing + + + 130130 + Playing volleyball + + + 130131 + Walking + + + 130132 + Participating in water sports + + + 130133 + Weightlifting/strength training + + + 130134 + Working out, unspecified + + + 130135 + Wrestling + + + 130136 + Doing yoga + + + 130199 + Playing sports n.e.c. + + + 130200 + Attending Sports or Recreational Events + + + 130201 + Watching aerobics + + + 130202 + Watching baseball + + + 130203 + Watching basketball + + + 130204 + Watching biking + + + 130205 + Watching billiards + + + 130206 + Watching boating + + + 130207 + Watching bowling + + + 130208 + Watching climbing, spelunking, caving + + + 130209 + Watching dancing + + + 130210 + Watching equestrian sports + + + 130211 + Watching fencing + + + 130212 + Watching fishing + + + 130213 + Watching football + + + 130214 + Watching golfing + + + 130215 + Watching gymnastics + + + 130216 + Watching hockey + + + 130217 + Watching martial arts + + + 130218 + Watching racquet sports + + + 130219 + Watching rodeo competitions + + + 130220 + Watching rollerblading + + + 130221 + Watching rugby + + + 130222 + Watching running + + + 130223 + Watching skiing, ice skating, snowboarding + + + 130224 + Watching soccer + + + 130225 + Watching softball + + + 130226 + Watching vehicle touring/racing + + + 130227 + Watching volleyball + + + 130228 + Watching walking + + + 130229 + Watching water sports + + + 130230 + Watching weightlifting/strength training + + + 130231 + Watching people working out, unspecified + + + 130232 + Watching wrestling + + + 130299 + Attending sporting events, n.e.c. + + + 130300 + Waiting Associated with Sports, Exercise, and Recreation + + + 130301 + Waiting related to playing sports or exercising + + + 130302 + Waiting related to attending sporting events + + + 130399 + Wtg assoc with sports, exercise, and rec, n.e.c. + + + 130400 + Security Procedures Related to Sports, Exercise, and Recreation + + + 130401 + Security related to playing sports or exercising + + + 130402 + Security related to attending sporting events + + + 130499 + Sec related to sports, exercise, and rec, n.e.c. + + + 139900 + Sports, Exercise, and Recreation, n.e.c. + + + 139999 + Sports, exercise, and recreation, n.e.c. + + + 140000 + Religious and Spiritual Activities + + + 140100 + Religious or Spiritual Practices + + + 140101 + Attending religious services + + + 140102 + Participation in religious practices + + + 140103 + Waiting assoc w/religious and spiritual activities + + + 140104 + Sec procedures rel. to relig and spiritual activities + + + 140105 + Religious education activities (2007+) + + + 149900 + Religious and Spiritual Activities, n.e.c. + + + 149999 + Religious and spiritual activities, n.e.c. + + + 150000 + Volunteer Activities + + + 150100 + Administrative and Support Activities + + + 150101 + Computer use + + + 150102 + Organizing and preparing + + + 150103 + Reading + + + 150104 + Telephone calls (except hotline counseling) + + + 150105 + Writing + + + 150106 + Fundraising + + + 150199 + Administrative and support activities, n.e.c. + + + 150200 + Social Service and Care Activities (except medical) + + + 150201 + Food preparation, presentation, clean-up + + + 150202 + Collecting and delivering clothing and other goods + + + 150203 + Providing care + + + 150204 + Teaching, leading, counseling, mentoring + + + 150299 + Social service and care activities, n.e.c. + + + 150300 + Indoor and Outdoor Maintenance, Building, and Clean-Up Activities + + + 150301 + Building houses, wildlife sites, and other structures + + + 150302 + Indoor and outdoor maintenance, repair, and clean-up + + + 150399 + Indoor and outdoor maint, bldg and clean-up, n.e.c. + + + 150400 + Participating in Performance and Cultural Activities + + + 150401 + Performing + + + 150402 + Serving at volunteer events and cultural activities + + + 150499 + Participating performance, cultural act., n.e.c. + + + 150500 + Attending Meetings, Conferences, and Training + + + 150501 + Attending meetings, conferences, and training + + + 150599 + Attending mtgs conferences, and training, n.e.c. + + + 150600 + Public Health and Safety Activities + + + 150601 + Public health activities + + + 150602 + Public safety activities + + + 150699 + Public health and safety activities, n.e.c. + + + 150700 + Waiting Associated with Volunteer Activities + + + 150701 + Waiting associated with volunteer activities + + + 150799 + Waiting assoc with volunteer activities, n.e.c. + + + 150800 + Security Procedures Related to Volunteer Activities + + + 150801 + Security procedures related to volunteer activities (2007+) + + + 150899 + Security proecdures related to voluteer activities, n.e.c. (2007+) + + + 159900 + Volunteer Activities, n.e.c. + + + 159999 + Volunteer activities, n.e.c. + + + 160000 + Telephone Calls + + + 160100 + Telephone Calls (to or from) + + + 160101 + Telephone calls to/from family members + + + 160102 + Phone calls to/from friends, neighbors + + + 160103 + Telephone calls to/from education svcs providers + + + 160104 + Telephone calls to/from salespeople + + + 160105 + Phone calls to/from prof, personal svcs providers + + + 160106 + Phone calls to/from household services providers + + + 160107 + Phone calls to/from child or adult care providers + + + 160108 + Telephone calls to/from government officials + + + 160199 + Telephone calls (to or from), n.e.c. + + + 160200 + Waiting Associated with Telephone Calls + + + 160201 + Waiting associated with telephone calls + + + 160299 + Waiting associated with telephone calls, n.e.c. + + + 169900 + Telephone Calls, n.e.c. + + + 169999 + Telephone calls, n.e.c. + + + 180000 + Traveling + + + 180100 + Travel Related to Personal Care + + + 180101 + Travel related to personal care + + + 180199 + Travel related to personal care, n.e.c. + + + 180200 + Travel Related to Household Activities + + + 180201 + Travel related to housework + + + 180202 + Travel related to food and drink prep + + + 180203 + Travel related to int. maint, repair, and decoration + + + 180204 + Travel related to ext. maint, repair, and decoration + + + 180205 + Travel related to lawn, garden, and houseplants + + + 180206 + Travel related to care for animals (not vet care) + + + 180207 + Travel related to vehicle care and maint (by self) + + + 180208 + Trvl rel to app, tool, toy set-up, repair, and maint + + + 180209 + Travel related to household management + + + 180299 + Travel related to household activities, n.e.c. + + + 180300 + Travel Related to Caring for and Helping Household Members + + + 180301 + Travel related to caring for and helping HH children + + + 180302 + Travel related to caring for and helping household children (2005+) + + + 180303 + Travel related to hh children's education + + + 180304 + Travel related to hh children's health + + + 180305 + Travel related to caring for hh adults + + + 180306 + Travel related to helping hh adults + + + 180307 + Travel related to caring for and helping HH adults + + + 180399 + Trvl rel. to caring for, helping HH members, n.e.c. + + + 180400 + Travel Related to Caring for and Helping Non-Household Members + + + 180401 + Trvl rel to caring for and helping nonHH kids, inclusive + + + 180402 + Trvl rel to caring for and helping nonHH kids + + + 180403 + Travel related to nonhh children's education + + + 180404 + Travel related to nonhh children's health + + + 180405 + Travel related to caring for nonhh adults + + + 180406 + Travel related to helping nonhh adults + + + 180407 + Travel related to caring for, helping NonHH adults + + + 180499 + Trvl rel. to caring for, helping NonHH, n.e.c. + + + 180500 + Travel Related to Work + + + 180501 + Travel related to working + + + 180502 + Travel related to work-related activities + + + 180503 + Travel related to income-generating activities + + + 180504 + Travel related to job search and interviewing + + + 180599 + Travel related to work, n.e.c. + + + 180600 + Travel Related to Education + + + 180601 + Travel related to taking class + + + 180602 + Trvl rel to extracurricular activities (ex. Sports) + + + 180603 + Travel related to research/homework + + + 180604 + Travel related to registration/admin activities + + + 180605 + Education-related travel, not commuting + + + 180699 + Education travel, n.e.c. + + + 180700 + Travel Related to Consumer Purchases + + + 180701 + Traveling to/from the grocery store + + + 180702 + Travel related to other shopping + + + 180703 + Travel related to purchasing food (not groceries) + + + 180704 + Travel related to shopping, ex groc, food, gas + + + 180705 + Traveling to/from gas station + + + 180799 + Travel related to consumer purchases, n.e.c. + + + 180800 + Travel Related to Using Professional and Personal Care Services + + + 180801 + Travel related to using childcare services + + + 180802 + Travel related to using financial svcs and banking + + + 180803 + Travel related to using legal services + + + 180804 + Travel related to using medical services + + + 180805 + Travel related to using personal care services + + + 180806 + Travel related to using real estate services + + + 180807 + Travel related to using veterinary services + + + 180899 + Travel rel. to using prof, personal care svcs n.e.c. + + + 180900 + Travel Related to Using Household Services + + + 180901 + Travel related to using household services + + + 180902 + Trvl rel to using home maint etc svcs + + + 180903 + Travel related to using pet services (not vet) + + + 180904 + Travel related to using lawn and garden services + + + 180905 + Trvl rel to using vehicle maint and repair services + + + 180999 + Travel related to using household services, n.e.c. + + + 181000 + Travel Related to Using Government Services and Civic Obligations + + + 181001 + Travel related to using government services + + + 181002 + Travel related to civic obligations and participation + + + 181099 + Travel rel. to govt svcs and civic obligations, n.e.c. + + + 181100 + Travel Related to Eating and Drinking + + + 181101 + Travel related to eating and drinking + + + 181199 + Travel related to eating and drinking, n.e.c. + + + 181200 + Travel Related to Socializing, Relaxing, and Leisure + + + 181201 + Travel related to socializing and communicating + + + 181202 + Trvl related to attending or hosting social events + + + 181203 + Travel related to relaxing and leisure (2003, 2004) + + + 181204 + Travel related to arts and entertainment + + + 181205 + Travel as a form of entertainment + + + 181206 + Travel related to relaxing and leisure (2005+) + + + 181299 + Travel rel. to socializing, relaxing, leisure, n.e.c. + + + 181300 + Travel Related to Sports, Exercise, and Recreation + + + 181301 + Trvl rel to doing sports/exercise/recreation + + + 181302 + Trvl rel to attending sporting/recreational events + + + 181399 + Travel rel to sports, exercise, recreation, n.e.c. + + + 181400 + Travel Related to Religious or Spiritual Activities + + + 181401 + Travel related to religious/spiritual practices + + + 181499 + Travel rel. to religious/spiritual activities, n.e.c. + + + 181500 + Travel Related to Volunteering + + + 181501 + Travel related to volunteering + + + 181599 + Travel related to volunteer activities, n.e.c. + + + 181600 + Travel Related to Phone Calls + + + 181601 + Travel related to phone calls + + + 181699 + Travel rel. to phone calls, n.e.c. + + + 181800 + Security Procedures Related to Traveling + + + 181801 + Security procedures related to traveling + + + 181899 + Security procedures related to traveling, n.e.c. + + + 189900 + Traveling, n.e.c. + + + 189999 + Traveling, n.e.c. + + + 500000 + Data Codes + + + 500100 + Unable to Code + + + 500101 + Insufficient detail in verbatim + + + 500102 + Recorded activity using incorrect words + + + 500103 + Missing travel or destination + + + 500104 + Recorded simultaneous activities incorrectly + + + 500105 + Respondent refused to provide information + + + 500106 + Gap/can't remember + + + 500107 + Unable to code activity at 1st tier + + + 509900 + Data codes, n.e.c. + + + 509999 + Data codes, n.e.c. + + Technical Activity Variables -- ACTIVITY + + + + + Activity start time + + + Technical Activity Variables -- ACTIVITY + + + + + Activity stop time + + + Technical Activity Variables -- ACTIVITY + + + + + BLS: Personal care + + + Time Use Variables -- PERSON + + + + diff --git a/tests/fixtures/example_extract_from_api_v2.json b/tests/fixtures/example_extract_from_api_v2.json index eb5aadf..b48d0bd 100644 --- a/tests/fixtures/example_extract_from_api_v2.json +++ b/tests/fixtures/example_extract_from_api_v2.json @@ -12,7 +12,7 @@ "SEX": {}, "RACE": {} }, - "dataStructure": "rectangular", + "dataStructure": {"rectangular": {"on": "P"}}, "dataFormat": "fixed_width" } ] diff --git a/tests/fixtures/example_extract_v2.json b/tests/fixtures/example_extract_v2.json index 059d74b..ebecb04 100644 --- a/tests/fixtures/example_extract_v2.json +++ b/tests/fixtures/example_extract_v2.json @@ -12,7 +12,7 @@ "SEX", "RACE" ], - "dataStructure": "rectangular", + "dataStructure": {"rectangular": {"on": "P"}}, "dataFormat": "fixed_width" } ] diff --git a/tests/fixtures/example_extract_v2.yml b/tests/fixtures/example_extract_v2.yml index 150465f..9e91150 100644 --- a/tests/fixtures/example_extract_v2.yml +++ b/tests/fixtures/example_extract_v2.yml @@ -8,5 +8,5 @@ extracts: - AGE - SEX - RACE - dataStructure: rectangular + dataStructure: {rectangular: {"on": "P"}} dataFormat: fixed_width diff --git a/tests/fixtures/example_extract_v2_complex.json b/tests/fixtures/example_extract_v2_complex.json new file mode 100644 index 0000000..4dcbfb0 --- /dev/null +++ b/tests/fixtures/example_extract_v2_complex.json @@ -0,0 +1,19 @@ +{ + "extracts": [ + { + "description": "Simple IPUMS extract", + "collection": "usa", + "version": 2, + "samples": [ + "us2012b" + ], + "variables": { + "AGE": {"attachedCharacteristics": ["mother"]}, + "SEX": {}, + "RACE": {} + }, + "dataStructure": {"rectangular": {"on": "P"}}, + "dataFormat": "fixed_width" + } + ] +} \ No newline at end of file diff --git a/tests/fixtures/example_extract_v2_complex.yml b/tests/fixtures/example_extract_v2_complex.yml new file mode 100644 index 0000000..458dd46 --- /dev/null +++ b/tests/fixtures/example_extract_v2_complex.yml @@ -0,0 +1,12 @@ +extracts: + - description: Simple IPUMS extract + collection: usa + version: 2 + samples: + - us2012b + variables: + AGE: {attachedCharacteristics: [mother]} + SEX: {} + RACE: {} + dataStructure: {rectangular: {"on": "P"}} + dataFormat: fixed_width diff --git a/tests/fixtures/example_fancy_extract_from_api_v2.json b/tests/fixtures/example_fancy_extract_from_api_v2.json index af5e02a..0e0b2d1 100644 --- a/tests/fixtures/example_fancy_extract_from_api_v2.json +++ b/tests/fixtures/example_fancy_extract_from_api_v2.json @@ -18,7 +18,7 @@ "father2", "spouse"]} }, - "dataStructure": "rectangular", + "dataStructure": {"rectangular": {"on": "P"}}, "dataFormat": "fixed_width" } ] diff --git a/tests/fixtures/example_tuv_extract_v2.json b/tests/fixtures/example_tuv_extract_v2.json new file mode 100644 index 0000000..2d1ac55 --- /dev/null +++ b/tests/fixtures/example_tuv_extract_v2.json @@ -0,0 +1,12 @@ +{ + "version": 2, + "dataStructure": {"hierarchical": {}}, + "dataFormat": "fixed_width", + "caseSelectWho": "individuals", + "description": "atus test (ipumspy)", + "samples": {"at2016": {}}, + "variables": {"RECTYPE": {}, "YEAR": {"preselected": true}, "CASEID": {"preselected": true}, "SERIAL": {"preselected": true}, "STATEFIP": {}, "PERNUM": {"preselected": true}, "LINENO": {"preselected": true}, "WT06": {"preselected": true}, "AGE": {}, "SEX": {}}, + "timeUseVariables": {"BLS_PCARE": {}}, + "sampleMembers": {"includeNonRespondents": true, "includeHouseholdMembers": false}, + "collection": "atus" +} \ No newline at end of file diff --git a/tests/fixtures/meps_00019.dat.gz b/tests/fixtures/meps_00019.dat.gz new file mode 100644 index 0000000..6c10345 Binary files /dev/null and b/tests/fixtures/meps_00019.dat.gz differ diff --git a/tests/fixtures/meps_00019.xml b/tests/fixtures/meps_00019.xml new file mode 100644 index 0000000..4c97657 --- /dev/null +++ b/tests/fixtures/meps_00019.xml @@ -0,0 +1,777 @@ + + + + + + + Codebook for an for an IPUMS Health Surveys: Medical Expenditure Panel Survey Data Extract + DDI 2.5 metadata describing the extract file 'meps_00019.dat' + ddi2-27363a39-8e14-11e5-8c97-b82a72e0b782-meps_00019.dat-www.meps.ipums.org + + + IPUMS + + + IPUMS + June 24, 2024 + IPUMS, 50 Willey Hall, 225 - 19th Avenue South, Minneapolis, MN 55455 + + + IPUMS + + + + + + + User Extract meps_00019.dat + + + IPUMS + + + IPUMS + June 24, 2024 + IPUMS, 50 Willey Hall, 225 - 19th Avenue South, Minneapolis, MN 55455 + + + IPUMS + + + IPUMS MEPS + DOI:10.18128/D071.V2.3 + + + + + + + + Technical Variables -- PERSON + Core Demographic Variables -- PERSON + Technical Variables -- ROUND + Conditions Variables -- ROUND + + + 2016 + United States + + + + + + + IPUMS Health Surveys: Medical Expenditure Panel Survey + + + The user of the data acknowledges that the original collector of the data, the authorized distributor of the data, and the relevant funding agency bear no responsibility for use of the data or for interpretations or inferences based upon such uses. + + + + + + + meps_00019.dat + Microdata records + + ISO-8859-1 data file + fixed length fields + IPUMS, 50 Willey Hall, 225 - 19th Avenue South, Minneapolis, MN 55455 + + + + + Survey year + + + Technical Variables -- PERSON + + + + + Person number within family/household (from reformatting) + + + Technical Variables -- PERSON + + + + + Dwelling unit ID + + + Technical Variables -- PERSON + + + + + Person number + + + Technical Variables -- PERSON + + + + + MEPS unique identifier (IPUMS generated) + + + Technical Variables -- PERSON + + + + + Panel + + + 00 + + + + 01 + + + + 02 + + + + 03 + + + + 04 + + + + 05 + + + + 06 + + + + 07 + + + + 08 + + + + 09 + + + + 10 + + + + 11 + + + + 12 + + + + 13 + + + + 14 + + + + 15 + + + + 16 + + + + 17 + + + + 18 + + + + 19 + + + + 20 + + + + 21 + + + + 22 + + + + 23 + + + + 24 + + + + 25 + + + + 26 + + + Technical Variables -- PERSON + + + + + Annual primary sampling unit (PSU) for variance estimation + + + Technical Variables -- PERSON + + + + + Annual stratum for variance estimation + + + Technical Variables -- PERSON + + + + + Pooled primary sampling unit (PSU) for variance estimation + + + Technical Variables -- PERSON + + + + + Pooled variance stratum + + + Technical Variables -- PERSON + + + + + Year entered MEPS + + + 1996 + 1996 + + + 1997 + 1997 + + + 1998 + 1998 + + + 1999 + 1999 + + + 2000 + 2000 + + + 2001 + 2001 + + + 2002 + 2002 + + + 2003 + 2003 + + + 2004 + 2004 + + + 2005 + 2005 + + + 2006 + 2006 + + + 2007 + 2007 + + + 2008 + 2008 + + + 2009 + 2009 + + + 2010 + 2010 + + + 2011 + 2011 + + + 2012 + 2012 + + + 2013 + 2013 + + + 2014 + 2014 + + + 2015 + 2015 + + + 2016 + 2016 + + + 2017 + 2017 + + + 2018 + 2018 + + + 2019 + 2019 + + + 2020 + 2020 + + + 2021 + 2021 + + Technical Variables -- PERSON + + + + + Relative year 1 or 2 in panel + + + 1 + Relative year 1 + + + 2 + Relative year 2 + + + 3 + Relative year 3 + + + 4 + Relative year 4 + + Technical Variables -- PERSON + + + + + Final basic annual weight + + + Technical Variables -- PERSON + + + + + Self-Administered Questionnaire weight + + + Technical Variables -- PERSON + + + + + Diabetes care weight + + + Technical Variables -- PERSON + + + + + Age + + + Core Demographic Variables -- PERSON + + + + + Sex + + + 1 + Male + + + 2 + Female + + + 7 + Unknown-refused + + + 8 + Unknown-not ascertained + + + 9 + Unknown-don't know + + Core Demographic Variables -- PERSON + + + + + Dwelling unit ID, round record + + + Technical Variables -- ROUND + + + + + Person number, round record + + + Technical Variables -- ROUND + + + + + Panel, round record + + + 01 + 1 + + + 02 + 2 + + + 03 + 3 + + + 04 + 4 + + + 05 + 5 + + + 06 + 6 + + + 07 + 7 + + + 08 + 8 + + + 09 + 9 + + + 10 + 10 + + + 11 + 11 + + + 12 + 12 + + + 13 + 13 + + + 14 + 14 + + + 15 + 15 + + + 16 + 16 + + + 17 + 17 + + + 18 + 18 + + + 19 + 19 + + + 20 + 20 + + + 21 + 21 + + + 22 + 22 + + + 23 + 23 + + + 24 + 24 + + + 25 + 25 + + + 26 + 26 + + Technical Variables -- ROUND + + + + + MEPS unique identifier (IPUMS generated) + + + Technical Variables -- ROUND + + + + + Survey round number, round record + + + 1 + Round 1 + + + 2 + Round 2 + + + 3 + Round 3 + + + 4 + Round 4 + + + 5 + Round 5 + + + 6 + Round 6 + + + 7 + Round 7 + + + 8 + Round 8 + + + 9 + Round 9 + + Technical Variables -- ROUND + + + + + Pregnant during the round + + + 0 + NIU + + + 1 + No + + + 2 + Yes + + + 7 + Unknown-refused + + + 8 + Unknown-not ascertained + + + 9 + Unknown-don't know + + Conditions Variables -- ROUND + + + + diff --git a/tests/fixtures/meps_00020.dat.gz b/tests/fixtures/meps_00020.dat.gz new file mode 100644 index 0000000..a0e4dbd Binary files /dev/null and b/tests/fixtures/meps_00020.dat.gz differ diff --git a/tests/fixtures/meps_00020.xml b/tests/fixtures/meps_00020.xml new file mode 100644 index 0000000..be29b51 --- /dev/null +++ b/tests/fixtures/meps_00020.xml @@ -0,0 +1,1518 @@ + + + + + + + Codebook for an for an IPUMS Health Surveys: Medical Expenditure Panel Survey Data Extract + DDI 2.5 metadata describing the extract file 'meps_00020.dat' + ddi2-27363a39-8e14-11e5-8c97-b82a72e0b782-meps_00020.dat-www.meps.ipums.org + + + IPUMS + + + IPUMS + June 24, 2024 + IPUMS, 50 Willey Hall, 225 - 19th Avenue South, Minneapolis, MN 55455 + + + IPUMS + + + + + + + User Extract meps_00020.dat + + + IPUMS + + + IPUMS + June 24, 2024 + IPUMS, 50 Willey Hall, 225 - 19th Avenue South, Minneapolis, MN 55455 + + + IPUMS + + + IPUMS MEPS + DOI:10.18128/D071.V2.3 + + + + + + + + Technical Variables -- PERSON + Core Demographic Variables -- PERSON + Prescribed Medicine Variables -- PRESCRIBED MEDICINE + Technical Variables -- ROUND + Conditions Variables -- ROUND + Prescribed Medicine Fills Variables -- RX MEDICINES + + + 2016 + United States + + + + + + + IPUMS Health Surveys: Medical Expenditure Panel Survey + + + The user of the data acknowledges that the original collector of the data, the authorized distributor of the data, and the relevant funding agency bear no responsibility for use of the data or for interpretations or inferences based upon such uses. + + + + + + + meps_00020.dat + Microdata records + + + Round Record + + + Event Record + + + Prescribed Medicine Record + + + Condition Record + + + Person Record + + + ISO-8859-1 data file + fixed length fields + IPUMS, 50 Willey Hall, 225 - 19th Avenue South, Minneapolis, MN 55455 + + + + + Record type + + + P + Person + + + R + Round + + + M + Prescribed medicine + + + F + Rx medicines + + Technical Variables -- PERSON + + + + + Survey year + + + Technical Variables -- PERSON + + + + + Sequential serial number, person record + + + Technical Variables -- PERSON + + + + + Person number within family/household (from reformatting) + + + Technical Variables -- PERSON + + + + + Dwelling unit ID + + + Technical Variables -- PERSON + + + + + Person number + + + Technical Variables -- PERSON + + + + + MEPS unique identifier (IPUMS generated) + + + Technical Variables -- PERSON + + + + + Panel + + + 00 + + + + 01 + + + + 02 + + + + 03 + + + + 04 + + + + 05 + + + + 06 + + + + 07 + + + + 08 + + + + 09 + + + + 10 + + + + 11 + + + + 12 + + + + 13 + + + + 14 + + + + 15 + + + + 16 + + + + 17 + + + + 18 + + + + 19 + + + + 20 + + + + 21 + + + + 22 + + + + 23 + + + + 24 + + + + 25 + + + + 26 + + + Technical Variables -- PERSON + + + + + Annual primary sampling unit (PSU) for variance estimation + + + Technical Variables -- PERSON + + + + + Annual stratum for variance estimation + + + Technical Variables -- PERSON + + + + + Pooled primary sampling unit (PSU) for variance estimation + + + Technical Variables -- PERSON + + + + + Pooled variance stratum + + + Technical Variables -- PERSON + + + + + Year entered MEPS + + + 1996 + 1996 + + + 1997 + 1997 + + + 1998 + 1998 + + + 1999 + 1999 + + + 2000 + 2000 + + + 2001 + 2001 + + + 2002 + 2002 + + + 2003 + 2003 + + + 2004 + 2004 + + + 2005 + 2005 + + + 2006 + 2006 + + + 2007 + 2007 + + + 2008 + 2008 + + + 2009 + 2009 + + + 2010 + 2010 + + + 2011 + 2011 + + + 2012 + 2012 + + + 2013 + 2013 + + + 2014 + 2014 + + + 2015 + 2015 + + + 2016 + 2016 + + + 2017 + 2017 + + + 2018 + 2018 + + + 2019 + 2019 + + + 2020 + 2020 + + + 2021 + 2021 + + Technical Variables -- PERSON + + + + + Relative year 1 or 2 in panel + + + 1 + Relative year 1 + + + 2 + Relative year 2 + + + 3 + Relative year 3 + + + 4 + Relative year 4 + + Technical Variables -- PERSON + + + + + Final basic annual weight + + + Technical Variables -- PERSON + + + + + Self-Administered Questionnaire weight + + + Technical Variables -- PERSON + + + + + Diabetes care weight + + + Technical Variables -- PERSON + + + + + Age + + + Core Demographic Variables -- PERSON + + + + + Sex + + + 1 + Male + + + 2 + Female + + + 7 + Unknown-refused + + + 8 + Unknown-not ascertained + + + 9 + Unknown-don't know + + Core Demographic Variables -- PERSON + + + + + Survey year + + + Prescribed Medicine Variables -- PRESCRIBED MEDICINE + + + + + Sequential household serial number, medication-round record + + + Prescribed Medicine Variables -- PRESCRIBED MEDICINE + + + + + Dwelling unit ID, medication-round record + + + Prescribed Medicine Variables -- PRESCRIBED MEDICINE + + + + + Person number, medication-round record + + + Prescribed Medicine Variables -- PRESCRIBED MEDICINE + + + + + Panel, medication-round record + + + 01 + 1 + + + 02 + 2 + + + 03 + 3 + + + 04 + 4 + + + 05 + 5 + + + 06 + 6 + + + 07 + 7 + + + 08 + 8 + + + 09 + 9 + + + 10 + 10 + + + 11 + 11 + + + 12 + 12 + + + 13 + 13 + + + 14 + 14 + + + 15 + 15 + + + 16 + 16 + + + 17 + 17 + + + 18 + 18 + + + 19 + 19 + + + 20 + 20 + + + 21 + 21 + + + 22 + 22 + + + 23 + 23 + + + 24 + 24 + + + 25 + 25 + + + 26 + 26 + + Prescribed Medicine Variables -- PRESCRIBED MEDICINE + + + + + MEPS unique identifier (AHRQ generated), M record + + + Prescribed Medicine Variables -- PRESCRIBED MEDICINE + + + + + MEPS unique identifier (IPUMS generated), M record + + + Prescribed Medicine Variables -- PRESCRIBED MEDICINE + + + + + Medication-round record identifier (AHRQ generated) + + + Prescribed Medicine Variables -- PRESCRIBED MEDICINE + + + + + Medication-round record identifier (IPUMS generated) + + + Prescribed Medicine Variables -- PRESCRIBED MEDICINE + + + + + Number of fill records + + + Prescribed Medicine Variables -- PRESCRIBED MEDICINE + + + + + Survey year + + + 1996 + 1996 + + + 1997 + 1997 + + + 1998 + 1998 + + + 1999 + 1999 + + + 2000 + 2000 + + + 2001 + 2001 + + + 2002 + 2002 + + + 2003 + 2003 + + + 2004 + 2004 + + + 2005 + 2005 + + + 2006 + 2006 + + + 2007 + 2007 + + + 2008 + 2008 + + + 2009 + 2009 + + + 2010 + 2010 + + + 2011 + 2011 + + + 2012 + 2012 + + + 2013 + 2013 + + + 2014 + 2014 + + + 2015 + 2015 + + + 2016 + 2016 + + + 2017 + 2017 + + + 2018 + 2018 + + + 2019 + 2019 + + + 2020 + 2020 + + + 2021 + 2021 + + Technical Variables -- ROUND + + + + + Sequential Serial Number, Household Record + + + Technical Variables -- ROUND + + + + + Dwelling unit ID, round record + + + Technical Variables -- ROUND + + + + + Person number, round record + + + Technical Variables -- ROUND + + + + + Panel, round record + + + 01 + 1 + + + 02 + 2 + + + 03 + 3 + + + 04 + 4 + + + 05 + 5 + + + 06 + 6 + + + 07 + 7 + + + 08 + 8 + + + 09 + 9 + + + 10 + 10 + + + 11 + 11 + + + 12 + 12 + + + 13 + 13 + + + 14 + 14 + + + 15 + 15 + + + 16 + 16 + + + 17 + 17 + + + 18 + 18 + + + 19 + 19 + + + 20 + 20 + + + 21 + 21 + + + 22 + 22 + + + 23 + 23 + + + 24 + 24 + + + 25 + 25 + + + 26 + 26 + + Technical Variables -- ROUND + + + + + MEPS unique identifier (IPUMS generated) + + + Technical Variables -- ROUND + + + + + Survey round number, round record + + + 1 + Round 1 + + + 2 + Round 2 + + + 3 + Round 3 + + + 4 + Round 4 + + + 5 + Round 5 + + + 6 + Round 6 + + + 7 + Round 7 + + + 8 + Round 8 + + + 9 + Round 9 + + Technical Variables -- ROUND + + + + + Pregnant during the round + + + 0 + NIU + + + 1 + No + + + 2 + Yes + + + 7 + Unknown-refused + + + 8 + Unknown-not ascertained + + + 9 + Unknown-don't know + + Conditions Variables -- ROUND + + + + + Survey year + + + 1996 + 1996 + + + 1997 + 1997 + + + 1998 + 1998 + + + 1999 + 1999 + + + 2000 + 2000 + + + 2001 + 2001 + + + 2002 + 2002 + + + 2003 + 2003 + + + 2004 + 2004 + + + 2005 + 2005 + + + 2006 + 2006 + + + 2007 + 2007 + + + 2008 + 2008 + + + 2009 + 2009 + + + 2010 + 2010 + + + 2011 + 2011 + + + 2012 + 2012 + + + 2013 + 2013 + + + 2014 + 2014 + + + 2015 + 2015 + + + 2016 + 2016 + + + 2017 + 2017 + + + 2018 + 2018 + + + 2019 + 2019 + + + 2020 + 2020 + + + 2021 + 2021 + + Prescribed Medicine Fills Variables -- RX MEDICINES + + + + + Sequential household serial number, F record + + Prescribed Medicine Fills Variables -- RX MEDICINES + + + + + Dwelling unit ID, medication-round fill record + + + Prescribed Medicine Fills Variables -- RX MEDICINES + + + + + Person number, medication-round fill record + + + Prescribed Medicine Fills Variables -- RX MEDICINES + + + + + Panel, medication-round fill record + + + 01 + 1 + + + 02 + 2 + + + 03 + 3 + + + 04 + 4 + + + 05 + 5 + + + 06 + 6 + + + 07 + 7 + + + 08 + 8 + + + 09 + 9 + + + 10 + 10 + + + 11 + 11 + + + 12 + 12 + + + 13 + 13 + + + 14 + 14 + + + 15 + 15 + + + 16 + 16 + + + 17 + 17 + + + 18 + 18 + + + 19 + 19 + + + 20 + 20 + + + 21 + 21 + + + 22 + 22 + + + 23 + 23 + + + 24 + 24 + + + 25 + 25 + + + 26 + 26 + + Prescribed Medicine Fills Variables -- RX MEDICINES + + + + + MEPS unique identifier (AHRQ generated), F record + + + Prescribed Medicine Fills Variables -- RX MEDICINES + + + + + MEPS unique identifier (IPUMS generated), F record + + + Prescribed Medicine Fills Variables -- RX MEDICINES + + + + + Medication identifier (AHRQ generated) + + + Prescribed Medicine Fills Variables -- RX MEDICINES + + + + + Medication identifier (IPUMS generated) + + + Prescribed Medicine Fills Variables -- RX MEDICINES + + + + + Medication-round fill unique identifier (AHRQ generated) + + + Prescribed Medicine Fills Variables -- RX MEDICINES + + + + + Medication-round fill unique identifier (IPUMS generated) + + + Prescribed Medicine Fills Variables -- RX MEDICINES + + + + + Medication-round record identifier (AHRQ generated) + + + Prescribed Medicine Fills Variables -- RX MEDICINES + + + + + Medication-round record identifier (IPUMS generated) + + + Prescribed Medicine Fills Variables -- RX MEDICINES + + + + + Multum medicine name, imputed + + + Prescribed Medicine Fills Variables -- RX MEDICINES + + + + diff --git a/tests/fixtures/usa_00196_extract_obj.pkl b/tests/fixtures/usa_00196_extract_obj.pkl index 122cb33..6d3ee8e 100644 Binary files a/tests/fixtures/usa_00196_extract_obj.pkl and b/tests/fixtures/usa_00196_extract_obj.pkl differ diff --git a/tests/test_api.py b/tests/test_api.py index d924dd1..300a11e 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -15,16 +15,14 @@ from ipumspy import api, readers from ipumspy.api import ( IpumsApiClient, - OtherExtract, - UsaExtract, - CpsExtract, - IpumsiExtract, + MicrodataExtract, extract_from_dict, extract_to_dict, define_extract_from_json, save_extract_as_json, Variable, Sample, + TimeUseVariable, ) from ipumspy.api.exceptions import ( BadIpumsApiRequest, @@ -47,9 +45,9 @@ def mock_api() -> str: p = subprocess.Popen( ["uvicorn", "tests.mock_api:app", "--host", "127.0.0.1", "--port", "8989"] ) - time.sleep(1) # Give it enough time to warm up + time.sleep(3) # Give it enough time to warm up try: - yield "http://127.0.0.1:8989/extracts" + yield "http://127.0.0.1:8989" finally: p.kill() @@ -71,7 +69,8 @@ def test_usa_build_extract(): """ Confirm that test extract formatted correctly """ - extract = UsaExtract( + extract = MicrodataExtract( + "usa", ["us2012b"], ["AGE", "SEX"], ) @@ -104,7 +103,8 @@ def test_usa_attach_characteristics(): """ Confirm that attach_characteristics updates extract definition correctly """ - extract = UsaExtract( + extract = MicrodataExtract( + "usa", ["us2012b"], ["AGE", "SEX"], ) @@ -142,7 +142,8 @@ def test_usa_add_data_quality_flags(): """ Confirm that attach_characteristics updates extract definition correctly """ - extract = UsaExtract( + extract = MicrodataExtract( + "usa", ["us2012b"], ["AGE", "SEX", "RACE"], ) @@ -177,7 +178,8 @@ def test_usa_add_data_quality_flags(): } # add a list of flags - extract = UsaExtract( + extract = MicrodataExtract( + "usa", ["us2012b"], ["AGE", "SEX", "RACE"], ) @@ -217,7 +219,8 @@ def test_usa_select_cases(): """ Confirm that attach_characteristics updates extract definition correctly """ - extract = UsaExtract( + extract = MicrodataExtract( + "usa", ["us2012b"], ["AGE", "RACE"], ) @@ -277,7 +280,8 @@ def test_select_cases_feature_errors(live_api_client: IpumsApiClient): Confirm that illegal select cases feature requests raise appropriate errors """ # select an invalid value with the correct level of detail - extract = UsaExtract( + extract = MicrodataExtract( + "usa", ["us2012b"], ["AGE", "SEX", "RACE"], ) @@ -290,7 +294,8 @@ def test_select_cases_feature_errors(live_api_client: IpumsApiClient): == "Invalid general case selection of 200 for variable AGE" ) # ask for detailed codes when none are available - extract = UsaExtract( + extract = MicrodataExtract( + "usa", ["us2012b"], ["AGE", "SEX", "RACE"], ) @@ -302,7 +307,8 @@ def test_select_cases_feature_errors(live_api_client: IpumsApiClient): == "Detailed case selection made but detailed variable not found for SEX." ) # Specify general codes when requesting detailed codes - extract = UsaExtract( + extract = MicrodataExtract( + "usa", ["us2012b"], ["AGE", "SEX", "RACE"], ) @@ -321,7 +327,8 @@ def test_attach_characteristics_feature_errors(live_api_client: IpumsApiClient): Confirm that illegal attach characteristics feature requests raise appropriate errors """ # ask for nonexistent pointer from ipumsi - extract = IpumsiExtract( + extract = MicrodataExtract( + "ipumsi", ["am2011a"], ["AGE", "SEX"], ) @@ -339,7 +346,8 @@ def test_cps_build_extract(): """ Confirm that test extract formatted correctly """ - extract = CpsExtract( + extract = MicrodataExtract( + "cps", ["cps2012_03b"], ["AGE", "SEX"], ) @@ -372,12 +380,13 @@ def test_ipumsi_build_extract(): """ Confirm that test extract formatted correctly """ - extract = IpumsiExtract( + extract = MicrodataExtract( + "ipumsi", ["am2011a"], ["AGE", "SEX"], ) assert extract.build() == { - "description": "My IPUMS International extract", + "description": "My IPUMS IPUMSI extract", "dataFormat": "fixed_width", "dataStructure": {"rectangular": {"on": "P"}}, "samples": {"am2011a": {}}, @@ -400,28 +409,163 @@ def test_ipumsi_build_extract(): } +def test_atus_build_extract(): + """ + Confirm that test extract formatted correctly + """ + extract = MicrodataExtract( + "atus", ["at2016"], ["AGE", "SEX"], time_use_variables=["BLS_PCARE"] + ) + assert extract.build() == { + "description": "My IPUMS ATUS extract", + "dataFormat": "fixed_width", + "dataStructure": {"rectangular": {"on": "P"}}, + "samples": {"at2016": {}}, + "variables": { + "AGE": { + "preselected": False, + "caseSelections": {}, + "attachedCharacteristics": [], + "dataQualityFlags": False, + }, + "SEX": { + "preselected": False, + "caseSelections": {}, + "attachedCharacteristics": [], + "dataQualityFlags": False, + }, + }, + "timeUseVariables": {"BLS_PCARE": {}}, + "collection": "atus", + "version": None, + } + + extract = MicrodataExtract( + "atus", + ["at2016"], + ["AGE", "SEX"], + time_use_variables=["BLS_PCARE"], + sample_members={"include_non_respondents": True}, + ) + assert extract.build() == { + "description": "My IPUMS ATUS extract", + "dataFormat": "fixed_width", + "dataStructure": {"rectangular": {"on": "P"}}, + "samples": {"at2016": {}}, + "variables": { + "AGE": { + "preselected": False, + "caseSelections": {}, + "attachedCharacteristics": [], + "dataQualityFlags": False, + }, + "SEX": { + "preselected": False, + "caseSelections": {}, + "attachedCharacteristics": [], + "dataQualityFlags": False, + }, + }, + "timeUseVariables": {"BLS_PCARE": {}}, + "sampleMembers": {"includeNonRespondents": True}, + "collection": "atus", + "version": None, + } + + extract = MicrodataExtract( + "atus", + ["at2016"], + ["AGE", "SEX"], + time_use_variables=[ + TimeUseVariable(name="BLS_PCARE"), + TimeUseVariable(name="USER_TUV", owner="newuser@gmail.com"), + ], + sample_members={"include_non_respondents": True}, + ) + + assert extract.build() == { + "description": "My IPUMS ATUS extract", + "dataFormat": "fixed_width", + "dataStructure": {"rectangular": {"on": "P"}}, + "samples": {"at2016": {}}, + "variables": { + "AGE": { + "preselected": False, + "caseSelections": {}, + "attachedCharacteristics": [], + "dataQualityFlags": False, + }, + "SEX": { + "preselected": False, + "caseSelections": {}, + "attachedCharacteristics": [], + "dataQualityFlags": False, + }, + }, + "timeUseVariables": { + "BLS_PCARE": {}, + "USER_TUV": {"owner": "newuser@gmail.com"}, + }, + "sampleMembers": {"includeNonRespondents": True}, + "collection": "atus", + "version": None, + } + + with pytest.raises(TypeError) as exc_info: + extract = MicrodataExtract( + "atus", + ["at2016"], + ["AGE", "SEX"], + time_use_variables=[ + "BLS_PCARE", + TimeUseVariable(name="user_TUV", owner="newuser@gmail.com"), + ], + ) + assert ( + exc_info.value.args[0] + == "The items in ['BLS_PCARE', TimeUseVariable(name='user_tuv', owner='newuser@gmail.com')] must all be string type or type." + ) + + with pytest.raises(ValueError) as exc_info: + extract = MicrodataExtract( + "cps", ["cps2016_03b"], ["AGE", "SEX"], time_use_variables=["BLS_PCARE"] + ) + + assert ( + exc_info.value.args[0] + == "Time use variables are unavailable for the IPUMS CPS data collection" + ) + + +@pytest.mark.vcr +def test_rect_on_nonP_extract(live_api_client: IpumsApiClient): + bad_hs_ext = MicrodataExtract( + collection="nhis", + samples=["ih2016"], + variables=["AGE", "SEX", "IRCAUSE"], + data_structure={"rectangular": {"on": "Y"}}, + ) + with pytest.raises(BadIpumsApiRequest) as exc_info: + live_api_client.submit_extract(bad_hs_ext) + assert exc_info.value.args[0] == "Focal Record Type is not valid" + + def test_cps_hierarchical_build_extract(): """ Confirm that test extract formatted correctly when hierarchical structure specified """ - extract = CpsExtract( - ["cps2012_03b"], ["AGE", "SEX"], data_structure={"hierarchical": {}} + extract = MicrodataExtract( + "usa", ["cps2012_03b"], ["AGE", "SEX"], data_structure={"hierarchical": {}} ) assert extract.data_structure == {"hierarchical": {}} -def test_other_build_extract(): - details = {"some": [1, 2, 3], "other": ["a", "b", "c"]} - extract = OtherExtract("foo", details) - assert extract.build() == details - assert extract.collection == "foo" - - def test_submit_extract_and_wait_for_extract(api_client: IpumsApiClient): """ Confirm that test extract submits properly """ - extract = UsaExtract( + extract = MicrodataExtract( + "usa", ["us2012b"], ["AGE", "SEX"], ) @@ -445,13 +589,13 @@ def test_bad_api_request_exception(live_api_client: IpumsApiClient): BadIpumsApiRequest exception """ # bad variable - bad_variable = UsaExtract(["us2012b"], ["AG"]) + bad_variable = MicrodataExtract("usa", ["us2012b"], ["AG"]) with pytest.raises(BadIpumsApiRequest) as exc_info: live_api_client.submit_extract(bad_variable) assert exc_info.value.args[0] == "Invalid variable name: AG" # unavailable variable - unavailable_variable = UsaExtract(["us2012b"], ["YRIMMIG"]) + unavailable_variable = MicrodataExtract("usa", ["us2012b"], ["YRIMMIG"]) with pytest.raises(BadIpumsApiRequest) as exc_info: live_api_client.submit_extract(unavailable_variable) assert exc_info.value.args[0] == ( @@ -460,14 +604,14 @@ def test_bad_api_request_exception(live_api_client: IpumsApiClient): ) # bad sample - bad_sample = UsaExtract(["us2012x"], ["AGE"]) + bad_sample = MicrodataExtract("usa", ["us2012x"], ["AGE"]) with pytest.raises(BadIpumsApiRequest) as exc_info: live_api_client.submit_extract(bad_sample) assert exc_info.value.args[0] == "Invalid sample name: us2012x" # specify "on" w/ hierarchical structure - bad_structure = UsaExtract( - ["us2012b"], ["AGE"], data_structure={"hierarchical": {"on": "P"}} + bad_structure = MicrodataExtract( + "usa", ["us2012b"], ["AGE"], data_structure={"hierarchical": {"on": "P"}} ) with pytest.raises(BadIpumsApiRequest) as exc_info: live_api_client.submit_extract(bad_structure) @@ -477,8 +621,8 @@ def test_bad_api_request_exception(live_api_client: IpumsApiClient): ) # specify illegal rectype to rectangularize on - bad_rectype = UsaExtract( - ["us2012b"], ["AGE"], data_structure={"rectangular": {"on": "Z"}} + bad_rectype = MicrodataExtract( + "usa", ["us2012b"], ["AGE"], data_structure={"rectangular": {"on": "Z"}} ) with pytest.raises(BadIpumsApiRequest) as exc_info: live_api_client.submit_extract(bad_rectype) @@ -525,7 +669,8 @@ def test_not_found_exception(live_api_client: IpumsApiClient): @pytest.mark.vcr def test_not_submitted_exception(): - extract = UsaExtract( + extract = MicrodataExtract( + "usa", ["us2012b"], ["AGE", "SEX"], ) @@ -581,6 +726,40 @@ def test_extract_from_dict(fixtures_path: Path): assert item.data_format == "fixed_width" assert item.api_version == 2 + with open(fixtures_path / "example_extract_v2_complex.yml") as infile: + extract = extract_from_dict(yaml.safe_load(infile)) + + for item in extract: + assert item.collection == "usa" + assert item.samples == [Sample(id="us2012b")] + assert item.variables == [ + Variable( + name="AGE", + preselected=False, + case_selections={}, + attached_characteristics=["mother"], + data_quality_flags=False, + ), + Variable( + name="SEX", + preselected=False, + case_selections={}, + attached_characteristics=[], + data_quality_flags=False, + ), + Variable( + name="RACE", + preselected=False, + case_selections={}, + attached_characteristics=[], + data_quality_flags=False, + ), + ] + # data structure not currently an extract attribute... + # assert item.data_structure == "rectangular" + assert item.data_format == "fixed_width" + assert item.api_version == 2 + # if an unsupported api version is specified # make sure NotImplementedError is raised with pytest.raises(NotImplementedError) as exc_info: @@ -619,7 +798,8 @@ def test_submit_extract_live(live_api_client: IpumsApiClient): """ Confirm that test extract submits properly """ - extract = UsaExtract( + extract = MicrodataExtract( + "usa", ["us2012b"], ["AGE", "SEX"], ) @@ -633,8 +813,8 @@ def test_submit_hierarchical_extract_live(live_api_client: IpumsApiClient): """ Confirm that test extract submits properly """ - extract = UsaExtract( - ["us2012b"], ["AGE", "SEX"], data_structure={"hierarchical": {}} + extract = MicrodataExtract( + "usa", ["us2012b"], ["AGE", "SEX"], data_structure={"hierarchical": {}} ) live_api_client.submit_extract(extract) @@ -741,6 +921,37 @@ def test_define_extract_from_json(fixtures_path: Path): ] assert item.api_version == 2 + extract = define_extract_from_json( + fixtures_path / "example_extract_v2_complex.json" + ) + for item in extract: + assert item.collection == "usa" + assert item.samples == [Sample(id="us2012b")] + assert item.variables == [ + Variable( + name="AGE", + preselected=False, + case_selections={}, + attached_characteristics=["mother"], + data_quality_flags=False, + ), + Variable( + name="SEX", + preselected=False, + case_selections={}, + attached_characteristics=[], + data_quality_flags=False, + ), + Variable( + name="RACE", + preselected=False, + case_selections={}, + attached_characteristics=[], + data_quality_flags=False, + ), + ] + assert item.api_version == 2 + # if an unsupported api version is specified, make sure # NotImplementedError is raised with pytest.raises(NotImplementedError) as exc_info: @@ -801,6 +1012,25 @@ def test_extract_from_api_response_json(fixtures_path: Path): assert item.api_version == 2 +def test_tuv_extract_from_api_response_json(fixtures_path: Path): + """ + Ensure extract object can be created from a dict that contains + variable-level and time use variable features as nested dicts + """ + extract = define_extract_from_json(fixtures_path / "example_tuv_extract_v2.json") + + assert extract.collection == "atus" + assert extract.time_use_variables == [TimeUseVariable(name="BLS_PCARE")] + assert extract.kwargs["sampleMembers"] == { + "includeHouseholdMembers": False, + "includeNonRespondents": True, + } + assert extract.build()["sampleMembers"] == { + "includeHouseholdMembers": False, + "includeNonRespondents": True, + } + + def test_save_extract_as_json(fixtures_path: Path): # remove the test saved extract if it exists if Path(fixtures_path / "test_saved_extract.json").exists(): @@ -825,8 +1055,16 @@ def test_variable_update(): assert exc_info.value.args[0] == "Variable has no attribute 'fake_attribute'." +def test_tuv_update(): + tuv = TimeUseVariable("USER_TUV") + tuv.update("owner", "newuser@gmail.com") + assert tuv.owner == "newuser@gmail.com" + + def test_validate_list_args(): - str_extract = IpumsiExtract(["ar2011a"], ["age", "age", "sex", "sex", "race"]) + str_extract = MicrodataExtract( + "ipumsi", ["ar2011a"], ["age", "age", "sex", "sex", "race"] + ) assert str_extract.variables == ( [ @@ -855,7 +1093,8 @@ def test_validate_list_args(): ) with pytest.raises(ValueError) as exc_info: - vars_extract = IpumsiExtract( + vars_extract = MicrodataExtract( + "ipumsi", ["ar2011a"], [ Variable("age", attached_characteristics=["father"]), @@ -870,11 +1109,14 @@ def test_validate_list_args(): == "Duplicate Variable objects are not allowed in IPUMS Extract definitions." ) - str_extract = CpsExtract(["cps2012_03s", "cps2012_03s", "cps2013_03s"], ["AGE"]) + str_extract = MicrodataExtract( + "cps", ["cps2012_03s", "cps2012_03s", "cps2013_03s"], ["AGE"] + ) assert str_extract.samples == ([Sample(id="cps2012_03s"), Sample(id="cps2013_03s")]) with pytest.raises(ValueError) as exc_info: - samples_extract = CpsExtract( + samples_extract = MicrodataExtract( + "cps", [ Sample(id="cps2012_03s"), Sample(id="cps2012_03s"), @@ -887,6 +1129,38 @@ def test_validate_list_args(): == "Duplicate Sample objects are not allowed in IPUMS Extract definitions." ) + # make sure duplicate objects raise an error + with pytest.raises(ValueError) as exc_info: + obj_extract = MicrodataExtract( + "cps", + [ + Sample(id="cps2012_03s"), + Sample(id="cps2013_03s"), + ], + [ + Variable(name="AGE"), + Variable(name="AGE", attached_characteristics=["mother"]), + ], + ) + assert ( + exc_info.value.args[0] + == "Duplicate Variable objects are not allowed in IPUMS Extract definitions." + ) + + with pytest.raises(TypeError) as exc_info: + mixed_extract = MicrodataExtract( + "cps", + [ + Sample(id="cps2012_03s"), + Sample(id="cps2013_03s"), + ], + [Variable(name="AGE"), "SEX"], + ) + assert ( + exc_info.value.args[0] + == "The items in [Variable(name='AGE', preselected=False, case_selections={}, attached_characteristics=[], data_quality_flags=False), 'SEX'] must all be string type or type." + ) + @pytest.mark.vcr def test_get_extract_by_id(live_api_client: IpumsApiClient): @@ -894,7 +1168,7 @@ def test_get_extract_by_id(live_api_client: IpumsApiClient): Make sure extract can be retrieved with specific ID """ cps_ext = live_api_client.get_extract_by_id(433, "cps") - assert isinstance(cps_ext, CpsExtract) + assert isinstance(cps_ext, MicrodataExtract) assert cps_ext.build() == { "description": "my extract", "dataFormat": "fixed_width", @@ -973,7 +1247,7 @@ def test_get_extract_by_id(live_api_client: IpumsApiClient): } ipumsi_ext = live_api_client.get_extract_by_id(6, "ipumsi") - assert isinstance(ipumsi_ext, IpumsiExtract) + assert isinstance(ipumsi_ext, MicrodataExtract) assert ipumsi_ext.build() == { "description": "My IPUMS International extract", "dataFormat": "fixed_width", @@ -1054,30 +1328,21 @@ def test_get_all_sample_info(live_api_client: IpumsApiClient): usa_samples = live_api_client.get_all_sample_info("usa") assert usa_samples == { "us1850a": "1850 1%", - "us1850b": "1850 100% sample (July 2015)", - "us1850c": "1850 100% sample (Revised December 2017)", + "us1850c": "1850 100% sample (Revised November 2023)", "us1860a": "1860 1%", "us1860b": "1860 1% sample with black oversample", - "us1860c": "1860 100% sample (Jan 2019)", + "us1860c": "1860 100% sample (Revised November 2023)", "us1870a": "1870 1%", "us1870b": "1870 1% sample with black oversample", - "us1870c": "1870 100% sample (Jan 2019)", + "us1870c": "1870 100% sample (Revised November 2023)", "us1880a": "1880 1%", - "us1880b": "1880 5% sample (preliminary release)", - "us1880c": "1880 100% database (limited variables)", "us1880d": "1880 10%", - "us1880e": "1880 100% database (January 2010 expanded version)", - "us1900f": "1900 1%", - "us1900g": "1900 1% sample with oversamples", - "us1900h": "1900 2.5% sample (preliminary release)", - "us1900i": "1900 5% sample (pre-May 2011 version)", + "us1880e": "1880 100% database (Revised November 2023)", "us1900k": "1900 1%", "us1900j": "1900 5%", "us1900l": "1900 1% sample with oversamples", "us1900m": "1900 100% database", "us1910h": "1910 Puerto Rico", - "us1910i": "1910 1%", - "us1910j": "1910 1.4% sample with oversamples", "us1910k": "1910 1%", "us1910l": "1910 1.4% sample with oversamples", "us1910m": "1910 100% database", @@ -1091,6 +1356,7 @@ def test_get_all_sample_info(live_api_client: IpumsApiClient): "us1940a": "1940 1%", "us1940b": "1940 100% database", "us1950a": "1950 1%", + "us1950b": "1950 100% database", "us1960a": "1960 1%", "us1960b": "1960 5%", "us1970a": "1970 Form 1 State", @@ -1203,6 +1469,10 @@ def test_get_all_sample_info(live_api_client: IpumsApiClient): "us2021b": "2021 PRCS", "us2021c": "2017-2021, ACS 5-year", "us2021d": "2017-2021, PRCS 5-year", + "us2022a": "2022 ACS", + "us2022b": "2022 PRCS", + "us2022c": "2018-2022, ACS 5-year", + "us2022d": "2018-2022, PRCS 5-year", } @@ -1211,5 +1481,7 @@ def test_get_pages(live_api_client: IpumsApiClient): """ Test API pages generator. """ - page1 = next(live_api_client._get_pages(collection="usa", page_size=5)) + page1 = next( + live_api_client._get_pages(collection="usa", endpoint="extracts", page_size=5) + ) assert len(page1["data"]) == 5 diff --git a/tests/test_cli.py b/tests/test_cli.py index 0861e67..db97734 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -25,7 +25,7 @@ def mock_api() -> str: ) time.sleep(1) # Give it enough time to warm up try: - yield "http://127.0.0.1:9898/extracts" + yield "http://127.0.0.1:9898" finally: p.kill() diff --git a/tests/test_ddi.py b/tests/test_ddi.py index c11196e..e0312f4 100644 --- a/tests/test_ddi.py +++ b/tests/test_ddi.py @@ -279,14 +279,14 @@ def test_ddi_codebook_hierarchical(cps_ddi_hierarchical: ddi.Codebook): def test_get_all_types(cps_ddi: ddi.Codebook, cps_df: pd.DataFrame): var_types = { - "YEAR": "numeric", - "SERIAL": "numeric", - "HWTSUPP": "numeric", - "STATEFIP": "numeric", - "MONTH": "numeric", - "PERNUM": "numeric", - "WTSUPP": "numeric", - "INCTOT": "numeric", + "YEAR": "integer", + "SERIAL": "integer", + "HWTSUPP": "integer", + "STATEFIP": "integer", + "MONTH": "integer", + "PERNUM": "integer", + "WTSUPP": "integer", + "INCTOT": "integer", } assert cps_ddi.get_all_types(type_format="vartype") == var_types diff --git a/tests/test_noextract.py b/tests/test_noextract.py index f1d625e..97428a9 100644 --- a/tests/test_noextract.py +++ b/tests/test_noextract.py @@ -17,7 +17,7 @@ def test_read_noextract_codebook(): assert codebook.data_description[0].rectype == "P" assert codebook.data_description[0].codes == {} assert codebook.data_description[0].start == 0 - assert codebook.data_description[0].end == 2 + assert codebook.data_description[0].end == 1 assert codebook.data_description[0].label == "Record type" assert len(codebook.samples_description) == 0 diff --git a/tests/test_readers.py b/tests/test_readers.py index bcf4dcb..289ade3 100644 --- a/tests/test_readers.py +++ b/tests/test_readers.py @@ -14,7 +14,7 @@ import pytest from ipumspy import readers -from ipumspy.api.extract import BaseExtract, UsaExtract +from ipumspy.api.extract import MicrodataExtract def _assert_cps_000006(data: pd.DataFrame): @@ -138,6 +138,350 @@ def _assert_cps_00421_dict(data: Dict): ).all() +def _assert_meps_000019(data: pd.DataFrame): + """Run all the checks for the data frame returned by our readers for rectangular on R rectangular files""" + assert len(data) == 103965 + assert len(data.columns) == 23 + assert (data["YEAR"].iloc[:5] == 2016).all() + assert ( + data["SAQWEIGHT"].iloc[:5] + == np.array( + [14398.747070, 14398.747070, 14398.747070, 13439.433593, 13439.433593] + ) + ).all() + assert ( + data.dtypes.values + == np.array( + [ + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + "string[python]", + "string[python]", + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + float, + float, + float, + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + "string[python]", + pd.Int64Dtype(), + "string[python]", + pd.Int64Dtype(), + pd.Int64Dtype(), + ] + ) + ).all() + + +def _assert_meps_00020_dict(data: pd.DataFrame): + """Run all the checks for the data frame returned by our readers for hierarchical MEPS files""" + # P df + assert len(data) == 34655 + assert len(data.columns) == 19 + assert (data["YEAR"].iloc[:5] == 2016).all() + assert ( + data["SAQWEIGHT"].iloc[:5] + == np.array([14398.747070, 13439.433593, 0.000000, 0.000000, 5559.980468]) + ).all() + assert ( + data.dtypes.values + == np.array( + [ + "string[python]", + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + "string[python]", + "string[python]", + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + float, + float, + float, + pd.Int64Dtype(), + pd.Int64Dtype(), + ] + ) + ).all() + + # M df + assert len(data) == 137548 + assert len(data.columns) == 13 + assert (data["YEARM"].iloc[:5] == 2016).all() + assert (data["NREFILLS"].iloc[:5] == np.array([1, 1, 2, 1, 1])).all() + assert ( + data.dtypes.values + == np.array( + [ + "string[python]", + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + "string[python]", + "string[python]", + "string[python]", + "string[python]", + pd.Int64Dtype(), + ] + ) + ).all() + + # F df + assert len(data) == 319685 + assert len(data.columns) == 17 + assert (data["YEARF"].iloc[:5] == 2016).all() + assert ( + data["RXDRGNAM"].iloc[:5] + == np.array( + [ + "METRONIDAZOLE", + "PROMETHAZINE", + "RIFAXIMIN", + "RIFAXIMIN", + "HYDROCHLOROTHIAZIDE-LOSARTAN", + ] + ) + ).all() + assert ( + data.dtypes.values + == np.array( + [ + "string[python]", + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + "string[python]", + "string[python]", + "string[python]", + "string[python]", + "string[python]", + "string[python]", + "string[python]", + "string[python]", + "string[python]", + ] + ) + ).all() + + +def _assert_meps_00020_df(data: pd.DataFrame): + """Run all the checks for the data frame returned by our readers for hierarchical files""" + assert len(data) == 595853 + assert len(data.columns) == 51 + assert (data["SERIAL"].iloc[:5] == 1).all() + # again, gotta be a better way to do this + assert (data["SAQWEIGHT"].iloc[:1] == np.array([14398.747070])).all() + assert data["SAQWEIGHT"].iloc[1:5].isna().all() + assert (data["RECTYPE"].iloc[:6] == np.array(["P", "R", "R", "R", "M", "F"])).all() + assert (data["PREGNTRD"].iloc[:5] == np.array([pd.NA, 1, 1, 1, pd.NA])).all() + assert ( + data["RXDRGNAM"].iloc[:5] == np.array(["", "", "", "", "", "METRONIDAZOLE"]) + ).all() + assert ( + data["MEPSIDM"].iloc[:5] == np.array(["", "", "", "", "2110001101", ""]) + ).all() + assert ( + data.dtypes.values + == np.array( + [ + "string[python]", + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + "string[python]", + "string[python]", + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + float, + float, + float, + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + "string[python]", + pd.Int64Dtype(), + "string[python]", + "string[python]", + "string[python]", + "string[python]", + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + "string[python]", + pd.Int64Dtype(), + "string[python]", + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + "string[python]", + pd.Int64Dtype(), + "string[python]", + "string[python]", + "string[python]", + "string[python]", + "string[python]", + "string[python]", + "string[python]", + "string[python]", + "string[python]", + ] + ) + ).all() + + +def _assert_atus_00035_dict(data: Dict): + """Run all the checks for the data frame returned by our readers for hierarchical files + when a dictionary of data frames is requested""" + h_data = data["1"] + p_data = data["2"] + a_data = data["3"] + + assert len(data.keys()) == 3 + + assert len(h_data) == 24336 + assert len(h_data.columns) == 10 + assert (h_data["YEAR"].iloc[:5] == 2016).all() + assert (h_data["STATEFIP"].iloc[:5] == np.array([13, 51, 11, 26, 29])).all() + assert (h_data["RECTYPE"].iloc[:5] == np.array(["1", "1", "1", "1", "1"])).all() + assert ( + h_data.dtypes.values + == np.array( + [ + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + ] + ) + ).all() + + assert len(p_data) == 24336 + assert len(p_data.columns) == 10 + assert (p_data["YEAR"].iloc[:5] == 2016).all() + assert ( + p_data["WT06"].iloc[:5] + == np.array( + [ + 24588650.161504, + 5445941.065425, + 8782621.982064, + 3035909.94892, + 6978586.369092, + ] + ) + ).all() + assert (p_data["RECTYPE"].iloc[:5] == np.array(["2", "2", "2", "2", "2"])).all() + assert ( + p_data.dtypes.values + == np.array( + [ + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Float64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + ] + ) + ).all() + + assert len(a_data) == 207213 + assert len(a_data.columns) == 8 + assert (a_data["YEAR"].iloc[:5] == 2016).all() + assert ( + a_data["ACTIVITY"].iloc[:5] == np.array([10101, 20201, 110101, 20203, 20101]) + ).all() + assert (a_data["RECTYPE"].iloc[:5] == np.array(["3", "3", "3", "3", "3"])).all() + assert ( + a_data.dtypes.values + == np.array( + [ + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + str, + str, + ] + ) + ).all() + + +def _assert_atus_00035_df(data: pd.DataFrame): + """Run all the checks for the data frame returned by our readers for hierarchical files""" + assert len(data) == 255885 + assert len(data.columns) == 15 + assert (data["YEAR"].iloc[:5] == 2016).all() + # again, gotta be a better way to do this + assert (data["WT06"].iloc[:2] == np.array([np.nan, 24588650.161504])).all() + assert data["WT06"].iloc[2:5].isna().all() + assert (data["RECTYPE"].iloc[:5] == np.array(["1", "2", "3", "3", "3"])).all() + assert ( + data["STATEFIP"].iloc[:5] == np.array([13, pd.NA, pd.NA, pd.NA, pd.NA]) + ).all() + assert (data["ACTLINE"].iloc[:5] == np.array([pd.NA, pd.NA, 1, 2, 3])).all() + assert ( + data["START"].iloc[:5] == np.array(["", "", "04:00:00", "11:00:00", "11:20:00"]) + ).all() + assert ( + data.dtypes.values + == np.array( + [ + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Float64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + pd.Int64Dtype(), + str, + str, + pd.Int64Dtype(), + ] + ) + ).all() + + def _assert_cps_rectantular_subset(data: pd.DataFrame): """Tests subset functionality on rectangular extracts""" assert len(data.columns) == 2 @@ -165,7 +509,7 @@ def _assert_cps_hierarchical_subset_dict(data: Dict): assert (p_data["AGE"].iloc[:5] == np.array([36, 41, 5, 7, 50])).all() -def test_can_read_herarchical_df_dat_gz(fixtures_path: Path): +def test_can_read_hierarchical_df_dat_gz(fixtures_path: Path): """ Confirm that we can read hierarchical microdata ino a single data frame in .dat format when it is gzipped @@ -175,8 +519,18 @@ def test_can_read_herarchical_df_dat_gz(fixtures_path: Path): _assert_cps_00421_df + ddi = readers.read_ipums_ddi(fixtures_path / "atus_00035.xml") + data = readers.read_hierarchical_microdata(ddi, fixtures_path / "atus_00035.dat.gz") + + _assert_atus_00035_df + + ddi = readers.read_ipums_ddi(fixtures_path / "meps_00020.xml") + data = readers.read_hierarchical_microdata(ddi, fixtures_path / "meps_00020.dat.gz") -def test_can_read_herarchical_dict_dat_gz(fixtures_path: Path): + _assert_meps_00020_df + + +def test_can_read_hierarchical_dict_dat_gz(fixtures_path: Path): """ Confirm that we can read hierarchical microdata ino a dictionary of data frames in .dat format when it is gzipped @@ -188,6 +542,20 @@ def test_can_read_herarchical_dict_dat_gz(fixtures_path: Path): _assert_cps_00421_dict + ddi = readers.read_ipums_ddi(fixtures_path / "atus_00035.xml") + data = readers.read_hierarchical_microdata( + ddi, fixtures_path / "atus_00035.dat.gz", as_dict=True + ) + + _assert_atus_00035_dict + + ddi = readers.read_ipums_ddi(fixtures_path / "meps_00020.xml") + data = readers.read_hierarchical_microdata( + ddi, fixtures_path / "meps_00020.dat.gz", as_dict=True + ) + + _assert_meps_00020_dict + def test_can_read_rectangular_dat_gz(fixtures_path: Path): """ @@ -200,6 +568,19 @@ def test_can_read_rectangular_dat_gz(fixtures_path: Path): _assert_cps_000006(data) +def test_can_read_rectangular_R_dat_gz(fixtures_path: Path): + """ + Confirm that we can read rectangular on R MEPS microdata in .dat format + when it is gzipped + """ + ddi = readers.read_ipums_ddi(fixtures_path / "meps_00019.xml") + data = readers.read_microdata(ddi, fixtures_path / "meps_00019.dat.gz") + + print(data.dtypes.values) + + _assert_meps_000019(data) + + def test_can_read_rectangular_csv_gz(fixtures_path: Path): """ Confirm that we can read rectangular microdata in .csv format @@ -267,6 +648,85 @@ def test_can_read_rectangular_dat_gz_chunked(fixtures_path: Path): assert total_length == 7668 +def test_read_microdata_doubles_numpy(fixtures_path): + """ + Make sure that fw extracts with float data can be read + """ + # Checking default behaviour + numpy_types = { + "YEAR": np.float64, + "CASEID": np.float64, + "SERIAL": np.float64, + "STATEFIP": np.float64, + "PERNUM": np.float64, + "LINENO": np.float64, + "WT06": np.float64, + "AGE": np.float64, + "SEX": np.float64, + "ACTIVITY": np.float64, + "START": object, + "STOP": object, + "BLS_PCARE": np.float64, + } + + ddi = readers.read_ipums_ddi(fixtures_path / "atus_00034.xml") + dtype = ddi.get_all_types(type_format="numpy_type") + data = readers.read_microdata(ddi, fixtures_path / "atus_00034.dat.gz", dtype=dtype) + assert data.dtypes.to_dict() == numpy_types + + +def test_read_microdata_doubles_pandas(fixtures_path): + """ + Make sure that fw extracts with float data can be read + """ + pandas_types = { + "YEAR": pd.Int64Dtype(), + "CASEID": pd.Int64Dtype(), + "SERIAL": pd.Int64Dtype(), + "STATEFIP": pd.Int64Dtype(), + "PERNUM": pd.Int64Dtype(), + "LINENO": pd.Int64Dtype(), + "WT06": pd.Float64Dtype(), + "AGE": pd.Int64Dtype(), + "SEX": pd.Int64Dtype(), + "ACTIVITY": pd.Int64Dtype(), + "START": pd.StringDtype(), + "STOP": pd.StringDtype(), + "BLS_PCARE": pd.Int64Dtype(), + } + + ddi = readers.read_ipums_ddi(fixtures_path / "atus_00034.xml") + data = readers.read_microdata(ddi, fixtures_path / "atus_00034.dat.gz") + assert data.dtypes.to_dict() == pandas_types + + +def test_read_microdata_doubles_other(fixtures_path): + """ + Make sure that fw extracts with float data can be read + """ + + pandas_types_other = { + "YEAR": pd.Int64Dtype(), + "CASEID": pd.Int64Dtype(), + "SERIAL": pd.Int64Dtype(), + "STATEFIP": pd.Int64Dtype(), + "PERNUM": pd.Int64Dtype(), + "LINENO": pd.Int64Dtype(), + "WT06": pd.Float64Dtype(), + "AGE": pd.Int64Dtype(), + "SEX": pd.Int64Dtype(), + "ACTIVITY": pd.Int64Dtype(), + "START": pd.StringDtype(storage="pyarrow"), + "STOP": pd.StringDtype(storage="pyarrow"), + "BLS_PCARE": pd.Int64Dtype(), + } + + ddi = readers.read_ipums_ddi(fixtures_path / "atus_00034.xml") + dtype = ddi.get_all_types(type_format="pandas_type", string_pyarrow=True) + data = readers.read_microdata(ddi, fixtures_path / "atus_00034.dat.gz", dtype=dtype) + assert data.dtypes.to_dict() == pandas_types_other + + def test_read_microdata_custom_dtype(fixtures_path): """ Make sure use can choose custom dtype in microdata reader. @@ -288,7 +748,9 @@ def test_read_microdata_custom_dtype(fixtures_path): } ddi = readers.read_ipums_ddi(fixtures_path / "cps_00361.xml") - data = readers.read_microdata(ddi, fixtures_path / "cps_00361.dat.gz") + data = readers.read_microdata( + ddi, fixtures_path / "cps_00361.dat.gz", dtype=pandas_types + ) assert data.dtypes.to_dict() == pandas_types # custom dtype @@ -309,7 +771,9 @@ def test_read_microdata_custom_dtype(fixtures_path): ddi = readers.read_ipums_ddi(fixtures_path / "cps_00361.xml") dtype = ddi.get_all_types(type_format="pandas_type_efficient", string_pyarrow=True) - data = readers.read_microdata(ddi, fixtures_path / "cps_00361.dat.gz", dtype=dtype) + data = readers.read_microdata( + ddi, fixtures_path / "cps_00361.dat.gz", dtype=pandas_types_efficient + ) assert data.dtypes.to_dict() == pandas_types_efficient with pytest.raises(ValueError): @@ -338,7 +802,9 @@ def test_read_microdata_chunked_custom_dtype(fixtures_path): } ddi = readers.read_ipums_ddi(fixtures_path / "cps_00361.xml") - data = readers.read_microdata_chunked(ddi, fixtures_path / "cps_00361.dat.gz") + data = readers.read_microdata_chunked( + ddi, fixtures_path / "cps_00361.dat.gz", dtype=pandas_types + ) assert next(data).dtypes.to_dict() == pandas_types # custom dtype @@ -403,32 +869,26 @@ def test_read_extract_description(fixtures_path: Path): "version": 2, "samples": ["us2012b"], "variables": ["AGE", "SEX", "RACE"], - "dataStructure": "rectangular", + "dataStructure": {"rectangular": {"on": "P"}}, "dataFormat": "fixed_width", } ], } extract_description = yaml_extract["extracts"][0] - extract = BaseExtract._collection_to_extract[extract_description["collection"]]( - **extract_description - ) + extract = MicrodataExtract(**extract_description) extract_description = from_api_extract["extracts"][0] - api_extract = BaseExtract._collection_to_extract[extract_description["collection"]]( - **extract_description - ) + api_extract = MicrodataExtract(**extract_description) - assert isinstance(extract, UsaExtract) - assert isinstance(api_extract, UsaExtract) + assert isinstance(extract, MicrodataExtract) + assert isinstance(api_extract, MicrodataExtract) assert extract.build() == api_extract.build() # check that this can read fancier things as well extract_description_fancy = from_api_extract_fancy["extracts"][0] - api_extract_fancy = BaseExtract._collection_to_extract[ - extract_description_fancy["collection"] - ](**extract_description_fancy) + api_extract_fancy = MicrodataExtract(**extract_description_fancy) # truncated test assert api_extract_fancy.build()["variables"]["AGE"] == {