From b43c3eaaee8874f6de4c759f53a0d7bf6fca0a57 Mon Sep 17 00:00:00 2001 From: Danglewood <85772166+deeleeramone@users.noreply.github.com> Date: Thu, 19 Oct 2023 14:11:03 -0700 Subject: [PATCH 01/23] feature/v4-biztoc-provider: Adds Biztoc provider and GlobalNews (#5546) * add biztoc provider * duplicate field * black * request headers * recapture test * move stuff around * add integration tests * duplicate OECD entry in dev_install * duplicate entry for oecd in pyproject.toml --- openbb_platform/dev_install.py | 1 + .../news/integration/test_news_api.py | 10 +- .../news/integration/test_news_python.py | 1 + openbb_platform/poetry.lock | 721 +++++--- openbb_platform/providers/biztoc/README.md | 12 + openbb_platform/providers/biztoc/__init__.py | 0 .../biztoc/openbb_biztoc/__init__.py | 22 + .../biztoc/openbb_biztoc/models/__init__.py | 0 .../openbb_biztoc/models/global_news.py | 107 ++ .../biztoc/openbb_biztoc/utils/__init__.py | 0 .../biztoc/openbb_biztoc/utils/helpers.py | 135 ++ openbb_platform/providers/biztoc/poetry.lock | 1501 +++++++++++++++++ .../providers/biztoc/pyproject.toml | 19 + .../providers/biztoc/tests/__init__.py | 0 .../test_biztoc_global_news_fetcher.yaml | 930 ++++++++++ .../biztoc/tests/test_biztoc_fetchers.py | 24 + openbb_platform/pyproject.toml | 5 +- 17 files changed, 3203 insertions(+), 285 deletions(-) create mode 100644 openbb_platform/providers/biztoc/README.md create mode 100644 openbb_platform/providers/biztoc/__init__.py create mode 100644 openbb_platform/providers/biztoc/openbb_biztoc/__init__.py create mode 100644 openbb_platform/providers/biztoc/openbb_biztoc/models/__init__.py create mode 100644 openbb_platform/providers/biztoc/openbb_biztoc/models/global_news.py create mode 100644 openbb_platform/providers/biztoc/openbb_biztoc/utils/__init__.py create mode 100644 openbb_platform/providers/biztoc/openbb_biztoc/utils/helpers.py create mode 100644 openbb_platform/providers/biztoc/poetry.lock create mode 100644 openbb_platform/providers/biztoc/pyproject.toml create mode 100644 openbb_platform/providers/biztoc/tests/__init__.py create mode 100644 openbb_platform/providers/biztoc/tests/record/http/test_biztoc_fetchers/test_biztoc_global_news_fetcher.yaml create mode 100644 openbb_platform/providers/biztoc/tests/test_biztoc_fetchers.py diff --git a/openbb_platform/dev_install.py b/openbb_platform/dev_install.py index 2ed5c70e300a..55f3927e4e26 100644 --- a/openbb_platform/dev_install.py +++ b/openbb_platform/dev_install.py @@ -34,6 +34,7 @@ # Community dependencies openbb-alpha-vantage = { path = "./providers/alpha_vantage", optional = true, develop = true } +openbb-biztoc = { path = "./providers/biztoc", optional = true, develop = true } openbb-cboe = { path = "./providers/cboe", optional = true, develop = true } openbb-quandl = { path = "./providers/quandl", optional = true, develop = true } openbb-yfinance = { path = "./providers/yfinance", optional = true, develop = true } diff --git a/openbb_platform/extensions/news/integration/test_news_api.py b/openbb_platform/extensions/news/integration/test_news_api.py index b1f4b004b948..2389e68f5096 100644 --- a/openbb_platform/extensions/news/integration/test_news_api.py +++ b/openbb_platform/extensions/news/integration/test_news_api.py @@ -1,18 +1,11 @@ -import base64 - import pytest import requests -from openbb_core.env import Env from openbb_provider.utils.helpers import get_querystring @pytest.fixture(scope="session") def headers(): - userpass = f"{Env().API_USERNAME}:{Env().API_PASSWORD}" - userpass_bytes = userpass.encode("ascii") - base64_bytes = base64.b64encode(userpass_bytes) - - return {"Authorization": f"Basic {base64_bytes.decode('ascii')}"} + return {} @pytest.mark.parametrize( @@ -51,6 +44,7 @@ def headers(): "limit": 20, } ), + ({"provider": "biztoc", "filter": "tag", "tag": "federalreserve"}), ], ) @pytest.mark.integration diff --git a/openbb_platform/extensions/news/integration/test_news_python.py b/openbb_platform/extensions/news/integration/test_news_python.py index 6c7d15232a1d..65de5ba1a931 100644 --- a/openbb_platform/extensions/news/integration/test_news_python.py +++ b/openbb_platform/extensions/news/integration/test_news_python.py @@ -50,6 +50,7 @@ def obb(pytestconfig): "limit": 20, } ), + ({"provider": "biztoc", "filter": "tag", "tag": "federalreserve"}), ], ) @pytest.mark.integration diff --git a/openbb_platform/poetry.lock b/openbb_platform/poetry.lock index 8a1402ebc16a..d9679f2739f0 100644 --- a/openbb_platform/poetry.lock +++ b/openbb_platform/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. [[package]] name = "aiohttp" @@ -122,6 +122,20 @@ files = [ [package.dependencies] frozenlist = ">=1.1.0" +[[package]] +name = "annotated-types" +version = "0.6.0" +description = "Reusable constraint types to use with typing.Annotated" +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" @@ -443,69 +457,69 @@ test = ["flake8", "isort", "pytest"] [[package]] name = "cython" -version = "3.0.3" +version = "3.0.4" description = "The Cython compiler for writing C extensions in the Python language." optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ - {file = "Cython-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:85073ab414ff432d2a39d36cb49c39ce69f30b53daccc7699bfad0ce3d1b539a"}, - {file = "Cython-3.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30c1d9bd2bcb9b1a195dd23b359771857df8ebd4a1038fb37dd155d3ea38c09c"}, - {file = "Cython-3.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9296f332523d5c550ebae694483874d255264cff3281372f25ea5f2739b96651"}, - {file = "Cython-3.0.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d52ed47edbf48392dd0f419135e7ff59673f6b32d27d3ffc9e61a515571c050d"}, - {file = "Cython-3.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6f63e959d13775472d37e731b2450d120e8db87e956e2de74475e8f17a89b1fb"}, - {file = "Cython-3.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22d268c3023f405e13aa0c1600389794694ab3671614f8e782d89a1055da0858"}, - {file = "Cython-3.0.3-cp310-cp310-win32.whl", hash = "sha256:51850f277660f67171135515e45edfc8815f723ff20768e39cb9785b2671062f"}, - {file = "Cython-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bff1fec968a6b2ca452ae9bff6d6d0bf8486427d4d791e85543240266b6915e0"}, - {file = "Cython-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:587d664ff6bd5b03611ddc6ef320b7f8677d824c45d15553f16a69191a643843"}, - {file = "Cython-3.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3192cd780435fca5ae5d79006b48cbf0ea674853b5a7b0055a122045bff9d84e"}, - {file = "Cython-3.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7578b59ffd0d9c95ae6f7ae852309918915998b7fe0ed2f8725a683de8da276"}, - {file = "Cython-3.0.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f05889eb1b5a95a7adf97303279c2d13819ff62292e10337e6c940dbf570b5d"}, - {file = "Cython-3.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1d3416c24a1b7bf3a2d9615a7f9f12b00fac0b94fb2e61449e0c1ecf20d6ed52"}, - {file = "Cython-3.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4cc0f7244da06fdc6a4a7240df788805436b6fb7f20edee777eb77777d9d2eb1"}, - {file = "Cython-3.0.3-cp311-cp311-win32.whl", hash = "sha256:845e24ee70c204062e03f813114751387abf454b29410336797582e04abbc07b"}, - {file = "Cython-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:e3ad109bdf40f55318e001cad12bcc00e8119569b49f72e442c082355617b036"}, - {file = "Cython-3.0.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:14b898ec2fdeea68f81bd3838b035800b173b59ed532674f65a82724bab35d3b"}, - {file = "Cython-3.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:188705eeae094bb716bc3e3d0da4e13469f0a0de803b65dfd63fe7eb78ec6173"}, - {file = "Cython-3.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eb128fa40305f18eaa4d8dd0980033b92db86aada927181d3c3d561aa0634db"}, - {file = "Cython-3.0.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80bd3167e689419cdaf7ede0d20a9f126b9698a43b1f8d3e8f54b970c7a6cd07"}, - {file = "Cython-3.0.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d0c7b315f6feb75e2c949dc7816da5626cdca097fea1c0d9f4fdb20d2f4ffc2a"}, - {file = "Cython-3.0.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:db9d4de4cd6cd3ad1c3f455aae877ad81a92b92b7cbb01dfb32b6306b873932b"}, - {file = "Cython-3.0.3-cp312-cp312-win32.whl", hash = "sha256:be1a679c7ad90813f9206c9d62993f3bd0cba9330668e97bb3f70c87ae94d5f5"}, - {file = "Cython-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:fa08259f4d176b86561eeff6954f9924099c0b0c128fc2cbfc18343c068ad8ca"}, - {file = "Cython-3.0.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:056340c49bf7861eb1eba941423e67620b7c85e264e9a5594163f1d1e8b95acc"}, - {file = "Cython-3.0.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cfbd60137f6fca9c29101d7517d4e341e0fd279ffc2489634e5e2dd592457c2"}, - {file = "Cython-3.0.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66b7e71c16cab0814945014ffb101ead2b173259098bbb1b8138e7a547da3709"}, - {file = "Cython-3.0.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42b1ff0e19fb4d1fe68b60f55d46942ed246a323f6bbeec302924b78b4c3b637"}, - {file = "Cython-3.0.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:5d6af87a787d5ce063e28e508fee34755a945e438c68ecda50eb4ea34c30e13f"}, - {file = "Cython-3.0.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:0147a31fb73a063bb7b6c69fd843c1a2bad18f326f58048d4ee5bdaef87c9fbf"}, - {file = "Cython-3.0.3-cp36-cp36m-win32.whl", hash = "sha256:84084fa05cf9a67a85818fa72a741d1cae2e3096551158730730a3bafc3b2f52"}, - {file = "Cython-3.0.3-cp36-cp36m-win_amd64.whl", hash = "sha256:8a6a9a2d98758768052e4ac1bea4ebc20fae69b4c19cb2bc5457c9174532d302"}, - {file = "Cython-3.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:94fa403de3a413cd41b8eb4ddb4adcbd66aa0a64f9a84d1c5f696c93572c83aa"}, - {file = "Cython-3.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e729fd633a5225570c5480b36e7c530c8a82e2ab6d2944ddbe1ddfff5bf181b1"}, - {file = "Cython-3.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59bf689409b0e51ef673e3dd0348727aef5b67e40f23f806be64c49cee321de0"}, - {file = "Cython-3.0.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f0ac9ec822fad010248b4a59ac197975de38c95378d0f13201c181dd9b0a2624"}, - {file = "Cython-3.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8e78fc42a6e846941d23aba1aca587520ad38c8970255242f08f9288b0eeba85"}, - {file = "Cython-3.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e40ac8bd6d11355d354bb4975bb88f6e923ba30f85e38f1f1234b642634e4fc4"}, - {file = "Cython-3.0.3-cp37-cp37m-win32.whl", hash = "sha256:77a920ae19fa1db5adb8a618cebb095ca4f56adfbf9fc32cb7008a590607b62b"}, - {file = "Cython-3.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:0630527a8c9e8fed815c38524e418dab713f5d66f6ac9dc2151b41f3a7727304"}, - {file = "Cython-3.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4e956383e57d00b1fa6449b5ec03b9fa5fce2afd41ef3e518bee8e7c89f1616c"}, - {file = "Cython-3.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ec9e15b821ef7e3c38abe9e4df4e6dda7af159325bc358afd5a3c2d5027ccfe"}, - {file = "Cython-3.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18f4fb7cc6ad8e99e8f387ebbcded171a701bfbfd8cd3fd46156bf44bb4fd968"}, - {file = "Cython-3.0.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b50f4f75f89e7eef2ed9c9b60746bc4ab1ba2bc0dff64587133db2b63e068f09"}, - {file = "Cython-3.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5545d20d7a1c0cf17559152f7f4a465c3d5caace82dd051f82e2d753ae9fd956"}, - {file = "Cython-3.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1571b045ec1cb15c152c3949f3bd53ee0fa66d434271ea3d225658d99b7e721a"}, - {file = "Cython-3.0.3-cp38-cp38-win32.whl", hash = "sha256:3db04801fd15d826174f63ff45878d4b1e62aff27cf1ea96b186581052d24446"}, - {file = "Cython-3.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:75d42c8423ab299396f3c938445730600e32e4a2f0298f6f9df4d4a698fe8e16"}, - {file = "Cython-3.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:48bae87b657009e5648c21d4a92de9f3dc6fed3e35e92957fa8a07a18cea2313"}, - {file = "Cython-3.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ccde14ddc4b424435cb5722aa1529c254bbf3611e1ad9baea12d25e9c049361"}, - {file = "Cython-3.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c8e5afcc19861c3b22faafbe906c7e1b23f0595073ac10e21a80dec9e60e7dd"}, - {file = "Cython-3.0.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e1c9385e99eef299396b9a1e39790e81819446c6a83e249f6f0fc71a64f57a0"}, - {file = "Cython-3.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d49d20db27c9cfcf45bb1fbf68f777bd1e04e4b949e4e5172d9ee8c9419bc792"}, - {file = "Cython-3.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d12591939af93c59defea6fc5320ca099eb44e4694e3b2cbe72fb24406079b97"}, - {file = "Cython-3.0.3-cp39-cp39-win32.whl", hash = "sha256:9f40b27545d583fd7df0d3c1b76b3bcaf8a72dbd8d83d5486af2384015660de8"}, - {file = "Cython-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:74ba0f11b384246b7965169f08bf67d426e4957fee5c165571340217a9b43cfc"}, - {file = "Cython-3.0.3-py2.py3-none-any.whl", hash = "sha256:176953a8a2532e34a589625a40c934ff339088f2bf4ddaa2e5cb77b05ca0c25c"}, - {file = "Cython-3.0.3.tar.gz", hash = "sha256:327309301b01f729f173a94511cb2280c87ba03c89ed428e88f913f778245030"}, + {file = "Cython-3.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:096cb461bf8d913a4327d93ea38d18bc3dbc577a71d805be04754e4b2cc2c45d"}, + {file = "Cython-3.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf671d712816b48fa2731799017ed68e5e440922d0c7e13dc825c226639ff766"}, + {file = "Cython-3.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:beb367fd88fc6ba8c204786f680229106d99da72a60f5906c85fc8d73640b01a"}, + {file = "Cython-3.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6619264ed43d8d8819d4f1cdb8a62ab66f87e92f06f3ff3e2533fd95a9945e59"}, + {file = "Cython-3.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c0fb9e7cf9db38918f19a803fab9bc7b2ed3f33a9e8319c616c464a0a8501b8d"}, + {file = "Cython-3.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c214f6e88ecdc8ff5d13f0914890445fdaad21bddc34a90cd14aeb3ad5e55e2e"}, + {file = "Cython-3.0.4-cp310-cp310-win32.whl", hash = "sha256:c9b1322f0d8ce5445fcc3a625b966f10c4182190026713e217d6f38d29930cb1"}, + {file = "Cython-3.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:146bfaab567157f4aa34114a37e3f98a3d9c4527ee99d4fd730cab56482bd3cf"}, + {file = "Cython-3.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c8e0f98d950987b0f9d5e10c41236bef5cb4fba701c6e680af0b9734faa3a85e"}, + {file = "Cython-3.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fe227d6d8e2ea030e82abc8a3e361e31447b66849f8c069caa783999e54a8f2"}, + {file = "Cython-3.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6da74000a672eac0d7cf02adc140b2f9c7d54eae6c196e615a1b5deb694d9203"}, + {file = "Cython-3.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48cda82eb82ad2014d2ad194442ed3c46156366be98e4e02f3e29742cdbf94a0"}, + {file = "Cython-3.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4355a2cb03b257773c0d2bb6af9818c72e836a9b09986e28f52e323d87b1fc67"}, + {file = "Cython-3.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:10b426adc3027d66303f5c7aa8b254d10ed80827ff5cce9e892d550b708dc044"}, + {file = "Cython-3.0.4-cp311-cp311-win32.whl", hash = "sha256:28de18f0d07eb34e2dd7b022ac30beab0fdd277846d07b7a08e69e6294f0762b"}, + {file = "Cython-3.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:9d31d76ed777a8a85be3f8f7f1cfef09b3bc33f6ec4abee1067dcef107f49778"}, + {file = "Cython-3.0.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d5a55749509c7f9f8a33bf9cc02cf76fd6564fcb38f486e43d2858145d735953"}, + {file = "Cython-3.0.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58cdfdd942cf5ffcee974aabfe9b9e26c0c1538fd31c1b03596d40405f7f4d40"}, + {file = "Cython-3.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b906997e7b98d7d29b84d10a5318993eba1aaff82ff7e1a0ac00254307913d7"}, + {file = "Cython-3.0.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f24114e1777604a28ae1c7a56a2c9964655f1031edecc448ad51e5abb19a279b"}, + {file = "Cython-3.0.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:07d0e69959f267b79ffd18ece8599711ad2f3d3ed1eddd0d4812d2a97de2b912"}, + {file = "Cython-3.0.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f7fcd93d15deceb2747b10266a39deccd94f257d610f3bbd52a7e16bc5908eda"}, + {file = "Cython-3.0.4-cp312-cp312-win32.whl", hash = "sha256:0aa2a6bb3ff67794d8d1dafaed22913adcbb327e96eca3ac44e2f3ba4a0ae446"}, + {file = "Cython-3.0.4-cp312-cp312-win_amd64.whl", hash = "sha256:0021350f6d7022a37f598320460b84b2c0daccf6bb65641bbdbc8b990bdf4ad2"}, + {file = "Cython-3.0.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b72c426df1586f967b1c61d2f8236702d75c6bbf34abdc258a59e09155a16414"}, + {file = "Cython-3.0.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a9262408f05eef039981479b38b38252d5b853992e5bc54a2d2dd05a2a0178e"}, + {file = "Cython-3.0.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28af4e7dff1742cb0f0a4823102c89c62a2d94115b68f718145fcfe0763c6e21"}, + {file = "Cython-3.0.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e8c144e2c5814e46868d1f81e2f4265ca1f314a8187d0420cd76e9563294cf8"}, + {file = "Cython-3.0.4-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:19a64bf2591272348ab08bcd4a5f884259cc3186f008c9038b8ec7d01f847fd5"}, + {file = "Cython-3.0.4-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:fc96efa617184b8581a02663e261b41c13a605da8ef4ba1ed735bf46184f815e"}, + {file = "Cython-3.0.4-cp36-cp36m-win32.whl", hash = "sha256:15d52f7f9d08b264c042aa508bf457f53654b55f533e0262e146002b1c15d1cd"}, + {file = "Cython-3.0.4-cp36-cp36m-win_amd64.whl", hash = "sha256:0650460b5fd6f16da4186e0a769b47db5532601e306f3b5d17941283d5e36d24"}, + {file = "Cython-3.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b3ddfc6f05410095ec11491dde05f50973e501567d21cbfcf5832d95f141878a"}, + {file = "Cython-3.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a0b92adfcac68dcf549daddec83c87a86995caa6f87bfb6f72de4797e1a6ad6"}, + {file = "Cython-3.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ada3659608795bb36930d9a206b8dd6b865d85e2999a02ce8b34f3195d88301"}, + {file = "Cython-3.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:061dec1be8d8b601b160582609a78eb08324a4ccf21bee0d04853a3e9dfcbefd"}, + {file = "Cython-3.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:bc42004f181373cd3b39bbacfb71a5b0606ed6e4c199c940cca2212ba0f79525"}, + {file = "Cython-3.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:f124ac9ee41e1bfdfb16f53f1db85de296cd2144a4e8fdee8c3560a8fe9b6d5d"}, + {file = "Cython-3.0.4-cp37-cp37m-win32.whl", hash = "sha256:48b35ab009227ee6188991b5666aae1936b82a944f707c042cef267709de12b5"}, + {file = "Cython-3.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:861979428f749faa9883dc4e11e8c3fc2c29bd0031cf49661604459b53ea7c66"}, + {file = "Cython-3.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c7a7dd7c50d07718a5ac2bdea166085565f7217cf1e030cc07c22a8b80a406a7"}, + {file = "Cython-3.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d40d4135f76fb0ed4caa2d422fdb4231616615698709d3c421ecc733f1ac7ca0"}, + {file = "Cython-3.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:207f53893ca22d8c8f5db533f38382eb7ddc2d0b4ab51699bf052423a6febdad"}, + {file = "Cython-3.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0422a40a58dcfbb54c8b4e125461d741031ff046bc678475cc7a6c801d2a7721"}, + {file = "Cython-3.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ef4b144c5b29b4ea0b40c401458b86df8d75382b2e5d03e9f67f607c05b516a9"}, + {file = "Cython-3.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0612439f810cc281e51fead69de0545c4d9772a1e82149c119d1aafc1f6210ba"}, + {file = "Cython-3.0.4-cp38-cp38-win32.whl", hash = "sha256:b86871862bd65806ba0d0aa2b9c77fcdcc6cbd8d36196688f4896a34bb626334"}, + {file = "Cython-3.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:6603a287188dcbc36358a73a7be43e8a2ecf0c6a06835bdfdd1b113943afdd6f"}, + {file = "Cython-3.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0fc9e974419cc0393072b1e9a669f71c3b34209636d2005ff8620687daa82b8c"}, + {file = "Cython-3.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e84988d384dfba678387ea7e4f68786c3703543018d473605d9299c69a07f197"}, + {file = "Cython-3.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36299ffd5663203c25d3a76980f077e23b6d4f574d142f0f43943f57be445639"}, + {file = "Cython-3.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8529cf09919263a6826adc04c5dde9f1406dd7920929b16be19ee9848110e353"}, + {file = "Cython-3.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8692249732d62e049df3884fa601b70fad3358703e137aceeb581e5860e7d9b7"}, + {file = "Cython-3.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f234bc46043856d118ebd94b13ea29df674503bc94ced3d81ca46a1ad5b5b9ae"}, + {file = "Cython-3.0.4-cp39-cp39-win32.whl", hash = "sha256:c2215f436ce3cce49e6e318cb8f7253cfc4d3bea690777c2a5dd52ae93342504"}, + {file = "Cython-3.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:003ccc40e0867770db0018274977d1874e4df64983d5e3e36937f107e0b2fdf6"}, + {file = "Cython-3.0.4-py2.py3-none-any.whl", hash = "sha256:e5e2859f97e9cceb8e70b0934c56157038b8b083245898593008162a70536d7e"}, + {file = "Cython-3.0.4.tar.gz", hash = "sha256:2e379b491ee985d31e5faaf050f79f4a8f59f482835906efe4477b33b4fbe9ff"}, ] [[package]] @@ -1244,6 +1258,47 @@ files = [ {file = "numpy-1.24.4.tar.gz", hash = "sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463"}, ] +[[package]] +name = "numpy" +version = "1.26.1" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = "<3.13,>=3.9" +files = [ + {file = "numpy-1.26.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82e871307a6331b5f09efda3c22e03c095d957f04bf6bc1804f30048d0e5e7af"}, + {file = "numpy-1.26.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdd9ec98f0063d93baeb01aad472a1a0840dee302842a2746a7a8e92968f9575"}, + {file = "numpy-1.26.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d78f269e0c4fd365fc2992c00353e4530d274ba68f15e968d8bc3c69ce5f5244"}, + {file = "numpy-1.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ab9163ca8aeb7fd32fe93866490654d2f7dda4e61bc6297bf72ce07fdc02f67"}, + {file = "numpy-1.26.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:78ca54b2f9daffa5f323f34cdf21e1d9779a54073f0018a3094ab907938331a2"}, + {file = "numpy-1.26.1-cp310-cp310-win32.whl", hash = "sha256:d1cfc92db6af1fd37a7bb58e55c8383b4aa1ba23d012bdbba26b4bcca45ac297"}, + {file = "numpy-1.26.1-cp310-cp310-win_amd64.whl", hash = "sha256:d2984cb6caaf05294b8466966627e80bf6c7afd273279077679cb010acb0e5ab"}, + {file = "numpy-1.26.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cd7837b2b734ca72959a1caf3309457a318c934abef7a43a14bb984e574bbb9a"}, + {file = "numpy-1.26.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1c59c046c31a43310ad0199d6299e59f57a289e22f0f36951ced1c9eac3665b9"}, + {file = "numpy-1.26.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d58e8c51a7cf43090d124d5073bc29ab2755822181fcad978b12e144e5e5a4b3"}, + {file = "numpy-1.26.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6081aed64714a18c72b168a9276095ef9155dd7888b9e74b5987808f0dd0a974"}, + {file = "numpy-1.26.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:97e5d6a9f0702c2863aaabf19f0d1b6c2628fbe476438ce0b5ce06e83085064c"}, + {file = "numpy-1.26.1-cp311-cp311-win32.whl", hash = "sha256:b9d45d1dbb9de84894cc50efece5b09939752a2d75aab3a8b0cef6f3a35ecd6b"}, + {file = "numpy-1.26.1-cp311-cp311-win_amd64.whl", hash = "sha256:3649d566e2fc067597125428db15d60eb42a4e0897fc48d28cb75dc2e0454e53"}, + {file = "numpy-1.26.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1d1bd82d539607951cac963388534da3b7ea0e18b149a53cf883d8f699178c0f"}, + {file = "numpy-1.26.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:afd5ced4e5a96dac6725daeb5242a35494243f2239244fad10a90ce58b071d24"}, + {file = "numpy-1.26.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a03fb25610ef560a6201ff06df4f8105292ba56e7cdd196ea350d123fc32e24e"}, + {file = "numpy-1.26.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcfaf015b79d1f9f9c9fd0731a907407dc3e45769262d657d754c3a028586124"}, + {file = "numpy-1.26.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c"}, + {file = "numpy-1.26.1-cp312-cp312-win32.whl", hash = "sha256:af22f3d8e228d84d1c0c44c1fbdeb80f97a15a0abe4f080960393a00db733b66"}, + {file = "numpy-1.26.1-cp312-cp312-win_amd64.whl", hash = "sha256:9f42284ebf91bdf32fafac29d29d4c07e5e9d1af862ea73686581773ef9e73a7"}, + {file = "numpy-1.26.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bb894accfd16b867d8643fc2ba6c8617c78ba2828051e9a69511644ce86ce83e"}, + {file = "numpy-1.26.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617"}, + {file = "numpy-1.26.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9696aa2e35cc41e398a6d42d147cf326f8f9d81befcb399bc1ed7ffea339b64e"}, + {file = "numpy-1.26.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5b411040beead47a228bde3b2241100454a6abde9df139ed087bd73fc0a4908"}, + {file = "numpy-1.26.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1e11668d6f756ca5ef534b5be8653d16c5352cbb210a5c2a79ff288e937010d5"}, + {file = "numpy-1.26.1-cp39-cp39-win32.whl", hash = "sha256:d1d2c6b7dd618c41e202c59c1413ef9b2c8e8a15f5039e344af64195459e3104"}, + {file = "numpy-1.26.1-cp39-cp39-win_amd64.whl", hash = "sha256:59227c981d43425ca5e5c01094d59eb14e8772ce6975d4b2fc1e106a833d5ae2"}, + {file = "numpy-1.26.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:06934e1a22c54636a059215d6da99e23286424f316fddd979f5071093b648668"}, + {file = "numpy-1.26.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76ff661a867d9272cd2a99eed002470f46dbe0943a5ffd140f49be84f68ffc42"}, + {file = "numpy-1.26.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:6965888d65d2848e8768824ca8288db0a81263c1efccec881cb35a0d805fcd2f"}, + {file = "numpy-1.26.1.tar.gz", hash = "sha256:c8c6c72d4a9f831f328efb1312642a1cafafaa88981d9ab76368d50d07d93cbe"}, +] + [[package]] name = "openbb-alpha-vantage" version = "0.1.0a3" @@ -1272,6 +1327,19 @@ files = [ [package.dependencies] openbb-core = ">=0.1.0a2,<0.2.0" +[[package]] +name = "openbb-biztoc" +version = "0.1.0a3" +description = "" +optional = true +python-versions = "*" +files = [] +develop = true + +[package.source] +type = "directory" +url = "providers/biztoc" + [[package]] name = "openbb-cboe" version = "0.1.0a3" @@ -1510,19 +1578,20 @@ openbb-core = ">=0.1.0a2,<0.2.0" [[package]] name = "openbb-provider" -version = "0.1.0a2" +version = "0.1.0a3" description = "OpenBB package to execute queries to financial data providers" optional = false python-versions = ">=3.8,<4.0" files = [ - {file = "openbb_provider-0.1.0a2-py3-none-any.whl", hash = "sha256:4b21fa06f531ed6cf5497a163c849c2a973b150eb362d41feb510bbdfdf58c98"}, - {file = "openbb_provider-0.1.0a2.tar.gz", hash = "sha256:a1a76d4a18fc89d15beb5f30c74e9e7bbfc87f051be630bd58416543f722eac0"}, + {file = "openbb_provider-0.1.0a3-py3-none-any.whl", hash = "sha256:d589e5fade39737b99f770295926d472faaeb7f4b9d963a6cafa362293c92303"}, + {file = "openbb_provider-0.1.0a3.tar.gz", hash = "sha256:7f37432fca541a07f132efae1885a1d320d6746e814a7ef986bc2d7ca65916c8"}, ] [package.dependencies] -importlib-metadata = ">=6.8.0,<7.0.0" -pydantic = {version = ">=1.10,<2.0", extras = ["dotenv"]} +importlib_metadata = ">=6.8.0,<7.0.0" +pydantic = ">=2.4.2,<3.0.0" pytest-recorder = ">=0.2.3,<0.3.0" +python-dotenv = ">=1.0.0,<2.0.0" requests = ">=2.31.0,<3.0.0" urllib3 = "<2.0.0" @@ -1665,8 +1734,8 @@ files = [ [package.dependencies] numpy = [ - {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, {version = ">=1.20.3", markers = "python_version < \"3.10\""}, + {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, ] python-dateutil = ">=2.8.2" @@ -1733,75 +1802,75 @@ test = ["pytest", "pytest-cov", "scipy"] [[package]] name = "peewee" -version = "3.16.3" +version = "3.17.0" description = "a little orm" optional = true python-versions = "*" files = [ - {file = "peewee-3.16.3.tar.gz", hash = "sha256:12b30e931193bc37b11f7c2ac646e3f67125a8b1a543ad6ab37ad124c8df7d16"}, + {file = "peewee-3.17.0.tar.gz", hash = "sha256:3a56967f28a43ca7a4287f4803752aeeb1a57a08dee2e839b99868181dfb5df8"}, ] [[package]] name = "pillow" -version = "10.0.1" +version = "10.1.0" description = "Python Imaging Library (Fork)" optional = true python-versions = ">=3.8" files = [ - {file = "Pillow-10.0.1-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:8f06be50669087250f319b706decf69ca71fdecd829091a37cc89398ca4dc17a"}, - {file = "Pillow-10.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:50bd5f1ebafe9362ad622072a1d2f5850ecfa44303531ff14353a4059113b12d"}, - {file = "Pillow-10.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6a90167bcca1216606223a05e2cf991bb25b14695c518bc65639463d7db722d"}, - {file = "Pillow-10.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f11c9102c56ffb9ca87134bd025a43d2aba3f1155f508eff88f694b33a9c6d19"}, - {file = "Pillow-10.0.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:186f7e04248103482ea6354af6d5bcedb62941ee08f7f788a1c7707bc720c66f"}, - {file = "Pillow-10.0.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:0462b1496505a3462d0f35dc1c4d7b54069747d65d00ef48e736acda2c8cbdff"}, - {file = "Pillow-10.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d889b53ae2f030f756e61a7bff13684dcd77e9af8b10c6048fb2c559d6ed6eaf"}, - {file = "Pillow-10.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:552912dbca585b74d75279a7570dd29fa43b6d93594abb494ebb31ac19ace6bd"}, - {file = "Pillow-10.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:787bb0169d2385a798888e1122c980c6eff26bf941a8ea79747d35d8f9210ca0"}, - {file = "Pillow-10.0.1-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:fd2a5403a75b54661182b75ec6132437a181209b901446ee5724b589af8edef1"}, - {file = "Pillow-10.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2d7e91b4379f7a76b31c2dda84ab9e20c6220488e50f7822e59dac36b0cd92b1"}, - {file = "Pillow-10.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19e9adb3f22d4c416e7cd79b01375b17159d6990003633ff1d8377e21b7f1b21"}, - {file = "Pillow-10.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93139acd8109edcdeffd85e3af8ae7d88b258b3a1e13a038f542b79b6d255c54"}, - {file = "Pillow-10.0.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:92a23b0431941a33242b1f0ce6c88a952e09feeea9af4e8be48236a68ffe2205"}, - {file = "Pillow-10.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cbe68deb8580462ca0d9eb56a81912f59eb4542e1ef8f987405e35a0179f4ea2"}, - {file = "Pillow-10.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:522ff4ac3aaf839242c6f4e5b406634bfea002469656ae8358644fc6c4856a3b"}, - {file = "Pillow-10.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:84efb46e8d881bb06b35d1d541aa87f574b58e87f781cbba8d200daa835b42e1"}, - {file = "Pillow-10.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:898f1d306298ff40dc1b9ca24824f0488f6f039bc0e25cfb549d3195ffa17088"}, - {file = "Pillow-10.0.1-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:bcf1207e2f2385a576832af02702de104be71301c2696d0012b1b93fe34aaa5b"}, - {file = "Pillow-10.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5d6c9049c6274c1bb565021367431ad04481ebb54872edecfcd6088d27edd6ed"}, - {file = "Pillow-10.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28444cb6ad49726127d6b340217f0627abc8732f1194fd5352dec5e6a0105635"}, - {file = "Pillow-10.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de596695a75496deb3b499c8c4f8e60376e0516e1a774e7bc046f0f48cd620ad"}, - {file = "Pillow-10.0.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:2872f2d7846cf39b3dbff64bc1104cc48c76145854256451d33c5faa55c04d1a"}, - {file = "Pillow-10.0.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:4ce90f8a24e1c15465048959f1e94309dfef93af272633e8f37361b824532e91"}, - {file = "Pillow-10.0.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ee7810cf7c83fa227ba9125de6084e5e8b08c59038a7b2c9045ef4dde61663b4"}, - {file = "Pillow-10.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b1be1c872b9b5fcc229adeadbeb51422a9633abd847c0ff87dc4ef9bb184ae08"}, - {file = "Pillow-10.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:98533fd7fa764e5f85eebe56c8e4094db912ccbe6fbf3a58778d543cadd0db08"}, - {file = "Pillow-10.0.1-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:764d2c0daf9c4d40ad12fbc0abd5da3af7f8aa11daf87e4fa1b834000f4b6b0a"}, - {file = "Pillow-10.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fcb59711009b0168d6ee0bd8fb5eb259c4ab1717b2f538bbf36bacf207ef7a68"}, - {file = "Pillow-10.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:697a06bdcedd473b35e50a7e7506b1d8ceb832dc238a336bd6f4f5aa91a4b500"}, - {file = "Pillow-10.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f665d1e6474af9f9da5e86c2a3a2d2d6204e04d5af9c06b9d42afa6ebde3f21"}, - {file = "Pillow-10.0.1-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:2fa6dd2661838c66f1a5473f3b49ab610c98a128fc08afbe81b91a1f0bf8c51d"}, - {file = "Pillow-10.0.1-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:3a04359f308ebee571a3127fdb1bd01f88ba6f6fb6d087f8dd2e0d9bff43f2a7"}, - {file = "Pillow-10.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:723bd25051454cea9990203405fa6b74e043ea76d4968166dfd2569b0210886a"}, - {file = "Pillow-10.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:71671503e3015da1b50bd18951e2f9daf5b6ffe36d16f1eb2c45711a301521a7"}, - {file = "Pillow-10.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:44e7e4587392953e5e251190a964675f61e4dae88d1e6edbe9f36d6243547ff3"}, - {file = "Pillow-10.0.1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:3855447d98cced8670aaa63683808df905e956f00348732448b5a6df67ee5849"}, - {file = "Pillow-10.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ed2d9c0704f2dc4fa980b99d565c0c9a543fe5101c25b3d60488b8ba80f0cce1"}, - {file = "Pillow-10.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f5bb289bb835f9fe1a1e9300d011eef4d69661bb9b34d5e196e5e82c4cb09b37"}, - {file = "Pillow-10.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a0d3e54ab1df9df51b914b2233cf779a5a10dfd1ce339d0421748232cea9876"}, - {file = "Pillow-10.0.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:2cc6b86ece42a11f16f55fe8903595eff2b25e0358dec635d0a701ac9586588f"}, - {file = "Pillow-10.0.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:ca26ba5767888c84bf5a0c1a32f069e8204ce8c21d00a49c90dabeba00ce0145"}, - {file = "Pillow-10.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f0b4b06da13275bc02adfeb82643c4a6385bd08d26f03068c2796f60d125f6f2"}, - {file = "Pillow-10.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bc2e3069569ea9dbe88d6b8ea38f439a6aad8f6e7a6283a38edf61ddefb3a9bf"}, - {file = "Pillow-10.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:8b451d6ead6e3500b6ce5c7916a43d8d8d25ad74b9102a629baccc0808c54971"}, - {file = "Pillow-10.0.1-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:32bec7423cdf25c9038fef614a853c9d25c07590e1a870ed471f47fb80b244db"}, - {file = "Pillow-10.0.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7cf63d2c6928b51d35dfdbda6f2c1fddbe51a6bc4a9d4ee6ea0e11670dd981e"}, - {file = "Pillow-10.0.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f6d3d4c905e26354e8f9d82548475c46d8e0889538cb0657aa9c6f0872a37aa4"}, - {file = "Pillow-10.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:847e8d1017c741c735d3cd1883fa7b03ded4f825a6e5fcb9378fd813edee995f"}, - {file = "Pillow-10.0.1-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:7f771e7219ff04b79e231d099c0a28ed83aa82af91fd5fa9fdb28f5b8d5addaf"}, - {file = "Pillow-10.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:459307cacdd4138edee3875bbe22a2492519e060660eaf378ba3b405d1c66317"}, - {file = "Pillow-10.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b059ac2c4c7a97daafa7dc850b43b2d3667def858a4f112d1aa082e5c3d6cf7d"}, - {file = "Pillow-10.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d6caf3cd38449ec3cd8a68b375e0c6fe4b6fd04edb6c9766b55ef84a6e8ddf2d"}, - {file = "Pillow-10.0.1.tar.gz", hash = "sha256:d72967b06be9300fed5cfbc8b5bafceec48bf7cdc7dab66b1d2549035287191d"}, + {file = "Pillow-10.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1ab05f3db77e98f93964697c8efc49c7954b08dd61cff526b7f2531a22410106"}, + {file = "Pillow-10.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6932a7652464746fcb484f7fc3618e6503d2066d853f68a4bd97193a3996e273"}, + {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f63b5a68daedc54c7c3464508d8c12075e56dcfbd42f8c1bf40169061ae666"}, + {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0949b55eb607898e28eaccb525ab104b2d86542a85c74baf3a6dc24002edec2"}, + {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ae88931f93214777c7a3aa0a8f92a683f83ecde27f65a45f95f22d289a69e593"}, + {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b0eb01ca85b2361b09480784a7931fc648ed8b7836f01fb9241141b968feb1db"}, + {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d27b5997bdd2eb9fb199982bb7eb6164db0426904020dc38c10203187ae2ff2f"}, + {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7df5608bc38bd37ef585ae9c38c9cd46d7c81498f086915b0f97255ea60c2818"}, + {file = "Pillow-10.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:41f67248d92a5e0a2076d3517d8d4b1e41a97e2df10eb8f93106c89107f38b57"}, + {file = "Pillow-10.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1fb29c07478e6c06a46b867e43b0bcdb241b44cc52be9bc25ce5944eed4648e7"}, + {file = "Pillow-10.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2cdc65a46e74514ce742c2013cd4a2d12e8553e3a2563c64879f7c7e4d28bce7"}, + {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50d08cd0a2ecd2a8657bd3d82c71efd5a58edb04d9308185d66c3a5a5bed9610"}, + {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:062a1610e3bc258bff2328ec43f34244fcec972ee0717200cb1425214fe5b839"}, + {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:61f1a9d247317fa08a308daaa8ee7b3f760ab1809ca2da14ecc88ae4257d6172"}, + {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a646e48de237d860c36e0db37ecaecaa3619e6f3e9d5319e527ccbc8151df061"}, + {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:47e5bf85b80abc03be7455c95b6d6e4896a62f6541c1f2ce77a7d2bb832af262"}, + {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a92386125e9ee90381c3369f57a2a50fa9e6aa8b1cf1d9c4b200d41a7dd8e992"}, + {file = "Pillow-10.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f7c276c05a9767e877a0b4c5050c8bee6a6d960d7f0c11ebda6b99746068c2a"}, + {file = "Pillow-10.1.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:a89b8312d51715b510a4fe9fc13686283f376cfd5abca8cd1c65e4c76e21081b"}, + {file = "Pillow-10.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:00f438bb841382b15d7deb9a05cc946ee0f2c352653c7aa659e75e592f6fa17d"}, + {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d929a19f5469b3f4df33a3df2983db070ebb2088a1e145e18facbc28cae5b27"}, + {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a92109192b360634a4489c0c756364c0c3a2992906752165ecb50544c251312"}, + {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:0248f86b3ea061e67817c47ecbe82c23f9dd5d5226200eb9090b3873d3ca32de"}, + {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9882a7451c680c12f232a422730f986a1fcd808da0fd428f08b671237237d651"}, + {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1c3ac5423c8c1da5928aa12c6e258921956757d976405e9467c5f39d1d577a4b"}, + {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:806abdd8249ba3953c33742506fe414880bad78ac25cc9a9b1c6ae97bedd573f"}, + {file = "Pillow-10.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:eaed6977fa73408b7b8a24e8b14e59e1668cfc0f4c40193ea7ced8e210adf996"}, + {file = "Pillow-10.1.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:fe1e26e1ffc38be097f0ba1d0d07fcade2bcfd1d023cda5b29935ae8052bd793"}, + {file = "Pillow-10.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7a7e3daa202beb61821c06d2517428e8e7c1aab08943e92ec9e5755c2fc9ba5e"}, + {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24fadc71218ad2b8ffe437b54876c9382b4a29e030a05a9879f615091f42ffc2"}, + {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa1d323703cfdac2036af05191b969b910d8f115cf53093125e4058f62012c9a"}, + {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:912e3812a1dbbc834da2b32299b124b5ddcb664ed354916fd1ed6f193f0e2d01"}, + {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:7dbaa3c7de82ef37e7708521be41db5565004258ca76945ad74a8e998c30af8d"}, + {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9d7bc666bd8c5a4225e7ac71f2f9d12466ec555e89092728ea0f5c0c2422ea80"}, + {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baada14941c83079bf84c037e2d8b7506ce201e92e3d2fa0d1303507a8538212"}, + {file = "Pillow-10.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:2ef6721c97894a7aa77723740a09547197533146fba8355e86d6d9a4a1056b14"}, + {file = "Pillow-10.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0a026c188be3b443916179f5d04548092e253beb0c3e2ee0a4e2cdad72f66099"}, + {file = "Pillow-10.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:04f6f6149f266a100374ca3cc368b67fb27c4af9f1cc8cb6306d849dcdf12616"}, + {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb40c011447712d2e19cc261c82655f75f32cb724788df315ed992a4d65696bb"}, + {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a8413794b4ad9719346cd9306118450b7b00d9a15846451549314a58ac42219"}, + {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c9aeea7b63edb7884b031a35305629a7593272b54f429a9869a4f63a1bf04c34"}, + {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b4005fee46ed9be0b8fb42be0c20e79411533d1fd58edabebc0dd24626882cfd"}, + {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4d0152565c6aa6ebbfb1e5d8624140a440f2b99bf7afaafbdbf6430426497f28"}, + {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d921bc90b1defa55c9917ca6b6b71430e4286fc9e44c55ead78ca1a9f9eba5f2"}, + {file = "Pillow-10.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cfe96560c6ce2f4c07d6647af2d0f3c54cc33289894ebd88cfbb3bcd5391e256"}, + {file = "Pillow-10.1.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:937bdc5a7f5343d1c97dc98149a0be7eb9704e937fe3dc7140e229ae4fc572a7"}, + {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1c25762197144e211efb5f4e8ad656f36c8d214d390585d1d21281f46d556ba"}, + {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:afc8eef765d948543a4775f00b7b8c079b3321d6b675dde0d02afa2ee23000b4"}, + {file = "Pillow-10.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:883f216eac8712b83a63f41b76ddfb7b2afab1b74abbb413c5df6680f071a6b9"}, + {file = "Pillow-10.1.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b920e4d028f6442bea9a75b7491c063f0b9a3972520731ed26c83e254302eb1e"}, + {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c41d960babf951e01a49c9746f92c5a7e0d939d1652d7ba30f6b3090f27e412"}, + {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1fafabe50a6977ac70dfe829b2d5735fd54e190ab55259ec8aea4aaea412fa0b"}, + {file = "Pillow-10.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3b834f4b16173e5b92ab6566f0473bfb09f939ba14b23b8da1f54fa63e4b623f"}, + {file = "Pillow-10.1.0.tar.gz", hash = "sha256:e6bf8de6c36ed96c86ea3b6e1d5273c53f46ef518a062464cd7ef5dd2cf92e38"}, ] [package.extras] @@ -1911,56 +1980,140 @@ files = [ [[package]] name = "pydantic" -version = "1.10.13" -description = "Data validation and settings management using python type hints" +version = "2.4.2" +description = "Data validation using Python type hints" optional = false python-versions = ">=3.7" files = [ - {file = "pydantic-1.10.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:efff03cc7a4f29d9009d1c96ceb1e7a70a65cfe86e89d34e4a5f2ab1e5693737"}, - {file = "pydantic-1.10.13-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3ecea2b9d80e5333303eeb77e180b90e95eea8f765d08c3d278cd56b00345d01"}, - {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1740068fd8e2ef6eb27a20e5651df000978edce6da6803c2bef0bc74540f9548"}, - {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84bafe2e60b5e78bc64a2941b4c071a4b7404c5c907f5f5a99b0139781e69ed8"}, - {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bc0898c12f8e9c97f6cd44c0ed70d55749eaf783716896960b4ecce2edfd2d69"}, - {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:654db58ae399fe6434e55325a2c3e959836bd17a6f6a0b6ca8107ea0571d2e17"}, - {file = "pydantic-1.10.13-cp310-cp310-win_amd64.whl", hash = "sha256:75ac15385a3534d887a99c713aa3da88a30fbd6204a5cd0dc4dab3d770b9bd2f"}, - {file = "pydantic-1.10.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c553f6a156deb868ba38a23cf0df886c63492e9257f60a79c0fd8e7173537653"}, - {file = "pydantic-1.10.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5e08865bc6464df8c7d61439ef4439829e3ab62ab1669cddea8dd00cd74b9ffe"}, - {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e31647d85a2013d926ce60b84f9dd5300d44535a9941fe825dc349ae1f760df9"}, - {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:210ce042e8f6f7c01168b2d84d4c9eb2b009fe7bf572c2266e235edf14bacd80"}, - {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8ae5dd6b721459bfa30805f4c25880e0dd78fc5b5879f9f7a692196ddcb5a580"}, - {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f8e81fc5fb17dae698f52bdd1c4f18b6ca674d7068242b2aff075f588301bbb0"}, - {file = "pydantic-1.10.13-cp311-cp311-win_amd64.whl", hash = "sha256:61d9dce220447fb74f45e73d7ff3b530e25db30192ad8d425166d43c5deb6df0"}, - {file = "pydantic-1.10.13-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4b03e42ec20286f052490423682016fd80fda830d8e4119f8ab13ec7464c0132"}, - {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f59ef915cac80275245824e9d771ee939133be38215555e9dc90c6cb148aaeb5"}, - {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a1f9f747851338933942db7af7b6ee8268568ef2ed86c4185c6ef4402e80ba8"}, - {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:97cce3ae7341f7620a0ba5ef6cf043975cd9d2b81f3aa5f4ea37928269bc1b87"}, - {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:854223752ba81e3abf663d685f105c64150873cc6f5d0c01d3e3220bcff7d36f"}, - {file = "pydantic-1.10.13-cp37-cp37m-win_amd64.whl", hash = "sha256:b97c1fac8c49be29486df85968682b0afa77e1b809aff74b83081cc115e52f33"}, - {file = "pydantic-1.10.13-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c958d053453a1c4b1c2062b05cd42d9d5c8eb67537b8d5a7e3c3032943ecd261"}, - {file = "pydantic-1.10.13-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c5370a7edaac06daee3af1c8b1192e305bc102abcbf2a92374b5bc793818599"}, - {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d6f6e7305244bddb4414ba7094ce910560c907bdfa3501e9db1a7fd7eaea127"}, - {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3a3c792a58e1622667a2837512099eac62490cdfd63bd407993aaf200a4cf1f"}, - {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c636925f38b8db208e09d344c7aa4f29a86bb9947495dd6b6d376ad10334fb78"}, - {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:678bcf5591b63cc917100dc50ab6caebe597ac67e8c9ccb75e698f66038ea953"}, - {file = "pydantic-1.10.13-cp38-cp38-win_amd64.whl", hash = "sha256:6cf25c1a65c27923a17b3da28a0bdb99f62ee04230c931d83e888012851f4e7f"}, - {file = "pydantic-1.10.13-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8ef467901d7a41fa0ca6db9ae3ec0021e3f657ce2c208e98cd511f3161c762c6"}, - {file = "pydantic-1.10.13-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:968ac42970f57b8344ee08837b62f6ee6f53c33f603547a55571c954a4225691"}, - {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9849f031cf8a2f0a928fe885e5a04b08006d6d41876b8bbd2fc68a18f9f2e3fd"}, - {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:56e3ff861c3b9c6857579de282ce8baabf443f42ffba355bf070770ed63e11e1"}, - {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f00790179497767aae6bcdc36355792c79e7bbb20b145ff449700eb076c5f96"}, - {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:75b297827b59bc229cac1a23a2f7a4ac0031068e5be0ce385be1462e7e17a35d"}, - {file = "pydantic-1.10.13-cp39-cp39-win_amd64.whl", hash = "sha256:e70ca129d2053fb8b728ee7d1af8e553a928d7e301a311094b8a0501adc8763d"}, - {file = "pydantic-1.10.13-py3-none-any.whl", hash = "sha256:b87326822e71bd5f313e7d3bfdc77ac3247035ac10b0c0618bd99dcf95b1e687"}, - {file = "pydantic-1.10.13.tar.gz", hash = "sha256:32c8b48dcd3b2ac4e78b0ba4af3a2c2eb6048cb75202f0ea7b34feb740efc340"}, -] - -[package.dependencies] -python-dotenv = {version = ">=0.10.4", optional = true, markers = "extra == \"dotenv\""} -typing-extensions = ">=4.2.0" + {file = "pydantic-2.4.2-py3-none-any.whl", hash = "sha256:bc3ddf669d234f4220e6e1c4d96b061abe0998185a8d7855c0126782b7abc8c1"}, + {file = "pydantic-2.4.2.tar.gz", hash = "sha256:94f336138093a5d7f426aac732dcfe7ab4eb4da243c88f891d65deb4a2556ee7"}, +] + +[package.dependencies] +annotated-types = ">=0.4.0" +pydantic-core = "2.10.1" +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.10.1" +description = "" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pydantic_core-2.10.1-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:d64728ee14e667ba27c66314b7d880b8eeb050e58ffc5fec3b7a109f8cddbd63"}, + {file = "pydantic_core-2.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:48525933fea744a3e7464c19bfede85df4aba79ce90c60b94d8b6e1eddd67096"}, + {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef337945bbd76cce390d1b2496ccf9f90b1c1242a3a7bc242ca4a9fc5993427a"}, + {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1392e0638af203cee360495fd2cfdd6054711f2db5175b6e9c3c461b76f5175"}, + {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0675ba5d22de54d07bccde38997e780044dcfa9a71aac9fd7d4d7a1d2e3e65f7"}, + {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:128552af70a64660f21cb0eb4876cbdadf1a1f9d5de820fed6421fa8de07c893"}, + {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f6e6aed5818c264412ac0598b581a002a9f050cb2637a84979859e70197aa9e"}, + {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ecaac27da855b8d73f92123e5f03612b04c5632fd0a476e469dfc47cd37d6b2e"}, + {file = "pydantic_core-2.10.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b3c01c2fb081fced3bbb3da78510693dc7121bb893a1f0f5f4b48013201f362e"}, + {file = "pydantic_core-2.10.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:92f675fefa977625105708492850bcbc1182bfc3e997f8eecb866d1927c98ae6"}, + {file = "pydantic_core-2.10.1-cp310-none-win32.whl", hash = "sha256:420a692b547736a8d8703c39ea935ab5d8f0d2573f8f123b0a294e49a73f214b"}, + {file = "pydantic_core-2.10.1-cp310-none-win_amd64.whl", hash = "sha256:0880e239827b4b5b3e2ce05e6b766a7414e5f5aedc4523be6b68cfbc7f61c5d0"}, + {file = "pydantic_core-2.10.1-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:073d4a470b195d2b2245d0343569aac7e979d3a0dcce6c7d2af6d8a920ad0bea"}, + {file = "pydantic_core-2.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:600d04a7b342363058b9190d4e929a8e2e715c5682a70cc37d5ded1e0dd370b4"}, + {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39215d809470f4c8d1881758575b2abfb80174a9e8daf8f33b1d4379357e417c"}, + {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eeb3d3d6b399ffe55f9a04e09e635554012f1980696d6b0aca3e6cf42a17a03b"}, + {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7a7902bf75779bc12ccfc508bfb7a4c47063f748ea3de87135d433a4cca7a2f"}, + {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3625578b6010c65964d177626fde80cf60d7f2e297d56b925cb5cdeda6e9925a"}, + {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:caa48fc31fc7243e50188197b5f0c4228956f97b954f76da157aae7f67269ae8"}, + {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:07ec6d7d929ae9c68f716195ce15e745b3e8fa122fc67698ac6498d802ed0fa4"}, + {file = "pydantic_core-2.10.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e6f31a17acede6a8cd1ae2d123ce04d8cca74056c9d456075f4f6f85de055607"}, + {file = "pydantic_core-2.10.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d8f1ebca515a03e5654f88411420fea6380fc841d1bea08effb28184e3d4899f"}, + {file = "pydantic_core-2.10.1-cp311-none-win32.whl", hash = "sha256:6db2eb9654a85ada248afa5a6db5ff1cf0f7b16043a6b070adc4a5be68c716d6"}, + {file = "pydantic_core-2.10.1-cp311-none-win_amd64.whl", hash = "sha256:4a5be350f922430997f240d25f8219f93b0c81e15f7b30b868b2fddfc2d05f27"}, + {file = "pydantic_core-2.10.1-cp311-none-win_arm64.whl", hash = "sha256:5fdb39f67c779b183b0c853cd6b45f7db84b84e0571b3ef1c89cdb1dfc367325"}, + {file = "pydantic_core-2.10.1-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:b1f22a9ab44de5f082216270552aa54259db20189e68fc12484873d926426921"}, + {file = "pydantic_core-2.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8572cadbf4cfa95fb4187775b5ade2eaa93511f07947b38f4cd67cf10783b118"}, + {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db9a28c063c7c00844ae42a80203eb6d2d6bbb97070cfa00194dff40e6f545ab"}, + {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e2a35baa428181cb2270a15864ec6286822d3576f2ed0f4cd7f0c1708472aff"}, + {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05560ab976012bf40f25d5225a58bfa649bb897b87192a36c6fef1ab132540d7"}, + {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d6495008733c7521a89422d7a68efa0a0122c99a5861f06020ef5b1f51f9ba7c"}, + {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14ac492c686defc8e6133e3a2d9eaf5261b3df26b8ae97450c1647286750b901"}, + {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8282bab177a9a3081fd3d0a0175a07a1e2bfb7fcbbd949519ea0980f8a07144d"}, + {file = "pydantic_core-2.10.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:aafdb89fdeb5fe165043896817eccd6434aee124d5ee9b354f92cd574ba5e78f"}, + {file = "pydantic_core-2.10.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f6defd966ca3b187ec6c366604e9296f585021d922e666b99c47e78738b5666c"}, + {file = "pydantic_core-2.10.1-cp312-none-win32.whl", hash = "sha256:7c4d1894fe112b0864c1fa75dffa045720a194b227bed12f4be7f6045b25209f"}, + {file = "pydantic_core-2.10.1-cp312-none-win_amd64.whl", hash = "sha256:5994985da903d0b8a08e4935c46ed8daf5be1cf217489e673910951dc533d430"}, + {file = "pydantic_core-2.10.1-cp312-none-win_arm64.whl", hash = "sha256:0d8a8adef23d86d8eceed3e32e9cca8879c7481c183f84ed1a8edc7df073af94"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:9badf8d45171d92387410b04639d73811b785b5161ecadabf056ea14d62d4ede"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:ebedb45b9feb7258fac0a268a3f6bec0a2ea4d9558f3d6f813f02ff3a6dc6698"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfe1090245c078720d250d19cb05d67e21a9cd7c257698ef139bc41cf6c27b4f"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e357571bb0efd65fd55f18db0a2fb0ed89d0bb1d41d906b138f088933ae618bb"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b3dcd587b69bbf54fc04ca157c2323b8911033e827fffaecf0cafa5a892a0904"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c120c9ce3b163b985a3b966bb701114beb1da4b0468b9b236fc754783d85aa3"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15d6bca84ffc966cc9976b09a18cf9543ed4d4ecbd97e7086f9ce9327ea48891"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5cabb9710f09d5d2e9e2748c3e3e20d991a4c5f96ed8f1132518f54ab2967221"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:82f55187a5bebae7d81d35b1e9aaea5e169d44819789837cdd4720d768c55d15"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1d40f55222b233e98e3921df7811c27567f0e1a4411b93d4c5c0f4ce131bc42f"}, + {file = "pydantic_core-2.10.1-cp37-none-win32.whl", hash = "sha256:14e09ff0b8fe6e46b93d36a878f6e4a3a98ba5303c76bb8e716f4878a3bee92c"}, + {file = "pydantic_core-2.10.1-cp37-none-win_amd64.whl", hash = "sha256:1396e81b83516b9d5c9e26a924fa69164156c148c717131f54f586485ac3c15e"}, + {file = "pydantic_core-2.10.1-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:6835451b57c1b467b95ffb03a38bb75b52fb4dc2762bb1d9dbed8de31ea7d0fc"}, + {file = "pydantic_core-2.10.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b00bc4619f60c853556b35f83731bd817f989cba3e97dc792bb8c97941b8053a"}, + {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fa467fd300a6f046bdb248d40cd015b21b7576c168a6bb20aa22e595c8ffcdd"}, + {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d99277877daf2efe074eae6338453a4ed54a2d93fb4678ddfe1209a0c93a2468"}, + {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa7db7558607afeccb33c0e4bf1c9a9a835e26599e76af6fe2fcea45904083a6"}, + {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aad7bd686363d1ce4ee930ad39f14e1673248373f4a9d74d2b9554f06199fb58"}, + {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:443fed67d33aa85357464f297e3d26e570267d1af6fef1c21ca50921d2976302"}, + {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:042462d8d6ba707fd3ce9649e7bf268633a41018d6a998fb5fbacb7e928a183e"}, + {file = "pydantic_core-2.10.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ecdbde46235f3d560b18be0cb706c8e8ad1b965e5c13bbba7450c86064e96561"}, + {file = "pydantic_core-2.10.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ed550ed05540c03f0e69e6d74ad58d026de61b9eaebebbaaf8873e585cbb18de"}, + {file = "pydantic_core-2.10.1-cp38-none-win32.whl", hash = "sha256:8cdbbd92154db2fec4ec973d45c565e767ddc20aa6dbaf50142676484cbff8ee"}, + {file = "pydantic_core-2.10.1-cp38-none-win_amd64.whl", hash = "sha256:9f6f3e2598604956480f6c8aa24a3384dbf6509fe995d97f6ca6103bb8c2534e"}, + {file = "pydantic_core-2.10.1-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:655f8f4c8d6a5963c9a0687793da37b9b681d9ad06f29438a3b2326d4e6b7970"}, + {file = "pydantic_core-2.10.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e570ffeb2170e116a5b17e83f19911020ac79d19c96f320cbfa1fa96b470185b"}, + {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64322bfa13e44c6c30c518729ef08fda6026b96d5c0be724b3c4ae4da939f875"}, + {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:485a91abe3a07c3a8d1e082ba29254eea3e2bb13cbbd4351ea4e5a21912cc9b0"}, + {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7c2b8eb9fc872e68b46eeaf835e86bccc3a58ba57d0eedc109cbb14177be531"}, + {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a5cb87bdc2e5f620693148b5f8f842d293cae46c5f15a1b1bf7ceeed324a740c"}, + {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25bd966103890ccfa028841a8f30cebcf5875eeac8c4bde4fe221364c92f0c9a"}, + {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f323306d0556351735b54acbf82904fe30a27b6a7147153cbe6e19aaaa2aa429"}, + {file = "pydantic_core-2.10.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0c27f38dc4fbf07b358b2bc90edf35e82d1703e22ff2efa4af4ad5de1b3833e7"}, + {file = "pydantic_core-2.10.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f1365e032a477c1430cfe0cf2856679529a2331426f8081172c4a74186f1d595"}, + {file = "pydantic_core-2.10.1-cp39-none-win32.whl", hash = "sha256:a1c311fd06ab3b10805abb72109f01a134019739bd3286b8ae1bc2fc4e50c07a"}, + {file = "pydantic_core-2.10.1-cp39-none-win_amd64.whl", hash = "sha256:ae8a8843b11dc0b03b57b52793e391f0122e740de3df1474814c700d2622950a"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d43002441932f9a9ea5d6f9efaa2e21458221a3a4b417a14027a1d530201ef1b"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fcb83175cc4936a5425dde3356f079ae03c0802bbdf8ff82c035f8a54b333521"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:962ed72424bf1f72334e2f1e61b68f16c0e596f024ca7ac5daf229f7c26e4208"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2cf5bb4dd67f20f3bbc1209ef572a259027c49e5ff694fa56bed62959b41e1f9"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e544246b859f17373bed915182ab841b80849ed9cf23f1f07b73b7c58baee5fb"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c0877239307b7e69d025b73774e88e86ce82f6ba6adf98f41069d5b0b78bd1bf"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:53df009d1e1ba40f696f8995683e067e3967101d4bb4ea6f667931b7d4a01357"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a1254357f7e4c82e77c348dabf2d55f1d14d19d91ff025004775e70a6ef40ada"}, + {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:524ff0ca3baea164d6d93a32c58ac79eca9f6cf713586fdc0adb66a8cdeab96a"}, + {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f0ac9fb8608dbc6eaf17956bf623c9119b4db7dbb511650910a82e261e6600f"}, + {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:320f14bd4542a04ab23747ff2c8a778bde727158b606e2661349557f0770711e"}, + {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:63974d168b6233b4ed6a0046296803cb13c56637a7b8106564ab575926572a55"}, + {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:417243bf599ba1f1fef2bb8c543ceb918676954734e2dcb82bf162ae9d7bd514"}, + {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:dda81e5ec82485155a19d9624cfcca9be88a405e2857354e5b089c2a982144b2"}, + {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:14cfbb00959259e15d684505263d5a21732b31248a5dd4941f73a3be233865b9"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:631cb7415225954fdcc2a024119101946793e5923f6c4d73a5914d27eb3d3a05"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:bec7dd208a4182e99c5b6c501ce0b1f49de2802448d4056091f8e630b28e9a52"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:149b8a07712f45b332faee1a2258d8ef1fb4a36f88c0c17cb687f205c5dc6e7d"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d966c47f9dd73c2d32a809d2be529112d509321c5310ebf54076812e6ecd884"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7eb037106f5c6b3b0b864ad226b0b7ab58157124161d48e4b30c4a43fef8bc4b"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:154ea7c52e32dce13065dbb20a4a6f0cc012b4f667ac90d648d36b12007fa9f7"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e562617a45b5a9da5be4abe72b971d4f00bf8555eb29bb91ec2ef2be348cd132"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:f23b55eb5464468f9e0e9a9935ce3ed2a870608d5f534025cd5536bca25b1402"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:e9121b4009339b0f751955baf4543a0bfd6bc3f8188f8056b1a25a2d45099934"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:0523aeb76e03f753b58be33b26540880bac5aa54422e4462404c432230543f33"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e0e2959ef5d5b8dc9ef21e1a305a21a36e254e6a34432d00c72a92fdc5ecda5"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da01bec0a26befab4898ed83b362993c844b9a607a86add78604186297eb047e"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f2e9072d71c1f6cfc79a36d4484c82823c560e6f5599c43c1ca6b5cdbd54f881"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f36a3489d9e28fe4b67be9992a23029c3cec0babc3bd9afb39f49844a8c721c5"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f64f82cc3443149292b32387086d02a6c7fb39b8781563e0ca7b8d7d9cf72bd7"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b4a6db486ac8e99ae696e09efc8b2b9fea67b63c8f88ba7a1a16c24a057a0776"}, + {file = "pydantic_core-2.10.1.tar.gz", hash = "sha256:0f8682dbdd2f67f8e1edddcbffcc29f60a6182b4901c367fc8c1c40d30bb0a82"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" [[package]] name = "pyhdfe" @@ -2161,6 +2314,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -2168,8 +2322,15 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -2186,6 +2347,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -2193,6 +2355,7 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -2305,110 +2468,110 @@ yaml = ["pyyaml (>=5.4)"] [[package]] name = "rpds-py" -version = "0.10.4" +version = "0.10.6" description = "Python bindings to Rust's persistent data structures (rpds)" optional = true python-versions = ">=3.8" files = [ - {file = "rpds_py-0.10.4-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:e41824343c2c129599645373992b1ce17720bb8a514f04ff9567031e1c26951e"}, - {file = "rpds_py-0.10.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b9d8884d58ea8801e5906a491ab34af975091af76d1a389173db491ee7e316bb"}, - {file = "rpds_py-0.10.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5db93f9017b384a4f194e1d89e1ce82d0a41b1fafdbbd3e0c8912baf13f2950f"}, - {file = "rpds_py-0.10.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c31ecfc53ac03dad4928a1712f3a2893008bfba1b3cde49e1c14ff67faae2290"}, - {file = "rpds_py-0.10.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4f92d2372ec992c82fd7c74aa21e2a1910b3dcdc6a7e6392919a138f21d528a3"}, - {file = "rpds_py-0.10.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f7ea49ddf51d5ec0c3cbd95190dd15e077a3153c8d4b22a33da43b5dd2b3c640"}, - {file = "rpds_py-0.10.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c27942722cd5039bbf5098c7e21935a96243fed00ea11a9589f3c6c6424bd84"}, - {file = "rpds_py-0.10.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:08f07150c8ebbdbce1d2d51b8e9f4d588749a2af6a98035485ebe45c7ad9394e"}, - {file = "rpds_py-0.10.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f3331a3684192659fa1090bf2b448db928152fcba08222e58106f44758ef25f7"}, - {file = "rpds_py-0.10.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:efffa359cc69840c8793f0c05a7b663de6afa7b9078fa6c80309ee38b9db677d"}, - {file = "rpds_py-0.10.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:86e8d6ff15fa7a9590c0addaf3ce52fb58bda4299cab2c2d0afa404db6848dab"}, - {file = "rpds_py-0.10.4-cp310-none-win32.whl", hash = "sha256:8f90fc6dd505867514c8b8ef68a712dc0be90031a773c1ae2ad469f04062daef"}, - {file = "rpds_py-0.10.4-cp310-none-win_amd64.whl", hash = "sha256:9f9184744fb800c9f28e155a5896ecb54816296ee79d5d1978be6a2ae60f53c4"}, - {file = "rpds_py-0.10.4-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:72e9b1e92830c876cd49565d8404e4dcc9928302d348ea2517bc3f9e3a873a2a"}, - {file = "rpds_py-0.10.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3650eae998dc718960e90120eb45d42bd57b18b21b10cb9ee05f91bff2345d48"}, - {file = "rpds_py-0.10.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f40413d2859737ce6d95c29ce2dde0ef7cdc3063b5830ae4342fef5922c3bba7"}, - {file = "rpds_py-0.10.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b953d11b544ca5f2705bb77b177d8e17ab1bfd69e0fd99790a11549d2302258c"}, - {file = "rpds_py-0.10.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:28b4942ec7d9d6114c1e08cace0157db92ef674636a38093cab779ace5742d3a"}, - {file = "rpds_py-0.10.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e0e2e01c5f61ddf47e3ed2d1fe1c9136e780ca6222d57a2517b9b02afd4710c"}, - {file = "rpds_py-0.10.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:927e3461dae0c09b1f2e0066e50c1a9204f8a64a3060f596e9a6742d3b307785"}, - {file = "rpds_py-0.10.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8e69bbe0ede8f7fe2616e779421bbdb37f025c802335a90f6416e4d98b368a37"}, - {file = "rpds_py-0.10.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cc688a59c100f038fa9fec9e4ab457c2e2d1fca350fe7ea395016666f0d0a2dc"}, - {file = "rpds_py-0.10.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ec001689402b9104700b50a005c2d3d0218eae90eaa8bdbbd776fe78fe8a74b7"}, - {file = "rpds_py-0.10.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:628fbb8be71a103499d10b189af7764996ab2634ed7b44b423f1e19901606e0e"}, - {file = "rpds_py-0.10.4-cp311-none-win32.whl", hash = "sha256:e3f9c9e5dd8eba4768e15f19044e1b5e216929a43a54b4ab329e103aed9f3eda"}, - {file = "rpds_py-0.10.4-cp311-none-win_amd64.whl", hash = "sha256:3bc561c183684636c0099f9c3fbab8c1671841942edbce784bb01b4707d17924"}, - {file = "rpds_py-0.10.4-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:36ff30385fb9fb3ac23a28bffdd4a230a5229ed5b15704b708b7c84bfb7fce51"}, - {file = "rpds_py-0.10.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:db0589e0bf41ff6ce284ab045ca89f27be1adf19e7bce26c2e7de6739a70c18b"}, - {file = "rpds_py-0.10.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c330cb125983c5d380fef4a4155248a276297c86d64625fdaf500157e1981c"}, - {file = "rpds_py-0.10.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d230fddc60caced271cc038e43e6fb8f4dd6b2dbaa44ac9763f2d76d05b0365a"}, - {file = "rpds_py-0.10.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a9e864ec051a58fdb6bb2e6da03942adb20273897bc70067aee283e62bbac4d"}, - {file = "rpds_py-0.10.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e41d5b334e8de4bc3f38843f31b2afa9a0c472ebf73119d3fd55cde08974bdf"}, - {file = "rpds_py-0.10.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5bb3f3cb6072c73e6ec1f865d8b80419b599f1597acf33f63fbf02252aab5a03"}, - {file = "rpds_py-0.10.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:576d48e1e45c211e99fc02655ade65c32a75d3e383ccfd98ce59cece133ed02c"}, - {file = "rpds_py-0.10.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b28b9668a22ca2cfca4433441ba9acb2899624a323787a509a3dc5fbfa79c49d"}, - {file = "rpds_py-0.10.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:ddbd113a37307638f94be5ae232a325155fd24dbfae2c56455da8724b471e7be"}, - {file = "rpds_py-0.10.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bd0ad98c7d72b0e4cbfe89cdfa12cd07d2fd6ed22864341cdce12b318a383442"}, - {file = "rpds_py-0.10.4-cp312-none-win32.whl", hash = "sha256:2a97406d5e08b7095428f01dac0d3c091dc072351151945a167e7968d2755559"}, - {file = "rpds_py-0.10.4-cp312-none-win_amd64.whl", hash = "sha256:aab24b9bbaa3d49e666e9309556591aa00748bd24ea74257a405f7fed9e8b10d"}, - {file = "rpds_py-0.10.4-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:6c5ca3eb817fb54bfd066740b64a2b31536eb8fe0b183dc35b09a7bd628ed680"}, - {file = "rpds_py-0.10.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fd37ab9a24021821b715478357af1cf369d5a42ac7405e83e5822be00732f463"}, - {file = "rpds_py-0.10.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2573ec23ad3a59dd2bc622befac845695972f3f2d08dc1a4405d017d20a6c225"}, - {file = "rpds_py-0.10.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:362faeae52dc6ccc50c0b6a01fa2ec0830bb61c292033f3749a46040b876f4ba"}, - {file = "rpds_py-0.10.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:40f6e53461b19ddbb3354fe5bcf3d50d4333604ae4bf25b478333d83ca68002c"}, - {file = "rpds_py-0.10.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6090ba604ea06b525a231450ae5d343917a393cbf50423900dea968daf61d16f"}, - {file = "rpds_py-0.10.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28e29dac59df890972f73c511948072897f512974714a803fe793635b80ff8c7"}, - {file = "rpds_py-0.10.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f82abb5c5b83dc30e96be99ce76239a030b62a73a13c64410e429660a5602bfd"}, - {file = "rpds_py-0.10.4-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:a3628815fd170a64624001bfb4e28946fd515bd672e68a1902d9e0290186eaf3"}, - {file = "rpds_py-0.10.4-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:d37f27ad80f742ef82796af3fe091888864958ad0bc8bab03da1830fa00c6004"}, - {file = "rpds_py-0.10.4-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:255a23bded80605e9f3997753e3a4b89c9aec9efb07ec036b1ca81440efcc1a9"}, - {file = "rpds_py-0.10.4-cp38-none-win32.whl", hash = "sha256:049098dabfe705e9638c55a3321137a821399c50940041a6fcce267a22c70db2"}, - {file = "rpds_py-0.10.4-cp38-none-win_amd64.whl", hash = "sha256:aa45cc71bf23a3181b8aa62466b5a2b7b7fb90fdc01df67ca433cd4fce7ec94d"}, - {file = "rpds_py-0.10.4-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:3507c459767cf24c11e9520e2a37c89674266abe8e65453e5cb66398aa47ee7b"}, - {file = "rpds_py-0.10.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2603e084054351cc65097da326570102c4c5bd07426ba8471ceaefdb0b642cc9"}, - {file = "rpds_py-0.10.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0f1d336786cb62613c72c00578c98e5bb8cd57b49c5bae5d4ab906ca7872f98"}, - {file = "rpds_py-0.10.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bf032367f921201deaecf221d4cc895ea84b3decf50a9c73ee106f961885a0ad"}, - {file = "rpds_py-0.10.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7f050ceffd8c730c1619a16bbf0b9cd037dcdb94b54710928ba38c7bde67e4a4"}, - {file = "rpds_py-0.10.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8709eb4ab477c533b7d0a76cd3065d7d95c9e25e6b9f6e27caeeb8c63e8799c9"}, - {file = "rpds_py-0.10.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc20dadb102140dff63529e08ce6f9745dbd36e673ebb2b1c4a63e134bca81c2"}, - {file = "rpds_py-0.10.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cd7da2adc721ccf19ac7ec86cae3a4fcaba03d9c477d5bd64ded6e9bb817bf3f"}, - {file = "rpds_py-0.10.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e5dba1c11e089b526379e74f6c636202e4c5bad9a48c7416502b8a5b0d026c91"}, - {file = "rpds_py-0.10.4-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ffd539d213c1ea2989ab92a5b9371ae7159c8c03cf2bcb9f2f594752f755ecd3"}, - {file = "rpds_py-0.10.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e791e3d13b14d0a7921804d0efe4d7bd15508bbcf8cb7a0c1ee1a27319a5f033"}, - {file = "rpds_py-0.10.4-cp39-none-win32.whl", hash = "sha256:2f2ac8bb01f705c5caaa7fe77ffd9b03f92f1b5061b94228f6ea5eaa0fca68ad"}, - {file = "rpds_py-0.10.4-cp39-none-win_amd64.whl", hash = "sha256:7c7ca791bedda059e5195cf7c6b77384657a51429357cdd23e64ac1d4973d6dc"}, - {file = "rpds_py-0.10.4-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:9c7e7bd1fa1f535af71dfcd3700fc83a6dc261a1204f8f5327d8ffe82e52905d"}, - {file = "rpds_py-0.10.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:7089d8bfa8064b28b2e39f5af7bf12d42f61caed884e35b9b4ea9e6fb1175077"}, - {file = "rpds_py-0.10.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1f191befea279cb9669b57be97ab1785781c8bab805900e95742ebfaa9cbf1d"}, - {file = "rpds_py-0.10.4-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:98c0aecf661c175ce9cb17347fc51a5c98c3e9189ca57e8fcd9348dae18541db"}, - {file = "rpds_py-0.10.4-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d81359911c3bb31c899c6a5c23b403bdc0279215e5b3bc0d2a692489fed38632"}, - {file = "rpds_py-0.10.4-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:83da147124499fe41ed86edf34b4e81e951b3fe28edcc46288aac24e8a5c8484"}, - {file = "rpds_py-0.10.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49db6c0a0e6626c2b97f5e7f8f7074da21cbd8ec73340c25e839a2457c007efa"}, - {file = "rpds_py-0.10.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:125776d5db15162fdd9135372bef7fe4fb7c5f5810cf25898eb74a06a0816aec"}, - {file = "rpds_py-0.10.4-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:32819b662e3b4c26355a4403ea2f60c0a00db45b640fe722dd12db3d2ef807fb"}, - {file = "rpds_py-0.10.4-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:3bd38b80491ef9686f719c1ad3d24d14fbd0e069988fdd4e7d1a6ffcdd7f4a13"}, - {file = "rpds_py-0.10.4-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:2e79eeeff8394284b09577f36316d410525e0cf0133abb3de10660e704d3d38e"}, - {file = "rpds_py-0.10.4-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:3e37f1f134037601eb4b1f46854194f0cc082435dac2ee3de11e51529f7831f2"}, - {file = "rpds_py-0.10.4-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:ba3246c60303eab3d0e562addf25a983d60bddc36f4d1edc2510f056d19df255"}, - {file = "rpds_py-0.10.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9123ba0f3f98ff79780eebca9984a2b525f88563844b740f94cffb9099701230"}, - {file = "rpds_py-0.10.4-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d98802b78093c7083cc51f83da41a5be5a57d406798c9f69424bd75f8ae0812a"}, - {file = "rpds_py-0.10.4-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:58bae860d1d116e6b4e1aad0cdc48a187d5893994f56d26db0c5534df7a47afd"}, - {file = "rpds_py-0.10.4-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd7e62e7d5bcfa38a62d8397fba6d0428b970ab7954c2197501cd1624f7f0bbb"}, - {file = "rpds_py-0.10.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83f5228459b84fa6279e4126a53abfdd73cd9cc183947ee5084153880f65d7"}, - {file = "rpds_py-0.10.4-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4bcb1abecd998a72ad4e36a0fca93577fd0c059a6aacc44f16247031b98f6ff4"}, - {file = "rpds_py-0.10.4-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:9e7b3ad9f53ea9e085b3d27286dd13f8290969c0a153f8a52c8b5c46002c374b"}, - {file = "rpds_py-0.10.4-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:cbec8e43cace64e63398155dc585dc479a89fef1e57ead06c22d3441e1bd09c3"}, - {file = "rpds_py-0.10.4-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ad21c60fc880204798f320387164dcacc25818a7b4ec2a0bf6b6c1d57b007d23"}, - {file = "rpds_py-0.10.4-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:6baea8a4f6f01e69e75cfdef3edd4a4d1c4b56238febbdf123ce96d09fbff010"}, - {file = "rpds_py-0.10.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:94876c21512535955a960f42a155213315e6ab06a4ce8ce372341a2a1b143eeb"}, - {file = "rpds_py-0.10.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4cb55454a20d1b935f9eaab52e6ceab624a2efd8b52927c7ae7a43e02828dbe0"}, - {file = "rpds_py-0.10.4-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:13cbd79ccedc6b39c279af31ebfb0aec0467ad5d14641ddb15738bf6e4146157"}, - {file = "rpds_py-0.10.4-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:00a88003db3cc953f8656b59fc9af9d0637a1fb93c235814007988f8c153b2f2"}, - {file = "rpds_py-0.10.4-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0f7f77a77c37159c9f417b8dd847f67a29e98c6acb52ee98fc6b91efbd1b2b6"}, - {file = "rpds_py-0.10.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70563a1596d2e0660ca2cebb738443437fc0e38597e7cbb276de0a7363924a52"}, - {file = "rpds_py-0.10.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e3ece9aa6d07e18c966f14b4352a4c6f40249f6174d3d2c694c1062e19c6adbb"}, - {file = "rpds_py-0.10.4-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:d5ad7b1a1f6964d19b1a8acfc14bf7864f39587b3e25c16ca04f6cd1815026b3"}, - {file = "rpds_py-0.10.4-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:60018626e637528a1fa64bb3a2b3e46ab7bf672052316d61c3629814d5e65052"}, - {file = "rpds_py-0.10.4-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ae8a32ab77a84cc870bbfb60645851ca0f7d58fd251085ad67464b1445d632ca"}, - {file = "rpds_py-0.10.4.tar.gz", hash = "sha256:18d5ff7fbd305a1d564273e9eb22de83ae3cd9cd6329fddc8f12f6428a711a6a"}, + {file = "rpds_py-0.10.6-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:6bdc11f9623870d75692cc33c59804b5a18d7b8a4b79ef0b00b773a27397d1f6"}, + {file = "rpds_py-0.10.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:26857f0f44f0e791f4a266595a7a09d21f6b589580ee0585f330aaccccb836e3"}, + {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7f5e15c953ace2e8dde9824bdab4bec50adb91a5663df08d7d994240ae6fa31"}, + {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:61fa268da6e2e1cd350739bb61011121fa550aa2545762e3dc02ea177ee4de35"}, + {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c48f3fbc3e92c7dd6681a258d22f23adc2eb183c8cb1557d2fcc5a024e80b094"}, + {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0503c5b681566e8b722fe8c4c47cce5c7a51f6935d5c7012c4aefe952a35eed"}, + {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:734c41f9f57cc28658d98270d3436dba65bed0cfc730d115b290e970150c540d"}, + {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a5d7ed104d158c0042a6a73799cf0eb576dfd5fc1ace9c47996e52320c37cb7c"}, + {file = "rpds_py-0.10.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e3df0bc35e746cce42579826b89579d13fd27c3d5319a6afca9893a9b784ff1b"}, + {file = "rpds_py-0.10.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:73e0a78a9b843b8c2128028864901f55190401ba38aae685350cf69b98d9f7c9"}, + {file = "rpds_py-0.10.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5ed505ec6305abd2c2c9586a7b04fbd4baf42d4d684a9c12ec6110deefe2a063"}, + {file = "rpds_py-0.10.6-cp310-none-win32.whl", hash = "sha256:d97dd44683802000277bbf142fd9f6b271746b4846d0acaf0cefa6b2eaf2a7ad"}, + {file = "rpds_py-0.10.6-cp310-none-win_amd64.whl", hash = "sha256:b455492cab07107bfe8711e20cd920cc96003e0da3c1f91297235b1603d2aca7"}, + {file = "rpds_py-0.10.6-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:e8cdd52744f680346ff8c1ecdad5f4d11117e1724d4f4e1874f3a67598821069"}, + {file = "rpds_py-0.10.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:66414dafe4326bca200e165c2e789976cab2587ec71beb80f59f4796b786a238"}, + {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc435d059f926fdc5b05822b1be4ff2a3a040f3ae0a7bbbe672babb468944722"}, + {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8e7f2219cb72474571974d29a191714d822e58be1eb171f229732bc6fdedf0ac"}, + {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3953c6926a63f8ea5514644b7afb42659b505ece4183fdaaa8f61d978754349e"}, + {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2bb2e4826be25e72013916eecd3d30f66fd076110de09f0e750163b416500721"}, + {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bf347b495b197992efc81a7408e9a83b931b2f056728529956a4d0858608b80"}, + {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:102eac53bb0bf0f9a275b438e6cf6904904908562a1463a6fc3323cf47d7a532"}, + {file = "rpds_py-0.10.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:40f93086eef235623aa14dbddef1b9fb4b22b99454cb39a8d2e04c994fb9868c"}, + {file = "rpds_py-0.10.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e22260a4741a0e7a206e175232867b48a16e0401ef5bce3c67ca5b9705879066"}, + {file = "rpds_py-0.10.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f4e56860a5af16a0fcfa070a0a20c42fbb2012eed1eb5ceeddcc7f8079214281"}, + {file = "rpds_py-0.10.6-cp311-none-win32.whl", hash = "sha256:0774a46b38e70fdde0c6ded8d6d73115a7c39d7839a164cc833f170bbf539116"}, + {file = "rpds_py-0.10.6-cp311-none-win_amd64.whl", hash = "sha256:4a5ee600477b918ab345209eddafde9f91c0acd931f3776369585a1c55b04c57"}, + {file = "rpds_py-0.10.6-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:5ee97c683eaface61d38ec9a489e353d36444cdebb128a27fe486a291647aff6"}, + {file = "rpds_py-0.10.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0713631d6e2d6c316c2f7b9320a34f44abb644fc487b77161d1724d883662e31"}, + {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5a53f5998b4bbff1cb2e967e66ab2addc67326a274567697379dd1e326bded7"}, + {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6a555ae3d2e61118a9d3e549737bb4a56ff0cec88a22bd1dfcad5b4e04759175"}, + {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:945eb4b6bb8144909b203a88a35e0a03d22b57aefb06c9b26c6e16d72e5eb0f0"}, + {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:52c215eb46307c25f9fd2771cac8135d14b11a92ae48d17968eda5aa9aaf5071"}, + {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1b3cd23d905589cb205710b3988fc8f46d4a198cf12862887b09d7aaa6bf9b9"}, + {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64ccc28683666672d7c166ed465c09cee36e306c156e787acef3c0c62f90da5a"}, + {file = "rpds_py-0.10.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:516a611a2de12fbea70c78271e558f725c660ce38e0006f75139ba337d56b1f6"}, + {file = "rpds_py-0.10.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9ff93d3aedef11f9c4540cf347f8bb135dd9323a2fc705633d83210d464c579d"}, + {file = "rpds_py-0.10.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d858532212f0650be12b6042ff4378dc2efbb7792a286bee4489eaa7ba010586"}, + {file = "rpds_py-0.10.6-cp312-none-win32.whl", hash = "sha256:3c4eff26eddac49d52697a98ea01b0246e44ca82ab09354e94aae8823e8bda02"}, + {file = "rpds_py-0.10.6-cp312-none-win_amd64.whl", hash = "sha256:150eec465dbc9cbca943c8e557a21afdcf9bab8aaabf386c44b794c2f94143d2"}, + {file = "rpds_py-0.10.6-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:cf693eb4a08eccc1a1b636e4392322582db2a47470d52e824b25eca7a3977b53"}, + {file = "rpds_py-0.10.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4134aa2342f9b2ab6c33d5c172e40f9ef802c61bb9ca30d21782f6e035ed0043"}, + {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e782379c2028a3611285a795b89b99a52722946d19fc06f002f8b53e3ea26ea9"}, + {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2f6da6d842195fddc1cd34c3da8a40f6e99e4a113918faa5e60bf132f917c247"}, + {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4a9fe992887ac68256c930a2011255bae0bf5ec837475bc6f7edd7c8dfa254e"}, + {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b788276a3c114e9f51e257f2a6f544c32c02dab4aa7a5816b96444e3f9ffc336"}, + {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:caa1afc70a02645809c744eefb7d6ee8fef7e2fad170ffdeacca267fd2674f13"}, + {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bddd4f91eede9ca5275e70479ed3656e76c8cdaaa1b354e544cbcf94c6fc8ac4"}, + {file = "rpds_py-0.10.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:775049dfa63fb58293990fc59473e659fcafd953bba1d00fc5f0631a8fd61977"}, + {file = "rpds_py-0.10.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:c6c45a2d2b68c51fe3d9352733fe048291e483376c94f7723458cfd7b473136b"}, + {file = "rpds_py-0.10.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0699ab6b8c98df998c3eacf51a3b25864ca93dab157abe358af46dc95ecd9801"}, + {file = "rpds_py-0.10.6-cp38-none-win32.whl", hash = "sha256:ebdab79f42c5961682654b851f3f0fc68e6cc7cd8727c2ac4ffff955154123c1"}, + {file = "rpds_py-0.10.6-cp38-none-win_amd64.whl", hash = "sha256:24656dc36f866c33856baa3ab309da0b6a60f37d25d14be916bd3e79d9f3afcf"}, + {file = "rpds_py-0.10.6-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:0898173249141ee99ffcd45e3829abe7bcee47d941af7434ccbf97717df020e5"}, + {file = "rpds_py-0.10.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9e9184fa6c52a74a5521e3e87badbf9692549c0fcced47443585876fcc47e469"}, + {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5752b761902cd15073a527b51de76bbae63d938dc7c5c4ad1e7d8df10e765138"}, + {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:99a57006b4ec39dbfb3ed67e5b27192792ffb0553206a107e4aadb39c5004cd5"}, + {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09586f51a215d17efdb3a5f090d7cbf1633b7f3708f60a044757a5d48a83b393"}, + {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e225a6a14ecf44499aadea165299092ab0cba918bb9ccd9304eab1138844490b"}, + {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2039f8d545f20c4e52713eea51a275e62153ee96c8035a32b2abb772b6fc9e5"}, + {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:34ad87a831940521d462ac11f1774edf867c34172010f5390b2f06b85dcc6014"}, + {file = "rpds_py-0.10.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dcdc88b6b01015da066da3fb76545e8bb9a6880a5ebf89e0f0b2e3ca557b3ab7"}, + {file = "rpds_py-0.10.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:25860ed5c4e7f5e10c496ea78af46ae8d8468e0be745bd233bab9ca99bfd2647"}, + {file = "rpds_py-0.10.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7854a207ef77319ec457c1eb79c361b48807d252d94348305db4f4b62f40f7f3"}, + {file = "rpds_py-0.10.6-cp39-none-win32.whl", hash = "sha256:e6fcc026a3f27c1282c7ed24b7fcac82cdd70a0e84cc848c0841a3ab1e3dea2d"}, + {file = "rpds_py-0.10.6-cp39-none-win_amd64.whl", hash = "sha256:e98c4c07ee4c4b3acf787e91b27688409d918212dfd34c872201273fdd5a0e18"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:68fe9199184c18d997d2e4293b34327c0009a78599ce703e15cd9a0f47349bba"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:3339eca941568ed52d9ad0f1b8eb9fe0958fa245381747cecf2e9a78a5539c42"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a360cfd0881d36c6dc271992ce1eda65dba5e9368575663de993eeb4523d895f"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:031f76fc87644a234883b51145e43985aa2d0c19b063e91d44379cd2786144f8"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f36a9d751f86455dc5278517e8b65580eeee37d61606183897f122c9e51cef3"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:052a832078943d2b2627aea0d19381f607fe331cc0eb5df01991268253af8417"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:023574366002bf1bd751ebaf3e580aef4a468b3d3c216d2f3f7e16fdabd885ed"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:defa2c0c68734f4a82028c26bcc85e6b92cced99866af118cd6a89b734ad8e0d"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:879fb24304ead6b62dbe5034e7b644b71def53c70e19363f3c3be2705c17a3b4"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:53c43e10d398e365da2d4cc0bcaf0854b79b4c50ee9689652cdc72948e86f487"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:3777cc9dea0e6c464e4b24760664bd8831738cc582c1d8aacf1c3f546bef3f65"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:40578a6469e5d1df71b006936ce95804edb5df47b520c69cf5af264d462f2cbb"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:cf71343646756a072b85f228d35b1d7407da1669a3de3cf47f8bbafe0c8183a4"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10f32b53f424fc75ff7b713b2edb286fdbfc94bf16317890260a81c2c00385dc"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:81de24a1c51cfb32e1fbf018ab0bdbc79c04c035986526f76c33e3f9e0f3356c"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac17044876e64a8ea20ab132080ddc73b895b4abe9976e263b0e30ee5be7b9c2"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e8a78bd4879bff82daef48c14d5d4057f6856149094848c3ed0ecaf49f5aec2"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78ca33811e1d95cac8c2e49cb86c0fb71f4d8409d8cbea0cb495b6dbddb30a55"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c63c3ef43f0b3fb00571cff6c3967cc261c0ebd14a0a134a12e83bdb8f49f21f"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:7fde6d0e00b2fd0dbbb40c0eeec463ef147819f23725eda58105ba9ca48744f4"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:79edd779cfc46b2e15b0830eecd8b4b93f1a96649bcb502453df471a54ce7977"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:9164ec8010327ab9af931d7ccd12ab8d8b5dc2f4c6a16cbdd9d087861eaaefa1"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d29ddefeab1791e3c751e0189d5f4b3dbc0bbe033b06e9c333dca1f99e1d523e"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:30adb75ecd7c2a52f5e76af50644b3e0b5ba036321c390b8e7ec1bb2a16dd43c"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd609fafdcdde6e67a139898196698af37438b035b25ad63704fd9097d9a3482"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6eef672de005736a6efd565577101277db6057f65640a813de6c2707dc69f396"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6cf4393c7b41abbf07c88eb83e8af5013606b1cdb7f6bc96b1b3536b53a574b8"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad857f42831e5b8d41a32437f88d86ead6c191455a3499c4b6d15e007936d4cf"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d7360573f1e046cb3b0dceeb8864025aa78d98be4bb69f067ec1c40a9e2d9df"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d08f63561c8a695afec4975fae445245386d645e3e446e6f260e81663bfd2e38"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:f0f17f2ce0f3529177a5fff5525204fad7b43dd437d017dd0317f2746773443d"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:442626328600bde1d09dc3bb00434f5374948838ce75c41a52152615689f9403"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e9616f5bd2595f7f4a04b67039d890348ab826e943a9bfdbe4938d0eba606971"}, + {file = "rpds_py-0.10.6.tar.gz", hash = "sha256:4ce5a708d65a8dbf3748d2474b580d606b1b9f91b5c6ab2a316e0b0cf7a4ba50"}, ] [[package]] @@ -2667,12 +2830,20 @@ files = [ {file = "statsmodels-0.14.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5a6a0a1a06ff79be8aa89c8494b33903442859add133f0dda1daf37c3c71682e"}, {file = "statsmodels-0.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77b3cd3a5268ef966a0a08582c591bd29c09c88b4566c892a7c087935234f285"}, {file = "statsmodels-0.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c64ebe9cf376cba0c31aed138e15ed179a1d128612dd241cdf299d159e5e882"}, + {file = "statsmodels-0.14.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:229b2f676b4a45cb62d132a105c9c06ca8a09ffba060abe34935391eb5d9ba87"}, {file = "statsmodels-0.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb471f757fc45102a87e5d86e87dc2c8c78b34ad4f203679a46520f1d863b9da"}, {file = "statsmodels-0.14.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:582f9e41092e342aaa04920d17cc3f97240e3ee198672f194719b5a3d08657d6"}, {file = "statsmodels-0.14.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7ebe885ccaa64b4bc5ad49ac781c246e7a594b491f08ab4cfd5aa456c363a6f6"}, {file = "statsmodels-0.14.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b587ee5d23369a0e881da6e37f78371dce4238cf7638a455db4b633a1a1c62d6"}, {file = "statsmodels-0.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ef7fa4813c7a73b0d8a0c830250f021c102c71c95e9fe0d6877bcfb56d38b8c"}, + {file = "statsmodels-0.14.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:afe80544ef46730ea1b11cc655da27038bbaa7159dc5af4bc35bbc32982262f2"}, {file = "statsmodels-0.14.0-cp311-cp311-win_amd64.whl", hash = "sha256:a6ad7b8aadccd4e4dd7f315a07bef1bca41d194eeaf4ec600d20dea02d242fce"}, + {file = "statsmodels-0.14.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:0eea4a0b761aebf0c355b726ac5616b9a8b618bd6e81a96b9f998a61f4fd7484"}, + {file = "statsmodels-0.14.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4c815ce7a699047727c65a7c179bff4031cff9ae90c78ca730cfd5200eb025dd"}, + {file = "statsmodels-0.14.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:575f61337c8e406ae5fa074d34bc6eb77b5a57c544b2d4ee9bc3da6a0a084cf1"}, + {file = "statsmodels-0.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8be53cdeb82f49c4cb0fda6d7eeeb2d67dbd50179b3e1033510e061863720d93"}, + {file = "statsmodels-0.14.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:6f7d762df4e04d1dde8127d07e91aff230eae643aa7078543e60e83e7d5b40db"}, + {file = "statsmodels-0.14.0-cp312-cp312-win_amd64.whl", hash = "sha256:fc2c7931008a911e3060c77ea8933f63f7367c0f3af04f82db3a04808ad2cd2c"}, {file = "statsmodels-0.14.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3757542c95247e4ab025291a740efa5da91dc11a05990c033d40fce31c450dc9"}, {file = "statsmodels-0.14.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:de489e3ed315bdba55c9d1554a2e89faa65d212e365ab81bc323fa52681fc60e"}, {file = "statsmodels-0.14.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76e290f4718177bffa8823a780f3b882d56dd64ad1c18cfb4bc8b5558f3f5757"}, @@ -2688,8 +2859,8 @@ files = [ [package.dependencies] numpy = [ - {version = ">=1.22.3", markers = "python_version == \"3.10\" and platform_system == \"Windows\" and platform_python_implementation != \"PyPy\""}, {version = ">=1.18", markers = "python_version != \"3.10\" or platform_system != \"Windows\" or platform_python_implementation == \"PyPy\""}, + {version = ">=1.22.3", markers = "python_version == \"3.10\" and platform_system == \"Windows\" and platform_python_implementation != \"PyPy\""}, ] packaging = ">=21.3" pandas = ">=1.0" @@ -2903,13 +3074,13 @@ six = "*" [[package]] name = "urllib3" -version = "1.26.17" +version = "1.26.18" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ - {file = "urllib3-1.26.17-py2.py3-none-any.whl", hash = "sha256:94a757d178c9be92ef5539b8840d48dc9cf1b2709c9d6b588232a055c524458b"}, - {file = "urllib3-1.26.17.tar.gz", hash = "sha256:24d6a242c28d29af46c3fae832c36db3bbebcc533dd1bb549172cd739c82df21"}, + {file = "urllib3-1.26.18-py2.py3-none-any.whl", hash = "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07"}, + {file = "urllib3-1.26.18.tar.gz", hash = "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"}, ] [package.extras] @@ -3265,13 +3436,13 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.link 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"] [extras] -all = ["openbb-alpha-vantage", "openbb-cboe", "openbb-charting", "openbb-econometrics", "openbb-futures", "openbb-oecd", "openbb-qa", "openbb-quandl", "openbb-ta", "openbb-yfinance"] +all = ["openbb-alpha-vantage", "openbb-biztoc", "openbb-cboe", "openbb-charting", "openbb-econometrics", "openbb-futures", "openbb-qa", "openbb-quandl", "openbb-ta", "openbb-yfinance"] alpha-vantage = ["openbb-alpha-vantage"] +biztoc = ["openbb-biztoc"] cboe = ["openbb-cboe"] charting = ["openbb-charting"] econometrics = ["openbb-econometrics"] futures = ["openbb-futures"] -oecd = ["openbb-oecd"] qa = ["openbb-qa"] quandl = ["openbb-quandl"] ta = ["openbb-ta"] @@ -3280,4 +3451,4 @@ yfinance = ["openbb-yfinance"] [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.12" -content-hash = "569aba76bee8aab670525bf53ed6baeaf35577ae694dd15054a4e32c0fc0f4f2" +content-hash = "ae7575359a4657ad0c34ab7209e9469d54af78b1e57e8e338aee1e6d0fe0620f" diff --git a/openbb_platform/providers/biztoc/README.md b/openbb_platform/providers/biztoc/README.md new file mode 100644 index 000000000000..b929315cf378 --- /dev/null +++ b/openbb_platform/providers/biztoc/README.md @@ -0,0 +1,12 @@ +# OpenBB Biztoc Provider + +This extension integrates the Biztoc data provider +into the OpenBB Platform. + +## Installation + +To install the extension, run the following command in this folder: + +```bash +pip install . +``` diff --git a/openbb_platform/providers/biztoc/__init__.py b/openbb_platform/providers/biztoc/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/openbb_platform/providers/biztoc/openbb_biztoc/__init__.py b/openbb_platform/providers/biztoc/openbb_biztoc/__init__.py new file mode 100644 index 000000000000..37cb17bf291d --- /dev/null +++ b/openbb_platform/providers/biztoc/openbb_biztoc/__init__.py @@ -0,0 +1,22 @@ +"""Biztoc provider module.""" + +from openbb_biztoc.models.global_news import BiztocGlobalNewsFetcher +from openbb_provider.abstract.provider import Provider + +biztoc_provider = Provider( + name="biztoc", + website="https://api.biztoc.com/#biztoc-default", + description="""BizToc uses Rapid API for its REST API. + You may sign up for your free account at https://rapidapi.com/thma/api/biztoc. + + The Base URL for all requests is: + + https://biztoc.p.rapidapi.com/ + + If you're not a developer but would still like to use Biztoc outside of the main website, + we've partnered with OpenBB, allowing you to pull in BizToc's news stream in their Terminal.""", + required_credentials=["api_key"], + fetcher_dict={ + "GlobalNews": BiztocGlobalNewsFetcher, + }, +) diff --git a/openbb_platform/providers/biztoc/openbb_biztoc/models/__init__.py b/openbb_platform/providers/biztoc/openbb_biztoc/models/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/openbb_platform/providers/biztoc/openbb_biztoc/models/global_news.py b/openbb_platform/providers/biztoc/openbb_biztoc/models/global_news.py new file mode 100644 index 000000000000..0895eafb8140 --- /dev/null +++ b/openbb_platform/providers/biztoc/openbb_biztoc/models/global_news.py @@ -0,0 +1,107 @@ +"""Biztoc Globl News Fetcher.""" +from datetime import datetime, timedelta +from typing import Any, Dict, List, Literal, Optional + +from openbb_biztoc.utils.helpers import get_news +from openbb_provider.abstract.fetcher import Fetcher +from openbb_provider.standard_models.global_news import ( + GlobalNewsData, + GlobalNewsQueryParams, +) +from pandas import to_datetime +from pydantic import Field, field_validator + + +class BiztocGlobalNewsQueryParams(GlobalNewsQueryParams): + """Biztoc Global News QueryParams.""" + + filter: Literal[ + "crypto", "hot", "latest", "main", "media", "source", "tag" + ] = Field(default="latest", description="Filter by type of news.") + source: str = Field( + description="Filter by a specific publisher. Only valid when filter is set to source.", + default="bloomberg", + ) + tag: Optional[str] = Field( + description="Tag, topic, to filter articles by. Only valid when filter is set to tag.", + default=None, + ) + term: Optional[str] = Field( + description="Search term to filter articles by. This overrides all other filters.", + default=None, + ) + + +class BiztocGlobalNewsData(GlobalNewsData): + """Biztoc Global News Data.""" + + __alias_dict__ = {"date": "created", "text": "body", "site": "domain"} + + images: Optional[Dict[str, str]] = Field( + description="Images for the article.", alias="images", default=None + ) + favicon: Optional[str] = Field( + description="Icon image for the source of the article.", default=None + ) + tags: Optional[List[str]] = Field(description="Tags for the article.", default=None) + id: Optional[str] = Field(description="Unique Article ID.", default=None) + score: Optional[float] = Field( + description="Search relevance score for the article.", default=None + ) + + @field_validator("date", "updated", mode="before", check_fields=False) + def date_validate(cls, v): # pylint: disable=E0213 + """Return formatted datetime.""" + return to_datetime(v).strftime("%Y-%m-%d %H:%M:%S") + + +class BiztocGlobalNewsFetcher( + Fetcher[ + BiztocGlobalNewsQueryParams, + List[BiztocGlobalNewsData], + ] +): + """Transform the query, extract and transform the data from the Biztoc endpoints.""" + + @staticmethod + def transform_query(params: Dict[str, Any]) -> BiztocGlobalNewsQueryParams: + """Transform the query.""" + return BiztocGlobalNewsQueryParams(**params) + + @staticmethod + def extract_data( + query: BiztocGlobalNewsQueryParams, + credentials: Optional[Dict[str, str]], + **kwargs: Any, + ) -> List[Dict]: + """Extract the data from the Biztoc endpoint.""" + + api_key = credentials.get("biztoc_api_key") if credentials else "" + + data = get_news( + api_key=api_key, filter=query.filter, source=query.source, tag=query.tag, term=query.term # type: ignore + ) + if query.filter == "hot": + _data = [] + for i in range(0, len(data)): + _posts = data[i]["posts"] + _data.extend(_posts) + data = _data + + times = {"2 Hours Ago": 2, "4 Hours Ago": 4} + # Drop 'body_preview' because it is always nan, empty string, or empty string with space. + for i in range(0, len(data)): + if "body_preview" in data[i]: + data[i].pop("body_preview") + # Some items when filter is 'hot' don't have a proper timestamp, only a label. + if "created" in data[i] and data[i]["created"] in times: + data[i]["created"] = datetime.now() - timedelta( + hours=times[data[i]["created"]] + ) + + return data + + @staticmethod + def transform_data(data: List[Dict], **kwargs: Any) -> List[BiztocGlobalNewsData]: + """Transform the data to the standard format.""" + return [BiztocGlobalNewsData.model_validate(d) for d in data] diff --git a/openbb_platform/providers/biztoc/openbb_biztoc/utils/__init__.py b/openbb_platform/providers/biztoc/openbb_biztoc/utils/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/openbb_platform/providers/biztoc/openbb_biztoc/utils/helpers.py b/openbb_platform/providers/biztoc/openbb_biztoc/utils/helpers.py new file mode 100644 index 000000000000..c618915eec14 --- /dev/null +++ b/openbb_platform/providers/biztoc/openbb_biztoc/utils/helpers.py @@ -0,0 +1,135 @@ +from datetime import timedelta +from typing import Dict, List, Literal + +import requests +import requests_cache + + +def get_sources(api_key: str) -> List[Dict]: + """Valid sources for Biztoc queries.""" + + biztoc_session_sources = requests_cache.CachedSession( + "OpenBB_Biztoc_Pages", expire_after=timedelta(days=3), use_cache_dir=True + ) + headers = { + "X-RapidAPI-Key": f"{api_key}", + "X-RapidAPI-Host": "biztoc.p.rapidapi.com", + "Accept": "application/json", + "Accept-Encoding": "gzip", + } + sources = biztoc_session_sources.get( + "https://biztoc.p.rapidapi.com/sources", headers=headers, timeout=10 + ) + + return sources.json() + + +def get_pages(api_key: str) -> List[str]: + """Valid pages for Biztoc queries.""" + + biztoc_session_pages = requests_cache.CachedSession( + "OpenBB_Biztoc_Pages", expire_after=timedelta(days=3), use_cache_dir=True + ) + headers = { + "X-RapidAPI-Key": f"{api_key}", + "X-RapidAPI-Host": "biztoc.p.rapidapi.com", + "Accept": "application/json", + "Accept-Encoding": "gzip", + } + pages = biztoc_session_pages.get( + "https://biztoc.p.rapidapi.com/pages", headers=headers, timeout=10 + ) + + return pages.json() + + +def get_tags_by_page(page_id: str, api_key: str) -> List[str]: + """Valid tags required for Biztoc queries.""" + + biztoc_session_tags = requests_cache.CachedSession( + "OpenBB_Biztoc_Tags", expire_after=timedelta(days=1), use_cache_dir=True + ) + headers = { + "X-RapidAPI-Key": f"{api_key}", + "X-RapidAPI-Host": "biztoc.p.rapidapi.com", + "Accept": "application/json", + "Accept-Encoding": "gzip", + } + tags = biztoc_session_tags.get( + f"https://biztoc.p.rapidapi.com/tags/{page_id}", headers=headers, timeout=10 + ) + + return tags.json() + + +def get_all_tags(api_key) -> Dict[str, List[str]]: + tags: Dict[str, List[str]] = {} + + pages = get_pages(api_key) + for page in pages: + page_tags = get_tags_by_page(page, api_key) + tags.update({page: [x["tag"] for x in page_tags]}) + + return tags + + +def get_news( + api_key: str, + filter: Literal[ + "crypto", "hot", "latest", "main", "media", "source", "tag" + ] = "latest", + source: str = "bloomberg", + tag: str = "", + term: str = "", +) -> List[Dict]: + """Calls the BizToc API and returns the data.""" + + results = [] + term = term.replace(" ", "%20") if term else "" + _tags = get_all_tags(api_key) + pages = get_pages(api_key) + tags = [] + tag = tag.lower() if tag else "" + for page in pages: + tags.extend(_tags[page][:]) + + _sources = get_sources(api_key) + sources = sorted([i["id"] for i in _sources]) + + headers = { + "X-RapidAPI-Key": f"{api_key}", + "X-RapidAPI-Host": "biztoc.p.rapidapi.com", + "Accept": "application/json", + "Accept-Encoding": "gzip", + } + + filter_dict = { + "hot": "news/hot", + "latest": "news/latest", + "crypto": "news/latest/crypto", + "main": "news/latest/main", + "media": "news/latest/media", + "source": f"news/source/{source.lower()}", + "tag": f"tag/{tag}", + } + if filter == "source" and source.lower() not in sources: + raise ValueError(f"{source} not a valid source. Valid sources: {sources}") + + if filter == "tag" and tag.lower().replace(" ", "") not in tags: + raise ValueError(f"{tag} not a valid tag. Valid tags: {tags}") + + url = ( + f"https://biztoc.p.rapidapi.com/search?q={term}" + if term + else f"https://biztoc.p.rapidapi.com/{filter_dict[filter]}" + ) + r = requests.get(url, headers=headers, timeout=5) + if r.status_code != 200: + raise RuntimeError(f"HTTP error - > {r.text}") + + try: + results = r.json() + except Exception as e: + raise (e) + + return results diff --git a/openbb_platform/providers/biztoc/poetry.lock b/openbb_platform/providers/biztoc/poetry.lock new file mode 100644 index 000000000000..20997b62f2e1 --- /dev/null +++ b/openbb_platform/providers/biztoc/poetry.lock @@ -0,0 +1,1501 @@ +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. + +[[package]] +name = "annotated-types" +version = "0.6.0" +description = "Reusable constraint types to use with typing.Annotated" +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" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.7" +files = [ + {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"}, + {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"}, +] + +[package.dependencies] +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" + +[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)"] + +[[package]] +name = "attrs" +version = "23.1.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.7" +files = [ + {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, + {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, +] + +[package.extras] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] + +[[package]] +name = "backoff" +version = "2.2.1" +description = "Function decoration for backoff and retry" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"}, + {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, +] + +[[package]] +name = "cattrs" +version = "23.1.2" +description = "Composable complex class support for attrs and dataclasses." +optional = false +python-versions = ">=3.7" +files = [ + {file = "cattrs-23.1.2-py3-none-any.whl", hash = "sha256:b2bb14311ac17bed0d58785e5a60f022e5431aca3932e3fc5cc8ed8639de50a4"}, + {file = "cattrs-23.1.2.tar.gz", hash = "sha256:db1c821b8c537382b2c7c66678c3790091ca0275ac486c76f3c8f3920e83c657"}, +] + +[package.dependencies] +attrs = ">=20" +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +typing_extensions = {version = ">=4.1.0", markers = "python_version < \"3.11\""} + +[package.extras] +bson = ["pymongo (>=4.2.0,<5.0.0)"] +cbor2 = ["cbor2 (>=5.4.6,<6.0.0)"] +msgpack = ["msgpack (>=1.0.2,<2.0.0)"] +orjson = ["orjson (>=3.5.2,<4.0.0)"] +pyyaml = ["PyYAML (>=6.0,<7.0)"] +tomlkit = ["tomlkit (>=0.11.4,<0.12.0)"] +ujson = ["ujson (>=5.4.0,<6.0.0)"] + +[[package]] +name = "certifi" +version = "2023.7.22" +description = "Python package for providing Mozilla's CA Bundle." +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"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.3.0" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.3.0.tar.gz", hash = "sha256:63563193aec44bce707e0c5ca64ff69fa72ed7cf34ce6e11d5127555756fd2f6"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:effe5406c9bd748a871dbcaf3ac69167c38d72db8c9baf3ff954c344f31c4cbe"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4162918ef3098851fcd8a628bf9b6a98d10c380725df9e04caf5ca6dd48c847a"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0570d21da019941634a531444364f2482e8db0b3425fcd5ac0c36565a64142c8"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5707a746c6083a3a74b46b3a631d78d129edab06195a92a8ece755aac25a3f3d"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:278c296c6f96fa686d74eb449ea1697f3c03dc28b75f873b65b5201806346a69"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a4b71f4d1765639372a3b32d2638197f5cd5221b19531f9245fcc9ee62d38f56"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5969baeaea61c97efa706b9b107dcba02784b1601c74ac84f2a532ea079403e"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3f93dab657839dfa61025056606600a11d0b696d79386f974e459a3fbc568ec"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:db756e48f9c5c607b5e33dd36b1d5872d0422e960145b08ab0ec7fd420e9d649"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:232ac332403e37e4a03d209a3f92ed9071f7d3dbda70e2a5e9cff1c4ba9f0678"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e5c1502d4ace69a179305abb3f0bb6141cbe4714bc9b31d427329a95acfc8bdd"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:2502dd2a736c879c0f0d3e2161e74d9907231e25d35794584b1ca5284e43f596"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23e8565ab7ff33218530bc817922fae827420f143479b753104ab801145b1d5b"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-win32.whl", hash = "sha256:1872d01ac8c618a8da634e232f24793883d6e456a66593135aeafe3784b0848d"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:557b21a44ceac6c6b9773bc65aa1b4cc3e248a5ad2f5b914b91579a32e22204d"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d7eff0f27edc5afa9e405f7165f85a6d782d308f3b6b9d96016c010597958e63"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6a685067d05e46641d5d1623d7c7fdf15a357546cbb2f71b0ebde91b175ffc3e"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0d3d5b7db9ed8a2b11a774db2bbea7ba1884430a205dbd54a32d61d7c2a190fa"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2935ffc78db9645cb2086c2f8f4cfd23d9b73cc0dc80334bc30aac6f03f68f8c"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fe359b2e3a7729010060fbca442ca225280c16e923b37db0e955ac2a2b72a05"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380c4bde80bce25c6e4f77b19386f5ec9db230df9f2f2ac1e5ad7af2caa70459"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0d1e3732768fecb052d90d62b220af62ead5748ac51ef61e7b32c266cac9293"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1b2919306936ac6efb3aed1fbf81039f7087ddadb3160882a57ee2ff74fd2382"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f8888e31e3a85943743f8fc15e71536bda1c81d5aa36d014a3c0c44481d7db6e"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:82eb849f085624f6a607538ee7b83a6d8126df6d2f7d3b319cb837b289123078"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7b8b8bf1189b3ba9b8de5c8db4d541b406611a71a955bbbd7385bbc45fcb786c"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5adf257bd58c1b8632046bbe43ee38c04e1038e9d37de9c57a94d6bd6ce5da34"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c350354efb159b8767a6244c166f66e67506e06c8924ed74669b2c70bc8735b1"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-win32.whl", hash = "sha256:02af06682e3590ab952599fbadac535ede5d60d78848e555aa58d0c0abbde786"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:86d1f65ac145e2c9ed71d8ffb1905e9bba3a91ae29ba55b4c46ae6fc31d7c0d4"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3b447982ad46348c02cb90d230b75ac34e9886273df3a93eec0539308a6296d7"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:abf0d9f45ea5fb95051c8bfe43cb40cda383772f7e5023a83cc481ca2604d74e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b09719a17a2301178fac4470d54b1680b18a5048b481cb8890e1ef820cb80455"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3d9b48ee6e3967b7901c052b670c7dda6deb812c309439adaffdec55c6d7b78"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:edfe077ab09442d4ef3c52cb1f9dab89bff02f4524afc0acf2d46be17dc479f5"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3debd1150027933210c2fc321527c2299118aa929c2f5a0a80ab6953e3bd1908"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86f63face3a527284f7bb8a9d4f78988e3c06823f7bea2bd6f0e0e9298ca0403"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:24817cb02cbef7cd499f7c9a2735286b4782bd47a5b3516a0e84c50eab44b98e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c71f16da1ed8949774ef79f4a0260d28b83b3a50c6576f8f4f0288d109777989"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9cf3126b85822c4e53aa28c7ec9869b924d6fcfb76e77a45c44b83d91afd74f9"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:b3b2316b25644b23b54a6f6401074cebcecd1244c0b8e80111c9a3f1c8e83d65"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:03680bb39035fbcffe828eae9c3f8afc0428c91d38e7d61aa992ef7a59fb120e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cc152c5dd831641e995764f9f0b6589519f6f5123258ccaca8c6d34572fefa8"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-win32.whl", hash = "sha256:b8f3307af845803fb0b060ab76cf6dd3a13adc15b6b451f54281d25911eb92df"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:8eaf82f0eccd1505cf39a45a6bd0a8cf1c70dcfc30dba338207a969d91b965c0"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dc45229747b67ffc441b3de2f3ae5e62877a282ea828a5bdb67883c4ee4a8810"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f4a0033ce9a76e391542c182f0d48d084855b5fcba5010f707c8e8c34663d77"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ada214c6fa40f8d800e575de6b91a40d0548139e5dc457d2ebb61470abf50186"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b1121de0e9d6e6ca08289583d7491e7fcb18a439305b34a30b20d8215922d43c"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1063da2c85b95f2d1a430f1c33b55c9c17ffaf5e612e10aeaad641c55a9e2b9d"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70f1d09c0d7748b73290b29219e854b3207aea922f839437870d8cc2168e31cc"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:250c9eb0f4600361dd80d46112213dff2286231d92d3e52af1e5a6083d10cad9"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:750b446b2ffce1739e8578576092179160f6d26bd5e23eb1789c4d64d5af7dc7"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:fc52b79d83a3fe3a360902d3f5d79073a993597d48114c29485e9431092905d8"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:588245972aca710b5b68802c8cad9edaa98589b1b42ad2b53accd6910dad3545"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e39c7eb31e3f5b1f88caff88bcff1b7f8334975b46f6ac6e9fc725d829bc35d4"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-win32.whl", hash = "sha256:abecce40dfebbfa6abf8e324e1860092eeca6f7375c8c4e655a8afb61af58f2c"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:24a91a981f185721542a0b7c92e9054b7ab4fea0508a795846bc5b0abf8118d4"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:67b8cc9574bb518ec76dc8e705d4c39ae78bb96237cb533edac149352c1f39fe"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac71b2977fb90c35d41c9453116e283fac47bb9096ad917b8819ca8b943abecd"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3ae38d325b512f63f8da31f826e6cb6c367336f95e418137286ba362925c877e"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:542da1178c1c6af8873e143910e2269add130a299c9106eef2594e15dae5e482"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30a85aed0b864ac88309b7d94be09f6046c834ef60762a8833b660139cfbad13"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aae32c93e0f64469f74ccc730a7cb21c7610af3a775157e50bbd38f816536b38"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15b26ddf78d57f1d143bdf32e820fd8935d36abe8a25eb9ec0b5a71c82eb3895"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f5d10bae5d78e4551b7be7a9b29643a95aded9d0f602aa2ba584f0388e7a557"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:249c6470a2b60935bafd1d1d13cd613f8cd8388d53461c67397ee6a0f5dce741"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c5a74c359b2d47d26cdbbc7845e9662d6b08a1e915eb015d044729e92e7050b7"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:b5bcf60a228acae568e9911f410f9d9e0d43197d030ae5799e20dca8df588287"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:187d18082694a29005ba2944c882344b6748d5be69e3a89bf3cc9d878e548d5a"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:81bf654678e575403736b85ba3a7867e31c2c30a69bc57fe88e3ace52fb17b89"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-win32.whl", hash = "sha256:85a32721ddde63c9df9ebb0d2045b9691d9750cb139c161c80e500d210f5e26e"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:468d2a840567b13a590e67dd276c570f8de00ed767ecc611994c301d0f8c014f"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e0fc42822278451bc13a2e8626cf2218ba570f27856b536e00cfa53099724828"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:09c77f964f351a7369cc343911e0df63e762e42bac24cd7d18525961c81754f4"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:12ebea541c44fdc88ccb794a13fe861cc5e35d64ed689513a5c03d05b53b7c82"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:805dfea4ca10411a5296bcc75638017215a93ffb584c9e344731eef0dcfb026a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:96c2b49eb6a72c0e4991d62406e365d87067ca14c1a729a870d22354e6f68115"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaf7b34c5bc56b38c931a54f7952f1ff0ae77a2e82496583b247f7c969eb1479"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:619d1c96099be5823db34fe89e2582b336b5b074a7f47f819d6b3a57ff7bdb86"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0ac5e7015a5920cfce654c06618ec40c33e12801711da6b4258af59a8eff00a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:93aa7eef6ee71c629b51ef873991d6911b906d7312c6e8e99790c0f33c576f89"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7966951325782121e67c81299a031f4c115615e68046f79b85856b86ebffc4cd"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:02673e456dc5ab13659f85196c534dc596d4ef260e4d86e856c3b2773ce09843"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:c2af80fb58f0f24b3f3adcb9148e6203fa67dd3f61c4af146ecad033024dde43"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:153e7b6e724761741e0974fc4dcd406d35ba70b92bfe3fedcb497226c93b9da7"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-win32.whl", hash = "sha256:d47ecf253780c90ee181d4d871cd655a789da937454045b17b5798da9393901a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:d97d85fa63f315a8bdaba2af9a6a686e0eceab77b3089af45133252618e70884"}, + {file = "charset_normalizer-3.3.0-py3-none-any.whl", hash = "sha256:e46cd37076971c1040fc8c41273a8b3e2c624ce4f2be3f5dfcb7a430c1d3acc2"}, +] + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "ecdsa" +version = "0.18.0" +description = "ECDSA cryptographic signature library (pure python)" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "ecdsa-0.18.0-py2.py3-none-any.whl", hash = "sha256:80600258e7ed2f16b9aa1d7c295bd70194109ad5a30fdee0eaeefef1d4c559dd"}, + {file = "ecdsa-0.18.0.tar.gz", hash = "sha256:190348041559e21b22a1d65cee485282ca11a6f81d503fddb84d5017e9ed1e49"}, +] + +[package.dependencies] +six = ">=1.9.0" + +[package.extras] +gmpy = ["gmpy"] +gmpy2 = ["gmpy2"] + +[[package]] +name = "exceptiongroup" +version = "1.1.3" +description = "Backport of PEP 654 (exception groups)" +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"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "fastapi" +version = "0.103.2" +description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" +optional = false +python-versions = ">=3.7" +files = [ + {file = "fastapi-0.103.2-py3-none-any.whl", hash = "sha256:3270de872f0fe9ec809d4bd3d4d890c6d5cc7b9611d721d6438f9dacc8c4ef2e"}, + {file = "fastapi-0.103.2.tar.gz", hash = "sha256:75a11f6bfb8fc4d2bec0bd710c2d5f2829659c0e8c0afd5560fdda6ce25ec653"}, +] + +[package.dependencies] +anyio = ">=3.7.1,<4.0.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.27.0,<0.28.0" +typing-extensions = ">=4.5.0" + +[package.extras] +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.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)"] + +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "html5lib" +version = "1.1" +description = "HTML parser based on the WHATWG HTML specification" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d"}, + {file = "html5lib-1.1.tar.gz", hash = "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f"}, +] + +[package.dependencies] +six = ">=1.9" +webencodings = "*" + +[package.extras] +all = ["chardet (>=2.2)", "genshi", "lxml"] +chardet = ["chardet (>=2.2)"] +genshi = ["genshi"] +lxml = ["lxml"] + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +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"}, +] + +[[package]] +name = "importlib-metadata" +version = "6.8.0" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, + {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, +] + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] + +[[package]] +name = "monotonic" +version = "1.6" +description = "An implementation of time.monotonic() for Python 2 & < 3.3" +optional = false +python-versions = "*" +files = [ + {file = "monotonic-1.6-py2.py3-none-any.whl", hash = "sha256:68687e19a14f11f26d140dd5c86f3dba4bf5df58003000ed467e0e2a69bca96c"}, + {file = "monotonic-1.6.tar.gz", hash = "sha256:3a55207bcfed53ddd5c5bae174524062935efed17792e9de2ad0205ce9ad63f7"}, +] + +[[package]] +name = "multidict" +version = "6.0.4" +description = "multidict implementation" +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"}, +] + +[[package]] +name = "numpy" +version = "1.24.4" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "numpy-1.24.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c0bfb52d2169d58c1cdb8cc1f16989101639b34c7d3ce60ed70b19c63eba0b64"}, + {file = "numpy-1.24.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ed094d4f0c177b1b8e7aa9cba7d6ceed51c0e569a5318ac0ca9a090680a6a1b1"}, + {file = "numpy-1.24.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79fc682a374c4a8ed08b331bef9c5f582585d1048fa6d80bc6c35bc384eee9b4"}, + {file = "numpy-1.24.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ffe43c74893dbf38c2b0a1f5428760a1a9c98285553c89e12d70a96a7f3a4d6"}, + {file = "numpy-1.24.4-cp310-cp310-win32.whl", hash = "sha256:4c21decb6ea94057331e111a5bed9a79d335658c27ce2adb580fb4d54f2ad9bc"}, + {file = "numpy-1.24.4-cp310-cp310-win_amd64.whl", hash = "sha256:b4bea75e47d9586d31e892a7401f76e909712a0fd510f58f5337bea9572c571e"}, + {file = "numpy-1.24.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f136bab9c2cfd8da131132c2cf6cc27331dd6fae65f95f69dcd4ae3c3639c810"}, + {file = "numpy-1.24.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e2926dac25b313635e4d6cf4dc4e51c8c0ebfed60b801c799ffc4c32bf3d1254"}, + {file = "numpy-1.24.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:222e40d0e2548690405b0b3c7b21d1169117391c2e82c378467ef9ab4c8f0da7"}, + {file = "numpy-1.24.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7215847ce88a85ce39baf9e89070cb860c98fdddacbaa6c0da3ffb31b3350bd5"}, + {file = "numpy-1.24.4-cp311-cp311-win32.whl", hash = "sha256:4979217d7de511a8d57f4b4b5b2b965f707768440c17cb70fbf254c4b225238d"}, + {file = "numpy-1.24.4-cp311-cp311-win_amd64.whl", hash = "sha256:b7b1fc9864d7d39e28f41d089bfd6353cb5f27ecd9905348c24187a768c79694"}, + {file = "numpy-1.24.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1452241c290f3e2a312c137a9999cdbf63f78864d63c79039bda65ee86943f61"}, + {file = "numpy-1.24.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:04640dab83f7c6c85abf9cd729c5b65f1ebd0ccf9de90b270cd61935eef0197f"}, + {file = "numpy-1.24.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5425b114831d1e77e4b5d812b69d11d962e104095a5b9c3b641a218abcc050e"}, + {file = "numpy-1.24.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd80e219fd4c71fc3699fc1dadac5dcf4fd882bfc6f7ec53d30fa197b8ee22dc"}, + {file = "numpy-1.24.4-cp38-cp38-win32.whl", hash = "sha256:4602244f345453db537be5314d3983dbf5834a9701b7723ec28923e2889e0bb2"}, + {file = "numpy-1.24.4-cp38-cp38-win_amd64.whl", hash = "sha256:692f2e0f55794943c5bfff12b3f56f99af76f902fc47487bdfe97856de51a706"}, + {file = "numpy-1.24.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2541312fbf09977f3b3ad449c4e5f4bb55d0dbf79226d7724211acc905049400"}, + {file = "numpy-1.24.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9667575fb6d13c95f1b36aca12c5ee3356bf001b714fc354eb5465ce1609e62f"}, + {file = "numpy-1.24.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a86ed21e4f87050382c7bc96571755193c4c1392490744ac73d660e8f564a9"}, + {file = "numpy-1.24.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d11efb4dbecbdf22508d55e48d9c8384db795e1b7b51ea735289ff96613ff74d"}, + {file = "numpy-1.24.4-cp39-cp39-win32.whl", hash = "sha256:6620c0acd41dbcb368610bb2f4d83145674040025e5536954782467100aa8835"}, + {file = "numpy-1.24.4-cp39-cp39-win_amd64.whl", hash = "sha256:befe2bf740fd8373cf56149a5c23a0f601e82869598d41f8e188a0e9869926f8"}, + {file = "numpy-1.24.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:31f13e25b4e304632a4619d0e0777662c2ffea99fcae2029556b17d8ff958aef"}, + {file = "numpy-1.24.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95f7ac6540e95bc440ad77f56e520da5bf877f87dca58bd095288dce8940532a"}, + {file = "numpy-1.24.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e98f220aa76ca2a977fe435f5b04d7b3470c0a2e6312907b37ba6068f26787f2"}, + {file = "numpy-1.24.4.tar.gz", hash = "sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463"}, +] + +[[package]] +name = "numpy" +version = "1.25.2" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "numpy-1.25.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:db3ccc4e37a6873045580d413fe79b68e47a681af8db2e046f1dacfa11f86eb3"}, + {file = "numpy-1.25.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:90319e4f002795ccfc9050110bbbaa16c944b1c37c0baeea43c5fb881693ae1f"}, + {file = "numpy-1.25.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfe4a913e29b418d096e696ddd422d8a5d13ffba4ea91f9f60440a3b759b0187"}, + {file = "numpy-1.25.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f08f2e037bba04e707eebf4bc934f1972a315c883a9e0ebfa8a7756eabf9e357"}, + {file = "numpy-1.25.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bec1e7213c7cb00d67093247f8c4db156fd03075f49876957dca4711306d39c9"}, + {file = "numpy-1.25.2-cp310-cp310-win32.whl", hash = "sha256:7dc869c0c75988e1c693d0e2d5b26034644399dd929bc049db55395b1379e044"}, + {file = "numpy-1.25.2-cp310-cp310-win_amd64.whl", hash = "sha256:834b386f2b8210dca38c71a6e0f4fd6922f7d3fcff935dbe3a570945acb1b545"}, + {file = "numpy-1.25.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c5462d19336db4560041517dbb7759c21d181a67cb01b36ca109b2ae37d32418"}, + {file = "numpy-1.25.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c5652ea24d33585ea39eb6a6a15dac87a1206a692719ff45d53c5282e66d4a8f"}, + {file = "numpy-1.25.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d60fbae8e0019865fc4784745814cff1c421df5afee233db6d88ab4f14655a2"}, + {file = "numpy-1.25.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60e7f0f7f6d0eee8364b9a6304c2845b9c491ac706048c7e8cf47b83123b8dbf"}, + {file = "numpy-1.25.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bb33d5a1cf360304754913a350edda36d5b8c5331a8237268c48f91253c3a364"}, + {file = "numpy-1.25.2-cp311-cp311-win32.whl", hash = "sha256:5883c06bb92f2e6c8181df7b39971a5fb436288db58b5a1c3967702d4278691d"}, + {file = "numpy-1.25.2-cp311-cp311-win_amd64.whl", hash = "sha256:5c97325a0ba6f9d041feb9390924614b60b99209a71a69c876f71052521d42a4"}, + {file = "numpy-1.25.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b79e513d7aac42ae918db3ad1341a015488530d0bb2a6abcbdd10a3a829ccfd3"}, + {file = "numpy-1.25.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:eb942bfb6f84df5ce05dbf4b46673ffed0d3da59f13635ea9b926af3deb76926"}, + {file = "numpy-1.25.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e0746410e73384e70d286f93abf2520035250aad8c5714240b0492a7302fdca"}, + {file = "numpy-1.25.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7806500e4f5bdd04095e849265e55de20d8cc4b661b038957354327f6d9b295"}, + {file = "numpy-1.25.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8b77775f4b7df768967a7c8b3567e309f617dd5e99aeb886fa14dc1a0791141f"}, + {file = "numpy-1.25.2-cp39-cp39-win32.whl", hash = "sha256:2792d23d62ec51e50ce4d4b7d73de8f67a2fd3ea710dcbc8563a51a03fb07b01"}, + {file = "numpy-1.25.2-cp39-cp39-win_amd64.whl", hash = "sha256:76b4115d42a7dfc5d485d358728cdd8719be33cc5ec6ec08632a5d6fca2ed380"}, + {file = "numpy-1.25.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a1329e26f46230bf77b02cc19e900db9b52f398d6722ca853349a782d4cff55"}, + {file = "numpy-1.25.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c3abc71e8b6edba80a01a52e66d83c5d14433cbcd26a40c329ec7ed09f37901"}, + {file = "numpy-1.25.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1b9735c27cea5d995496f46a8b1cd7b408b3f34b6d50459d9ac8fe3a20cc17bf"}, + {file = "numpy-1.25.2.tar.gz", hash = "sha256:fd608e19c8d7c55021dffd43bfe5492fab8cc105cc8986f813f8c3c048b38760"}, +] + +[[package]] +name = "openbb-core" +version = "0.1.0a4" +description = "OpenBB package with core functionality" +optional = false +python-versions = ">=3.8,<4.0" +files = [ + {file = "openbb_core-0.1.0a4-py3-none-any.whl", hash = "sha256:f4a42ac3b7b8fec4b4b900576f08560216184f55e1a0b13ecc015853c660730a"}, + {file = "openbb_core-0.1.0a4.tar.gz", hash = "sha256:9656dfe18cbfbaa61a37da1b39af7330af5004b4a5edb4809af82ae7b25c95ea"}, +] + +[package.dependencies] +fastapi = ">=0.103.1,<0.104.0" +html5lib = ">=1.1,<2.0" +importlib_metadata = ">=6.8.0,<7.0.0" +openbb-provider = ">=0.1.0a2,<0.2.0" +pandas = ">=1.5.3" +posthog = ">=3.0.1,<4.0.0" +python-jose = ">=3.3.0,<4.0.0" +python-multipart = ">=0.0.6,<0.0.7" +uuid7 = ">=0.1.0,<0.2.0" +uvicorn = ">=0.23.2,<0.24.0" +websockets = ">=10.4,<11.0" + +[[package]] +name = "openbb-provider" +version = "0.1.0a3" +description = "OpenBB package to execute queries to financial data providers" +optional = false +python-versions = ">=3.8,<4.0" +files = [ + {file = "openbb_provider-0.1.0a3-py3-none-any.whl", hash = "sha256:d589e5fade39737b99f770295926d472faaeb7f4b9d963a6cafa362293c92303"}, + {file = "openbb_provider-0.1.0a3.tar.gz", hash = "sha256:7f37432fca541a07f132efae1885a1d320d6746e814a7ef986bc2d7ca65916c8"}, +] + +[package.dependencies] +importlib_metadata = ">=6.8.0,<7.0.0" +pydantic = ">=2.4.2,<3.0.0" +pytest-recorder = ">=0.2.3,<0.3.0" +python-dotenv = ">=1.0.0,<2.0.0" +requests = ">=2.31.0,<3.0.0" +urllib3 = "<2.0.0" + +[[package]] +name = "pandas" +version = "2.0.3" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pandas-2.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e4c7c9f27a4185304c7caf96dc7d91bc60bc162221152de697c98eb0b2648dd8"}, + {file = "pandas-2.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f167beed68918d62bffb6ec64f2e1d8a7d297a038f86d4aed056b9493fca407f"}, + {file = "pandas-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce0c6f76a0f1ba361551f3e6dceaff06bde7514a374aa43e33b588ec10420183"}, + {file = "pandas-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba619e410a21d8c387a1ea6e8a0e49bb42216474436245718d7f2e88a2f8d7c0"}, + {file = "pandas-2.0.3-cp310-cp310-win32.whl", hash = "sha256:3ef285093b4fe5058eefd756100a367f27029913760773c8bf1d2d8bebe5d210"}, + {file = "pandas-2.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:9ee1a69328d5c36c98d8e74db06f4ad518a1840e8ccb94a4ba86920986bb617e"}, + {file = "pandas-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b084b91d8d66ab19f5bb3256cbd5ea661848338301940e17f4492b2ce0801fe8"}, + {file = "pandas-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37673e3bdf1551b95bf5d4ce372b37770f9529743d2498032439371fc7b7eb26"}, + {file = "pandas-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9cb1e14fdb546396b7e1b923ffaeeac24e4cedd14266c3497216dd4448e4f2d"}, + {file = "pandas-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9cd88488cceb7635aebb84809d087468eb33551097d600c6dad13602029c2df"}, + {file = "pandas-2.0.3-cp311-cp311-win32.whl", hash = "sha256:694888a81198786f0e164ee3a581df7d505024fbb1f15202fc7db88a71d84ebd"}, + {file = "pandas-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6a21ab5c89dcbd57f78d0ae16630b090eec626360085a4148693def5452d8a6b"}, + {file = "pandas-2.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9e4da0d45e7f34c069fe4d522359df7d23badf83abc1d1cef398895822d11061"}, + {file = "pandas-2.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:32fca2ee1b0d93dd71d979726b12b61faa06aeb93cf77468776287f41ff8fdc5"}, + {file = "pandas-2.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:258d3624b3ae734490e4d63c430256e716f488c4fcb7c8e9bde2d3aa46c29089"}, + {file = "pandas-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eae3dc34fa1aa7772dd3fc60270d13ced7346fcbcfee017d3132ec625e23bb0"}, + {file = "pandas-2.0.3-cp38-cp38-win32.whl", hash = "sha256:f3421a7afb1a43f7e38e82e844e2bca9a6d793d66c1a7f9f0ff39a795bbc5e02"}, + {file = "pandas-2.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:69d7f3884c95da3a31ef82b7618af5710dba95bb885ffab339aad925c3e8ce78"}, + {file = "pandas-2.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5247fb1ba347c1261cbbf0fcfba4a3121fbb4029d95d9ef4dc45406620b25c8b"}, + {file = "pandas-2.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:81af086f4543c9d8bb128328b5d32e9986e0c84d3ee673a2ac6fb57fd14f755e"}, + {file = "pandas-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1994c789bf12a7c5098277fb43836ce090f1073858c10f9220998ac74f37c69b"}, + {file = "pandas-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ec591c48e29226bcbb316e0c1e9423622bc7a4eaf1ef7c3c9fa1a3981f89641"}, + {file = "pandas-2.0.3-cp39-cp39-win32.whl", hash = "sha256:04dbdbaf2e4d46ca8da896e1805bc04eb85caa9a82e259e8eed00254d5e0c682"}, + {file = "pandas-2.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:1168574b036cd8b93abc746171c9b4f1b83467438a5e45909fed645cf8692dbc"}, + {file = "pandas-2.0.3.tar.gz", hash = "sha256:c02f372a88e0d17f36d3093a644c73cfc1788e876a7c4bcb4020a77512e2043c"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.20.3", markers = "python_version < \"3.10\""}, + {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, + {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, +] +python-dateutil = ">=2.8.2" +pytz = ">=2020.1" +tzdata = ">=2022.1" + +[package.extras] +all = ["PyQt5 (>=5.15.1)", "SQLAlchemy (>=1.4.16)", "beautifulsoup4 (>=4.9.3)", "bottleneck (>=1.3.2)", "brotlipy (>=0.7.0)", "fastparquet (>=0.6.3)", "fsspec (>=2021.07.0)", "gcsfs (>=2021.07.0)", "html5lib (>=1.1)", "hypothesis (>=6.34.2)", "jinja2 (>=3.0.0)", "lxml (>=4.6.3)", "matplotlib (>=3.6.1)", "numba (>=0.53.1)", "numexpr (>=2.7.3)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pandas-gbq (>=0.15.0)", "psycopg2 (>=2.8.6)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "python-snappy (>=0.6.0)", "pyxlsb (>=1.0.8)", "qtpy (>=2.2.0)", "s3fs (>=2021.08.0)", "scipy (>=1.7.1)", "tables (>=3.6.1)", "tabulate (>=0.8.9)", "xarray (>=0.21.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)", "zstandard (>=0.15.2)"] +aws = ["s3fs (>=2021.08.0)"] +clipboard = ["PyQt5 (>=5.15.1)", "qtpy (>=2.2.0)"] +compression = ["brotlipy (>=0.7.0)", "python-snappy (>=0.6.0)", "zstandard (>=0.15.2)"] +computation = ["scipy (>=1.7.1)", "xarray (>=0.21.0)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pyxlsb (>=1.0.8)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)"] +feather = ["pyarrow (>=7.0.0)"] +fss = ["fsspec (>=2021.07.0)"] +gcp = ["gcsfs (>=2021.07.0)", "pandas-gbq (>=0.15.0)"] +hdf5 = ["tables (>=3.6.1)"] +html = ["beautifulsoup4 (>=4.9.3)", "html5lib (>=1.1)", "lxml (>=4.6.3)"] +mysql = ["SQLAlchemy (>=1.4.16)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.0.0)", "tabulate (>=0.8.9)"] +parquet = ["pyarrow (>=7.0.0)"] +performance = ["bottleneck (>=1.3.2)", "numba (>=0.53.1)", "numexpr (>=2.7.1)"] +plot = ["matplotlib (>=3.6.1)"] +postgresql = ["SQLAlchemy (>=1.4.16)", "psycopg2 (>=2.8.6)"] +spss = ["pyreadstat (>=1.1.2)"] +sql-other = ["SQLAlchemy (>=1.4.16)"] +test = ["hypothesis (>=6.34.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.6.3)"] + +[[package]] +name = "platformdirs" +version = "3.11.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +optional = false +python-versions = ">=3.7" +files = [ + {file = "platformdirs-3.11.0-py3-none-any.whl", hash = "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e"}, + {file = "platformdirs-3.11.0.tar.gz", hash = "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3"}, +] + +[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)"] + +[[package]] +name = "posthog" +version = "3.0.2" +description = "Integrate PostHog into any python application." +optional = false +python-versions = "*" +files = [ + {file = "posthog-3.0.2-py2.py3-none-any.whl", hash = "sha256:a8c0af6f2401fbe50f90e68c4143d0824b54e872de036b1c2f23b5abb39d88ce"}, + {file = "posthog-3.0.2.tar.gz", hash = "sha256:701fba6e446a4de687c6e861b587e7b7741955ad624bf34fe013c06a0fec6fb3"}, +] + +[package.dependencies] +backoff = ">=1.10.0" +monotonic = ">=1.5" +python-dateutil = ">2.1" +requests = ">=2.7,<3.0" +six = ">=1.5" + +[package.extras] +dev = ["black", "flake8", "flake8-print", "isort", "pre-commit"] +sentry = ["django", "sentry-sdk"] +test = ["coverage", "flake8", "freezegun (==0.3.15)", "mock (>=2.0.0)", "pylint", "pytest"] + +[[package]] +name = "pyasn1" +version = "0.5.0" +description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "pyasn1-0.5.0-py2.py3-none-any.whl", hash = "sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57"}, + {file = "pyasn1-0.5.0.tar.gz", hash = "sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde"}, +] + +[[package]] +name = "pydantic" +version = "2.4.2" +description = "Data validation using Python type hints" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pydantic-2.4.2-py3-none-any.whl", hash = "sha256:bc3ddf669d234f4220e6e1c4d96b061abe0998185a8d7855c0126782b7abc8c1"}, + {file = "pydantic-2.4.2.tar.gz", hash = "sha256:94f336138093a5d7f426aac732dcfe7ab4eb4da243c88f891d65deb4a2556ee7"}, +] + +[package.dependencies] +annotated-types = ">=0.4.0" +pydantic-core = "2.10.1" +typing-extensions = ">=4.6.1" + +[package.extras] +email = ["email-validator (>=2.0.0)"] + +[[package]] +name = "pydantic-core" +version = "2.10.1" +description = "" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pydantic_core-2.10.1-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:d64728ee14e667ba27c66314b7d880b8eeb050e58ffc5fec3b7a109f8cddbd63"}, + {file = "pydantic_core-2.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:48525933fea744a3e7464c19bfede85df4aba79ce90c60b94d8b6e1eddd67096"}, + {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef337945bbd76cce390d1b2496ccf9f90b1c1242a3a7bc242ca4a9fc5993427a"}, + {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1392e0638af203cee360495fd2cfdd6054711f2db5175b6e9c3c461b76f5175"}, + {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0675ba5d22de54d07bccde38997e780044dcfa9a71aac9fd7d4d7a1d2e3e65f7"}, + {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:128552af70a64660f21cb0eb4876cbdadf1a1f9d5de820fed6421fa8de07c893"}, + {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f6e6aed5818c264412ac0598b581a002a9f050cb2637a84979859e70197aa9e"}, + {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ecaac27da855b8d73f92123e5f03612b04c5632fd0a476e469dfc47cd37d6b2e"}, + {file = "pydantic_core-2.10.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b3c01c2fb081fced3bbb3da78510693dc7121bb893a1f0f5f4b48013201f362e"}, + {file = "pydantic_core-2.10.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:92f675fefa977625105708492850bcbc1182bfc3e997f8eecb866d1927c98ae6"}, + {file = "pydantic_core-2.10.1-cp310-none-win32.whl", hash = "sha256:420a692b547736a8d8703c39ea935ab5d8f0d2573f8f123b0a294e49a73f214b"}, + {file = "pydantic_core-2.10.1-cp310-none-win_amd64.whl", hash = "sha256:0880e239827b4b5b3e2ce05e6b766a7414e5f5aedc4523be6b68cfbc7f61c5d0"}, + {file = "pydantic_core-2.10.1-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:073d4a470b195d2b2245d0343569aac7e979d3a0dcce6c7d2af6d8a920ad0bea"}, + {file = "pydantic_core-2.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:600d04a7b342363058b9190d4e929a8e2e715c5682a70cc37d5ded1e0dd370b4"}, + {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39215d809470f4c8d1881758575b2abfb80174a9e8daf8f33b1d4379357e417c"}, + {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eeb3d3d6b399ffe55f9a04e09e635554012f1980696d6b0aca3e6cf42a17a03b"}, + {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7a7902bf75779bc12ccfc508bfb7a4c47063f748ea3de87135d433a4cca7a2f"}, + {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3625578b6010c65964d177626fde80cf60d7f2e297d56b925cb5cdeda6e9925a"}, + {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:caa48fc31fc7243e50188197b5f0c4228956f97b954f76da157aae7f67269ae8"}, + {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:07ec6d7d929ae9c68f716195ce15e745b3e8fa122fc67698ac6498d802ed0fa4"}, + {file = "pydantic_core-2.10.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e6f31a17acede6a8cd1ae2d123ce04d8cca74056c9d456075f4f6f85de055607"}, + {file = "pydantic_core-2.10.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d8f1ebca515a03e5654f88411420fea6380fc841d1bea08effb28184e3d4899f"}, + {file = "pydantic_core-2.10.1-cp311-none-win32.whl", hash = "sha256:6db2eb9654a85ada248afa5a6db5ff1cf0f7b16043a6b070adc4a5be68c716d6"}, + {file = "pydantic_core-2.10.1-cp311-none-win_amd64.whl", hash = "sha256:4a5be350f922430997f240d25f8219f93b0c81e15f7b30b868b2fddfc2d05f27"}, + {file = "pydantic_core-2.10.1-cp311-none-win_arm64.whl", hash = "sha256:5fdb39f67c779b183b0c853cd6b45f7db84b84e0571b3ef1c89cdb1dfc367325"}, + {file = "pydantic_core-2.10.1-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:b1f22a9ab44de5f082216270552aa54259db20189e68fc12484873d926426921"}, + {file = "pydantic_core-2.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8572cadbf4cfa95fb4187775b5ade2eaa93511f07947b38f4cd67cf10783b118"}, + {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db9a28c063c7c00844ae42a80203eb6d2d6bbb97070cfa00194dff40e6f545ab"}, + {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e2a35baa428181cb2270a15864ec6286822d3576f2ed0f4cd7f0c1708472aff"}, + {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05560ab976012bf40f25d5225a58bfa649bb897b87192a36c6fef1ab132540d7"}, + {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d6495008733c7521a89422d7a68efa0a0122c99a5861f06020ef5b1f51f9ba7c"}, + {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14ac492c686defc8e6133e3a2d9eaf5261b3df26b8ae97450c1647286750b901"}, + {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8282bab177a9a3081fd3d0a0175a07a1e2bfb7fcbbd949519ea0980f8a07144d"}, + {file = "pydantic_core-2.10.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:aafdb89fdeb5fe165043896817eccd6434aee124d5ee9b354f92cd574ba5e78f"}, + {file = "pydantic_core-2.10.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f6defd966ca3b187ec6c366604e9296f585021d922e666b99c47e78738b5666c"}, + {file = "pydantic_core-2.10.1-cp312-none-win32.whl", hash = "sha256:7c4d1894fe112b0864c1fa75dffa045720a194b227bed12f4be7f6045b25209f"}, + {file = "pydantic_core-2.10.1-cp312-none-win_amd64.whl", hash = "sha256:5994985da903d0b8a08e4935c46ed8daf5be1cf217489e673910951dc533d430"}, + {file = "pydantic_core-2.10.1-cp312-none-win_arm64.whl", hash = "sha256:0d8a8adef23d86d8eceed3e32e9cca8879c7481c183f84ed1a8edc7df073af94"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:9badf8d45171d92387410b04639d73811b785b5161ecadabf056ea14d62d4ede"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:ebedb45b9feb7258fac0a268a3f6bec0a2ea4d9558f3d6f813f02ff3a6dc6698"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfe1090245c078720d250d19cb05d67e21a9cd7c257698ef139bc41cf6c27b4f"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e357571bb0efd65fd55f18db0a2fb0ed89d0bb1d41d906b138f088933ae618bb"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b3dcd587b69bbf54fc04ca157c2323b8911033e827fffaecf0cafa5a892a0904"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c120c9ce3b163b985a3b966bb701114beb1da4b0468b9b236fc754783d85aa3"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15d6bca84ffc966cc9976b09a18cf9543ed4d4ecbd97e7086f9ce9327ea48891"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5cabb9710f09d5d2e9e2748c3e3e20d991a4c5f96ed8f1132518f54ab2967221"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:82f55187a5bebae7d81d35b1e9aaea5e169d44819789837cdd4720d768c55d15"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1d40f55222b233e98e3921df7811c27567f0e1a4411b93d4c5c0f4ce131bc42f"}, + {file = "pydantic_core-2.10.1-cp37-none-win32.whl", hash = "sha256:14e09ff0b8fe6e46b93d36a878f6e4a3a98ba5303c76bb8e716f4878a3bee92c"}, + {file = "pydantic_core-2.10.1-cp37-none-win_amd64.whl", hash = "sha256:1396e81b83516b9d5c9e26a924fa69164156c148c717131f54f586485ac3c15e"}, + {file = "pydantic_core-2.10.1-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:6835451b57c1b467b95ffb03a38bb75b52fb4dc2762bb1d9dbed8de31ea7d0fc"}, + {file = "pydantic_core-2.10.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b00bc4619f60c853556b35f83731bd817f989cba3e97dc792bb8c97941b8053a"}, + {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fa467fd300a6f046bdb248d40cd015b21b7576c168a6bb20aa22e595c8ffcdd"}, + {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d99277877daf2efe074eae6338453a4ed54a2d93fb4678ddfe1209a0c93a2468"}, + {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa7db7558607afeccb33c0e4bf1c9a9a835e26599e76af6fe2fcea45904083a6"}, + {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aad7bd686363d1ce4ee930ad39f14e1673248373f4a9d74d2b9554f06199fb58"}, + {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:443fed67d33aa85357464f297e3d26e570267d1af6fef1c21ca50921d2976302"}, + {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:042462d8d6ba707fd3ce9649e7bf268633a41018d6a998fb5fbacb7e928a183e"}, + {file = "pydantic_core-2.10.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ecdbde46235f3d560b18be0cb706c8e8ad1b965e5c13bbba7450c86064e96561"}, + {file = "pydantic_core-2.10.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ed550ed05540c03f0e69e6d74ad58d026de61b9eaebebbaaf8873e585cbb18de"}, + {file = "pydantic_core-2.10.1-cp38-none-win32.whl", hash = "sha256:8cdbbd92154db2fec4ec973d45c565e767ddc20aa6dbaf50142676484cbff8ee"}, + {file = "pydantic_core-2.10.1-cp38-none-win_amd64.whl", hash = "sha256:9f6f3e2598604956480f6c8aa24a3384dbf6509fe995d97f6ca6103bb8c2534e"}, + {file = "pydantic_core-2.10.1-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:655f8f4c8d6a5963c9a0687793da37b9b681d9ad06f29438a3b2326d4e6b7970"}, + {file = "pydantic_core-2.10.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e570ffeb2170e116a5b17e83f19911020ac79d19c96f320cbfa1fa96b470185b"}, + {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64322bfa13e44c6c30c518729ef08fda6026b96d5c0be724b3c4ae4da939f875"}, + {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:485a91abe3a07c3a8d1e082ba29254eea3e2bb13cbbd4351ea4e5a21912cc9b0"}, + {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7c2b8eb9fc872e68b46eeaf835e86bccc3a58ba57d0eedc109cbb14177be531"}, + {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a5cb87bdc2e5f620693148b5f8f842d293cae46c5f15a1b1bf7ceeed324a740c"}, + {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25bd966103890ccfa028841a8f30cebcf5875eeac8c4bde4fe221364c92f0c9a"}, + {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f323306d0556351735b54acbf82904fe30a27b6a7147153cbe6e19aaaa2aa429"}, + {file = "pydantic_core-2.10.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0c27f38dc4fbf07b358b2bc90edf35e82d1703e22ff2efa4af4ad5de1b3833e7"}, + {file = "pydantic_core-2.10.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f1365e032a477c1430cfe0cf2856679529a2331426f8081172c4a74186f1d595"}, + {file = "pydantic_core-2.10.1-cp39-none-win32.whl", hash = "sha256:a1c311fd06ab3b10805abb72109f01a134019739bd3286b8ae1bc2fc4e50c07a"}, + {file = "pydantic_core-2.10.1-cp39-none-win_amd64.whl", hash = "sha256:ae8a8843b11dc0b03b57b52793e391f0122e740de3df1474814c700d2622950a"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d43002441932f9a9ea5d6f9efaa2e21458221a3a4b417a14027a1d530201ef1b"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fcb83175cc4936a5425dde3356f079ae03c0802bbdf8ff82c035f8a54b333521"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:962ed72424bf1f72334e2f1e61b68f16c0e596f024ca7ac5daf229f7c26e4208"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2cf5bb4dd67f20f3bbc1209ef572a259027c49e5ff694fa56bed62959b41e1f9"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e544246b859f17373bed915182ab841b80849ed9cf23f1f07b73b7c58baee5fb"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c0877239307b7e69d025b73774e88e86ce82f6ba6adf98f41069d5b0b78bd1bf"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:53df009d1e1ba40f696f8995683e067e3967101d4bb4ea6f667931b7d4a01357"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a1254357f7e4c82e77c348dabf2d55f1d14d19d91ff025004775e70a6ef40ada"}, + {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:524ff0ca3baea164d6d93a32c58ac79eca9f6cf713586fdc0adb66a8cdeab96a"}, + {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f0ac9fb8608dbc6eaf17956bf623c9119b4db7dbb511650910a82e261e6600f"}, + {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:320f14bd4542a04ab23747ff2c8a778bde727158b606e2661349557f0770711e"}, + {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:63974d168b6233b4ed6a0046296803cb13c56637a7b8106564ab575926572a55"}, + {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:417243bf599ba1f1fef2bb8c543ceb918676954734e2dcb82bf162ae9d7bd514"}, + {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:dda81e5ec82485155a19d9624cfcca9be88a405e2857354e5b089c2a982144b2"}, + {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:14cfbb00959259e15d684505263d5a21732b31248a5dd4941f73a3be233865b9"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:631cb7415225954fdcc2a024119101946793e5923f6c4d73a5914d27eb3d3a05"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:bec7dd208a4182e99c5b6c501ce0b1f49de2802448d4056091f8e630b28e9a52"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:149b8a07712f45b332faee1a2258d8ef1fb4a36f88c0c17cb687f205c5dc6e7d"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d966c47f9dd73c2d32a809d2be529112d509321c5310ebf54076812e6ecd884"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7eb037106f5c6b3b0b864ad226b0b7ab58157124161d48e4b30c4a43fef8bc4b"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:154ea7c52e32dce13065dbb20a4a6f0cc012b4f667ac90d648d36b12007fa9f7"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e562617a45b5a9da5be4abe72b971d4f00bf8555eb29bb91ec2ef2be348cd132"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:f23b55eb5464468f9e0e9a9935ce3ed2a870608d5f534025cd5536bca25b1402"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:e9121b4009339b0f751955baf4543a0bfd6bc3f8188f8056b1a25a2d45099934"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:0523aeb76e03f753b58be33b26540880bac5aa54422e4462404c432230543f33"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e0e2959ef5d5b8dc9ef21e1a305a21a36e254e6a34432d00c72a92fdc5ecda5"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da01bec0a26befab4898ed83b362993c844b9a607a86add78604186297eb047e"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f2e9072d71c1f6cfc79a36d4484c82823c560e6f5599c43c1ca6b5cdbd54f881"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f36a3489d9e28fe4b67be9992a23029c3cec0babc3bd9afb39f49844a8c721c5"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f64f82cc3443149292b32387086d02a6c7fb39b8781563e0ca7b8d7d9cf72bd7"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b4a6db486ac8e99ae696e09efc8b2b9fea67b63c8f88ba7a1a16c24a057a0776"}, + {file = "pydantic_core-2.10.1.tar.gz", hash = "sha256:0f8682dbdd2f67f8e1edddcbffcc29f60a6182b4901c367fc8c1c40d30bb0a82"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + +[[package]] +name = "pytest-recorder" +version = "0.2.3" +description = "Pytest plugin, meant to facilitate unit tests writing for tools consumming Web APIs." +optional = false +python-versions = ">=3.8,<4.0" +files = [ + {file = "pytest_recorder-0.2.3-py3-none-any.whl", hash = "sha256:a2aa1f58a72e78585151840503c88b2a4b7aa85651ce3a08232c86e2680d0c90"}, + {file = "pytest_recorder-0.2.3.tar.gz", hash = "sha256:ecba7069c87d6e30229db82a091c61e6abb18662c69eeb78a3866ea8b37f04b7"}, +] + +[package.dependencies] +time-machine = ">=2.9.0,<3.0.0" +vcrpy = ">=4.2.1,<5.0.0" + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +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"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-dotenv" +version = "1.0.0" +description = "Read key-value pairs from a .env file and set them as environment variables" +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"}, +] + +[package.extras] +cli = ["click (>=5.0)"] + +[[package]] +name = "python-jose" +version = "3.3.0" +description = "JOSE implementation in Python" +optional = false +python-versions = "*" +files = [ + {file = "python-jose-3.3.0.tar.gz", hash = "sha256:55779b5e6ad599c6336191246e95eb2293a9ddebd555f796a65f838f07e5d78a"}, + {file = "python_jose-3.3.0-py2.py3-none-any.whl", hash = "sha256:9b1376b023f8b298536eedd47ae1089bcdb848f1535ab30555cd92002d78923a"}, +] + +[package.dependencies] +ecdsa = "!=0.15" +pyasn1 = "*" +rsa = "*" + +[package.extras] +cryptography = ["cryptography (>=3.4.0)"] +pycrypto = ["pyasn1", "pycrypto (>=2.6.0,<2.7.0)"] +pycryptodome = ["pyasn1", "pycryptodome (>=3.3.1,<4.0.0)"] + +[[package]] +name = "python-multipart" +version = "0.0.6" +description = "A streaming multipart parser for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "python_multipart-0.0.6-py3-none-any.whl", hash = "sha256:ee698bab5ef148b0a760751c261902cd096e57e10558e11aca17646b74ee1c18"}, + {file = "python_multipart-0.0.6.tar.gz", hash = "sha256:e9925a80bb668529f1b67c7fdb0a5dacdd7cbfc6fb0bff3ea443fe22bdd62132"}, +] + +[package.extras] +dev = ["atomicwrites (==1.2.1)", "attrs (==19.2.0)", "coverage (==6.5.0)", "hatch", "invoke (==1.7.3)", "more-itertools (==4.3.0)", "pbr (==4.3.0)", "pluggy (==1.0.0)", "py (==1.11.0)", "pytest (==7.2.0)", "pytest-cov (==4.0.0)", "pytest-timeout (==2.1.0)", "pyyaml (==5.1)"] + +[[package]] +name = "pytz" +version = "2023.3.post1" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +files = [ + {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, + {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, +] + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "requests-cache" +version = "1.1.0" +description = "A persistent cache for python requests" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "requests_cache-1.1.0-py3-none-any.whl", hash = "sha256:178282bce704b912c59e7f88f367c42bddd6cde6bf511b2a3e3cfb7e5332a92a"}, + {file = "requests_cache-1.1.0.tar.gz", hash = "sha256:41b79166aa8e300cc4de982f7ab7c52af914a785160be1eda25c6e9265969a67"}, +] + +[package.dependencies] +attrs = ">=21.2" +cattrs = ">=22.2" +platformdirs = ">=2.5" +requests = ">=2.22" +url-normalize = ">=1.4" +urllib3 = ">=1.25.5" + +[package.extras] +all = ["boto3 (>=1.15)", "botocore (>=1.18)", "itsdangerous (>=2.0)", "pymongo (>=3)", "pyyaml (>=5.4)", "redis (>=3)", "ujson (>=5.4)"] +bson = ["bson (>=0.5)"] +docs = ["furo (>=2023.3,<2024.0)", "linkify-it-py (>=2.0,<3.0)", "myst-parser (>=1.0,<2.0)", "sphinx (>=5.0.2,<6.0.0)", "sphinx-autodoc-typehints (>=1.19)", "sphinx-automodapi (>=0.14)", "sphinx-copybutton (>=0.5)", "sphinx-design (>=0.2)", "sphinx-notfound-page (>=0.8)", "sphinxcontrib-apidoc (>=0.3)", "sphinxext-opengraph (>=0.6)"] +dynamodb = ["boto3 (>=1.15)", "botocore (>=1.18)"] +json = ["ujson (>=5.4)"] +mongodb = ["pymongo (>=3)"] +redis = ["redis (>=3)"] +security = ["itsdangerous (>=2.0)"] +yaml = ["pyyaml (>=5.4)"] + +[[package]] +name = "rsa" +version = "4.9" +description = "Pure-Python RSA implementation" +optional = false +python-versions = ">=3.6,<4" +files = [ + {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, + {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, +] + +[package.dependencies] +pyasn1 = ">=0.1.3" + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "sniffio" +version = "1.3.0" +description = "Sniff out which async library your code is running under" +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"}, +] + +[[package]] +name = "starlette" +version = "0.27.0" +description = "The little ASGI library that shines." +optional = false +python-versions = ">=3.7" +files = [ + {file = "starlette-0.27.0-py3-none-any.whl", hash = "sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91"}, + {file = "starlette-0.27.0.tar.gz", hash = "sha256:6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75"}, +] + +[package.dependencies] +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"] + +[[package]] +name = "time-machine" +version = "2.13.0" +description = "Travel through time in your tests." +optional = false +python-versions = ">=3.8" +files = [ + {file = "time_machine-2.13.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:685d98593f13649ad5e7ce3e58efe689feca1badcf618ba397d3ab877ee59326"}, + {file = "time_machine-2.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ccbce292380ebf63fb9a52e6b03d91677f6a003e0c11f77473efe3913a75f289"}, + {file = "time_machine-2.13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:679cbf9b15bfde1654cf48124128d3fbe52f821fa158a98fcee5fe7e05db1917"}, + {file = "time_machine-2.13.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a26bdf3462d5f12a4c1009fdbe54366c6ef22c7b6f6808705b51dedaaeba8296"}, + {file = "time_machine-2.13.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dabb3b155819811b4602f7e9be936e2024e20dc99a90f103e36b45768badf9c3"}, + {file = "time_machine-2.13.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0db97f92be3efe0ac62fd3f933c91a78438cef13f283b6dfc2ee11123bfd7d8a"}, + {file = "time_machine-2.13.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:12eed2e9171c85b703d75c985dab2ecad4fe7025b7d2f842596fce1576238ece"}, + {file = "time_machine-2.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bdfe4a7f033e6783c3e9a7f8d8fc0b115367330762e00a03ff35fedf663994f3"}, + {file = "time_machine-2.13.0-cp310-cp310-win32.whl", hash = "sha256:3a7a0a49ce50d9c306c4343a7d6a3baa11092d4399a4af4355c615ccc321a9d3"}, + {file = "time_machine-2.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:1812e48c6c58707db9988445a219a908a710ea065b2cc808d9a50636291f27d4"}, + {file = "time_machine-2.13.0-cp310-cp310-win_arm64.whl", hash = "sha256:5aee23cd046abf9caeddc982113e81ba9097a01f3972e9560f5ed64e3495f66d"}, + {file = "time_machine-2.13.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e9a9d150e098be3daee5c9f10859ab1bd14a61abebaed86e6d71f7f18c05b9d7"}, + {file = "time_machine-2.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2bd4169b808745d219a69094b3cb86006938d45e7293249694e6b7366225a186"}, + {file = "time_machine-2.13.0-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:8d526cdcaca06a496877cfe61cc6608df2c3a6fce210e076761964ebac7f77cc"}, + {file = "time_machine-2.13.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfef4ebfb4f055ce3ebc7b6c1c4d0dbfcffdca0e783ad8c6986c992915a57ed3"}, + {file = "time_machine-2.13.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9f128db8997c3339f04f7f3946dd9bb2a83d15e0a40d35529774da1e9e501511"}, + {file = "time_machine-2.13.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21bef5854d49b62e2c33848b5c3e8acf22a3b46af803ef6ff19529949cb7cf9f"}, + {file = "time_machine-2.13.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:32b71e50b07f86916ac04bd1eefc2bd2c93706b81393748b08394509ee6585dc"}, + {file = "time_machine-2.13.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1ac8ff145c63cd0dcfd9590fe694b5269aacbc130298dc7209b095d101f8cdde"}, + {file = "time_machine-2.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:19a3b10161c91ca8e0fd79348665cca711fd2eac6ce336ff9e6b447783817f93"}, + {file = "time_machine-2.13.0-cp311-cp311-win32.whl", hash = "sha256:5f87787d562e42bf1006a87eb689814105b98c4d5545874a281280d0f8b9a2d9"}, + {file = "time_machine-2.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:62fd14a80b8b71726e07018628daaee0a2e00937625083f96f69ed6b8e3304c0"}, + {file = "time_machine-2.13.0-cp311-cp311-win_arm64.whl", hash = "sha256:e9935aff447f5400a2665ab10ed2da972591713080e1befe1bb8954e7c0c7806"}, + {file = "time_machine-2.13.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:34dcdbbd25c1e124e17fe58050452960fd16a11f9d3476aaa87260e28ecca0fd"}, + {file = "time_machine-2.13.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e58d82fe0e59d6e096ada3281d647a2e7420f7da5453b433b43880e1c2e8e0c5"}, + {file = "time_machine-2.13.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71acbc1febbe87532c7355eca3308c073d6e502ee4ce272b5028967847c8e063"}, + {file = "time_machine-2.13.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dec0ec2135a4e2a59623e40c31d6e8a8ae73305ade2634380e4263d815855750"}, + {file = "time_machine-2.13.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e3a2611f8788608ebbcb060a5e36b45911bc3b8adc421b1dc29d2c81786ce4d"}, + {file = "time_machine-2.13.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:42ef5349135626ad6cd889a0a81400137e5c6928502b0817ea9e90bb10702000"}, + {file = "time_machine-2.13.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6c16d90a597a8c2d3ce22d6be2eb3e3f14786974c11b01886e51b3cf0d5edaf7"}, + {file = "time_machine-2.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4f2ae8d0e359b216b695f1e7e7256f208c390db0480601a439c5dd1e1e4e16ce"}, + {file = "time_machine-2.13.0-cp312-cp312-win32.whl", hash = "sha256:f5fa9610f7e73fff42806a2ed8b06d862aa59ce4d178a52181771d6939c3e237"}, + {file = "time_machine-2.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:02b33a8c19768c94f7ffd6aa6f9f64818e88afce23250016b28583929d20fb12"}, + {file = "time_machine-2.13.0-cp312-cp312-win_arm64.whl", hash = "sha256:0cc116056a8a2a917a4eec85661dfadd411e0d8faae604ef6a0e19fe5cd57ef1"}, + {file = "time_machine-2.13.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:de01f33aa53da37530ad97dcd17e9affa25a8df4ab822506bb08101bab0c2673"}, + {file = "time_machine-2.13.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:67fa45cd813821e4f5bec0ac0820869e8e37430b15509d3f5fad74ba34b53852"}, + {file = "time_machine-2.13.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4a2d3db2c3b8e519d5ef436cd405abd33542a7b7761fb05ef5a5f782a8ce0b1"}, + {file = "time_machine-2.13.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7558622a62243be866a7e7c41da48eacd82c874b015ecf67d18ebf65ca3f7436"}, + {file = "time_machine-2.13.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab04cf4e56e1ee65bee2adaa26a04695e92eb1ed1ccc65fbdafd0d114399595a"}, + {file = "time_machine-2.13.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b0c8f24ae611a58782773af34dd356f1f26756272c04be2be7ea73b47e5da37d"}, + {file = "time_machine-2.13.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4ca20f85a973a4ca8b00cf466cd72c27ccc72372549b138fd48d7e70e5a190ab"}, + {file = "time_machine-2.13.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9fad549521c4c13bdb1e889b2855a86ec835780d534ffd8f091c2647863243be"}, + {file = "time_machine-2.13.0-cp38-cp38-win32.whl", hash = "sha256:20205422fcf2caf9a7488394587df86e5b54fdb315c1152094fbb63eec4e9304"}, + {file = "time_machine-2.13.0-cp38-cp38-win_amd64.whl", hash = "sha256:2dc76ee55a7d915a55960a726ceaca7b9097f67e4b4e681ef89871bcf98f00be"}, + {file = "time_machine-2.13.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7693704c0f2f6b9beed912ff609781edf5fcf5d63aff30c92be4093e09d94b8e"}, + {file = "time_machine-2.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:918f8389de29b4f41317d121f1150176fae2cdb5fa41f68b2aee0b9dc88df5c3"}, + {file = "time_machine-2.13.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fe3fda5fa73fec74278912e438fce1612a79c36fd0cc323ea3dc2d5ce629f31"}, + {file = "time_machine-2.13.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5c6245db573863b335d9ca64b3230f623caf0988594ae554c0c794e7f80e3e66"}, + {file = "time_machine-2.13.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e433827eccd6700a34a2ab28fd9361ff6e4d4923f718d2d1dac6d1dcd9d54da6"}, + {file = "time_machine-2.13.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:924377d398b1c48e519ad86a71903f9f36117f69e68242c99fb762a2465f5ad2"}, + {file = "time_machine-2.13.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:66fb3877014dca0b9286b0f06fa74062357bd23f2d9d102d10e31e0f8fa9b324"}, + {file = "time_machine-2.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0c9829b2edfcf6b5d72a6ff330d4380f36a937088314c675531b43d3423dd8af"}, + {file = "time_machine-2.13.0-cp39-cp39-win32.whl", hash = "sha256:1a22be4df364f49a507af4ac9ea38108a0105f39da3f9c60dce62d6c6ea4ccdc"}, + {file = "time_machine-2.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:88601de1da06c7cab3d5ed3d5c3801ef683366e769e829e96383fdab6ae2fe42"}, + {file = "time_machine-2.13.0-cp39-cp39-win_arm64.whl", hash = "sha256:3c87856105dcb25b5bbff031d99f06ef4d1c8380d096222e1bc63b496b5258e6"}, + {file = "time_machine-2.13.0.tar.gz", hash = "sha256:c23b2408e3adcedec84ea1131e238f0124a5bc0e491f60d1137ad7239b37c01a"}, +] + +[package.dependencies] +python-dateutil = "*" + +[[package]] +name = "typing-extensions" +version = "4.8.0" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, + {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, +] + +[[package]] +name = "tzdata" +version = "2023.3" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +files = [ + {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"}, + {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, +] + +[[package]] +name = "url-normalize" +version = "1.4.3" +description = "URL normalization for Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "url-normalize-1.4.3.tar.gz", hash = "sha256:d23d3a070ac52a67b83a1c59a0e68f8608d1cd538783b401bc9de2c0fac999b2"}, + {file = "url_normalize-1.4.3-py2.py3-none-any.whl", hash = "sha256:ec3c301f04e5bb676d333a7fa162fa977ad2ca04b7e652bfc9fac4e405728eed"}, +] + +[package.dependencies] +six = "*" + +[[package]] +name = "urllib3" +version = "1.26.18" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "urllib3-1.26.18-py2.py3-none-any.whl", hash = "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07"}, + {file = "urllib3-1.26.18.tar.gz", hash = "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"}, +] + +[package.extras] +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)"] + +[[package]] +name = "uuid7" +version = "0.1.0" +description = "UUID version 7, generating time-sorted UUIDs with 200ns time resolution and 48 bits of randomness" +optional = false +python-versions = ">=3.7" +files = [ + {file = "uuid7-0.1.0-py2.py3-none-any.whl", hash = "sha256:5e259bb63c8cb4aded5927ff41b444a80d0c7124e8a0ced7cf44efa1f5cccf61"}, + {file = "uuid7-0.1.0.tar.gz", hash = "sha256:8c57aa32ee7456d3cc68c95c4530bc571646defac01895cfc73545449894a63c"}, +] + +[[package]] +name = "uvicorn" +version = "0.23.2" +description = "The lightning-fast ASGI server." +optional = false +python-versions = ">=3.8" +files = [ + {file = "uvicorn-0.23.2-py3-none-any.whl", hash = "sha256:1f9be6558f01239d4fdf22ef8126c39cb1ad0addf76c40e760549d2c2f43ab53"}, + {file = "uvicorn-0.23.2.tar.gz", hash = "sha256:4d3cc12d7727ba72b64d12d3cc7743124074c0a69f7b201512fc50c3e3f1569a"}, +] + +[package.dependencies] +click = ">=7.0" +h11 = ">=0.8" +typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} + +[package.extras] +standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] + +[[package]] +name = "vcrpy" +version = "4.4.0" +description = "Automatically mock your HTTP interactions to simplify and speed up testing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "vcrpy-4.4.0-py2.py3-none-any.whl", hash = "sha256:560c9d0d8436ced29223ceefb513c3ac3f2e2a60d51a9830f236a1e63167905a"}, + {file = "vcrpy-4.4.0.tar.gz", hash = "sha256:d1109ae93dbc2e7fcbc485849a7600d5dea510d3bef070eec4419c9a72ca2639"}, +] + +[package.dependencies] +PyYAML = "*" +six = ">=1.5" +urllib3 = {version = "<2", markers = "python_version < \"3.10\""} +wrapt = "*" +yarl = "*" + +[[package]] +name = "webencodings" +version = "0.5.1" +description = "Character encoding aliases for legacy web content" +optional = false +python-versions = "*" +files = [ + {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, + {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, +] + +[[package]] +name = "websockets" +version = "10.4" +description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "websockets-10.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d58804e996d7d2307173d56c297cf7bc132c52df27a3efaac5e8d43e36c21c48"}, + {file = "websockets-10.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc0b82d728fe21a0d03e65f81980abbbcb13b5387f733a1a870672c5be26edab"}, + {file = "websockets-10.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ba089c499e1f4155d2a3c2a05d2878a3428cf321c848f2b5a45ce55f0d7d310c"}, + {file = "websockets-10.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33d69ca7612f0ddff3316b0c7b33ca180d464ecac2d115805c044bf0a3b0d032"}, + {file = "websockets-10.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62e627f6b6d4aed919a2052efc408da7a545c606268d5ab5bfab4432734b82b4"}, + {file = "websockets-10.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ea7b82bfcae927eeffc55d2ffa31665dc7fec7b8dc654506b8e5a518eb4d50"}, + {file = "websockets-10.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e0cb5cc6ece6ffa75baccfd5c02cffe776f3f5c8bf486811f9d3ea3453676ce8"}, + {file = "websockets-10.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ae5e95cfb53ab1da62185e23b3130e11d64431179debac6dc3c6acf08760e9b1"}, + {file = "websockets-10.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7c584f366f46ba667cfa66020344886cf47088e79c9b9d39c84ce9ea98aaa331"}, + {file = "websockets-10.4-cp310-cp310-win32.whl", hash = "sha256:b029fb2032ae4724d8ae8d4f6b363f2cc39e4c7b12454df8df7f0f563ed3e61a"}, + {file = "websockets-10.4-cp310-cp310-win_amd64.whl", hash = "sha256:8dc96f64ae43dde92530775e9cb169979f414dcf5cff670455d81a6823b42089"}, + {file = "websockets-10.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:47a2964021f2110116cc1125b3e6d87ab5ad16dea161949e7244ec583b905bb4"}, + {file = "websockets-10.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e789376b52c295c4946403bd0efecf27ab98f05319df4583d3c48e43c7342c2f"}, + {file = "websockets-10.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7d3f0b61c45c3fa9a349cf484962c559a8a1d80dae6977276df8fd1fa5e3cb8c"}, + {file = "websockets-10.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f55b5905705725af31ccef50e55391621532cd64fbf0bc6f4bac935f0fccec46"}, + {file = "websockets-10.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00c870522cdb69cd625b93f002961ffb0c095394f06ba8c48f17eef7c1541f96"}, + {file = "websockets-10.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f38706e0b15d3c20ef6259fd4bc1700cd133b06c3c1bb108ffe3f8947be15fa"}, + {file = "websockets-10.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f2c38d588887a609191d30e902df2a32711f708abfd85d318ca9b367258cfd0c"}, + {file = "websockets-10.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:fe10ddc59b304cb19a1bdf5bd0a7719cbbc9fbdd57ac80ed436b709fcf889106"}, + {file = "websockets-10.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:90fcf8929836d4a0e964d799a58823547df5a5e9afa83081761630553be731f9"}, + {file = "websockets-10.4-cp311-cp311-win32.whl", hash = "sha256:b9968694c5f467bf67ef97ae7ad4d56d14be2751000c1207d31bf3bb8860bae8"}, + {file = "websockets-10.4-cp311-cp311-win_amd64.whl", hash = "sha256:a7a240d7a74bf8d5cb3bfe6be7f21697a28ec4b1a437607bae08ac7acf5b4882"}, + {file = "websockets-10.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:74de2b894b47f1d21cbd0b37a5e2b2392ad95d17ae983e64727e18eb281fe7cb"}, + {file = "websockets-10.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3a686ecb4aa0d64ae60c9c9f1a7d5d46cab9bfb5d91a2d303d00e2cd4c4c5cc"}, + {file = "websockets-10.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0d15c968ea7a65211e084f523151dbf8ae44634de03c801b8bd070b74e85033"}, + {file = "websockets-10.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00213676a2e46b6ebf6045bc11d0f529d9120baa6f58d122b4021ad92adabd41"}, + {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:e23173580d740bf8822fd0379e4bf30aa1d5a92a4f252d34e893070c081050df"}, + {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:dd500e0a5e11969cdd3320935ca2ff1e936f2358f9c2e61f100a1660933320ea"}, + {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4239b6027e3d66a89446908ff3027d2737afc1a375f8fd3eea630a4842ec9a0c"}, + {file = "websockets-10.4-cp37-cp37m-win32.whl", hash = "sha256:8a5cc00546e0a701da4639aa0bbcb0ae2bb678c87f46da01ac2d789e1f2d2038"}, + {file = "websockets-10.4-cp37-cp37m-win_amd64.whl", hash = "sha256:a9f9a735deaf9a0cadc2d8c50d1a5bcdbae8b6e539c6e08237bc4082d7c13f28"}, + {file = "websockets-10.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5c1289596042fad2cdceb05e1ebf7aadf9995c928e0da2b7a4e99494953b1b94"}, + {file = "websockets-10.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0cff816f51fb33c26d6e2b16b5c7d48eaa31dae5488ace6aae468b361f422b63"}, + {file = "websockets-10.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:dd9becd5fe29773d140d68d607d66a38f60e31b86df75332703757ee645b6faf"}, + {file = "websockets-10.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45ec8e75b7dbc9539cbfafa570742fe4f676eb8b0d3694b67dabe2f2ceed8aa6"}, + {file = "websockets-10.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f72e5cd0f18f262f5da20efa9e241699e0cf3a766317a17392550c9ad7b37d8"}, + {file = "websockets-10.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:185929b4808b36a79c65b7865783b87b6841e852ef5407a2fb0c03381092fa3b"}, + {file = "websockets-10.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7d27a7e34c313b3a7f91adcd05134315002aaf8540d7b4f90336beafaea6217c"}, + {file = "websockets-10.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:884be66c76a444c59f801ac13f40c76f176f1bfa815ef5b8ed44321e74f1600b"}, + {file = "websockets-10.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:931c039af54fc195fe6ad536fde4b0de04da9d5916e78e55405436348cfb0e56"}, + {file = "websockets-10.4-cp38-cp38-win32.whl", hash = "sha256:db3c336f9eda2532ec0fd8ea49fef7a8df8f6c804cdf4f39e5c5c0d4a4ad9a7a"}, + {file = "websockets-10.4-cp38-cp38-win_amd64.whl", hash = "sha256:48c08473563323f9c9debac781ecf66f94ad5a3680a38fe84dee5388cf5acaf6"}, + {file = "websockets-10.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:40e826de3085721dabc7cf9bfd41682dadc02286d8cf149b3ad05bff89311e4f"}, + {file = "websockets-10.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:56029457f219ade1f2fc12a6504ea61e14ee227a815531f9738e41203a429112"}, + {file = "websockets-10.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f5fc088b7a32f244c519a048c170f14cf2251b849ef0e20cbbb0fdf0fdaf556f"}, + {file = "websockets-10.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fc8709c00704194213d45e455adc106ff9e87658297f72d544220e32029cd3d"}, + {file = "websockets-10.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0154f7691e4fe6c2b2bc275b5701e8b158dae92a1ab229e2b940efe11905dff4"}, + {file = "websockets-10.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c6d2264f485f0b53adf22697ac11e261ce84805c232ed5dbe6b1bcb84b00ff0"}, + {file = "websockets-10.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9bc42e8402dc5e9905fb8b9649f57efcb2056693b7e88faa8fb029256ba9c68c"}, + {file = "websockets-10.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:edc344de4dac1d89300a053ac973299e82d3db56330f3494905643bb68801269"}, + {file = "websockets-10.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:84bc2a7d075f32f6ed98652db3a680a17a4edb21ca7f80fe42e38753a58ee02b"}, + {file = "websockets-10.4-cp39-cp39-win32.whl", hash = "sha256:c94ae4faf2d09f7c81847c63843f84fe47bf6253c9d60b20f25edfd30fb12588"}, + {file = "websockets-10.4-cp39-cp39-win_amd64.whl", hash = "sha256:bbccd847aa0c3a69b5f691a84d2341a4f8a629c6922558f2a70611305f902d74"}, + {file = "websockets-10.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:82ff5e1cae4e855147fd57a2863376ed7454134c2bf49ec604dfe71e446e2193"}, + {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d210abe51b5da0ffdbf7b43eed0cfdff8a55a1ab17abbec4301c9ff077dd0342"}, + {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:942de28af58f352a6f588bc72490ae0f4ccd6dfc2bd3de5945b882a078e4e179"}, + {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9b27d6c1c6cd53dc93614967e9ce00ae7f864a2d9f99fe5ed86706e1ecbf485"}, + {file = "websockets-10.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:3d3cac3e32b2c8414f4f87c1b2ab686fa6284a980ba283617404377cd448f631"}, + {file = "websockets-10.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:da39dd03d130162deb63da51f6e66ed73032ae62e74aaccc4236e30edccddbb0"}, + {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389f8dbb5c489e305fb113ca1b6bdcdaa130923f77485db5b189de343a179393"}, + {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09a1814bb15eff7069e51fed0826df0bc0702652b5cb8f87697d469d79c23576"}, + {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff64a1d38d156d429404aaa84b27305e957fd10c30e5880d1765c9480bea490f"}, + {file = "websockets-10.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b343f521b047493dc4022dd338fc6db9d9282658862756b4f6fd0e996c1380e1"}, + {file = "websockets-10.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:932af322458da7e4e35df32f050389e13d3d96b09d274b22a7aa1808f292fee4"}, + {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6a4162139374a49eb18ef5b2f4da1dd95c994588f5033d64e0bbfda4b6b6fcf"}, + {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c57e4c1349fbe0e446c9fa7b19ed2f8a4417233b6984277cce392819123142d3"}, + {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b627c266f295de9dea86bd1112ed3d5fafb69a348af30a2422e16590a8ecba13"}, + {file = "websockets-10.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:05a7233089f8bd355e8cbe127c2e8ca0b4ea55467861906b80d2ebc7db4d6b72"}, + {file = "websockets-10.4.tar.gz", hash = "sha256:eef610b23933c54d5d921c92578ae5f89813438fded840c2e9809d378dc765d3"}, +] + +[[package]] +name = "wrapt" +version = "1.15.0" +description = "Module for decorators, wrappers and monkey patching." +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"}, +] + +[[package]] +name = "yarl" +version = "1.9.2" +description = "Yet another URL library" +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"}, +] + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" + +[[package]] +name = "zipp" +version = "3.17.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "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"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.8" +content-hash = "ead0797914467bcfd9460f1e06b39a03091076c12e34f99ac76aabf2a8b66e71" diff --git a/openbb_platform/providers/biztoc/pyproject.toml b/openbb_platform/providers/biztoc/pyproject.toml new file mode 100644 index 000000000000..bfcfc05bc14b --- /dev/null +++ b/openbb_platform/providers/biztoc/pyproject.toml @@ -0,0 +1,19 @@ +[tool.poetry] +name = "openbb-biztoc" +version = "0.1.0a3" +description = "" +authors = ["OpenBB Team "] +readme = "README.md" +packages = [{ include = "openbb_biztoc" }] + +[tool.poetry.dependencies] +python = "^3.8" +openbb-core = "^0.1.0a4" +requests-cache = "^1.1.0" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" + +[tool.poetry.plugins."openbb_provider_extension"] +cboe = "openbb_biztoc:biztoc_provider" diff --git a/openbb_platform/providers/biztoc/tests/__init__.py b/openbb_platform/providers/biztoc/tests/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/openbb_platform/providers/biztoc/tests/record/http/test_biztoc_fetchers/test_biztoc_global_news_fetcher.yaml b/openbb_platform/providers/biztoc/tests/record/http/test_biztoc_fetchers/test_biztoc_global_news_fetcher.yaml new file mode 100644 index 000000000000..7abcaca1a281 --- /dev/null +++ b/openbb_platform/providers/biztoc/tests/record/http/test_biztoc_fetchers/test_biztoc_global_news_fetcher.yaml @@ -0,0 +1,930 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + X-RapidAPI-Host: + - biztoc.p.rapidapi.com + X-RapidAPI-Key: + - MOCK_API_KEY + method: GET + uri: https://biztoc.p.rapidapi.com/pages + response: + body: + string: '["main","crypto","media","hot","wire"] + + ' + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 8151ab47abf72000-IAD + Cache-Control: + - no-store, no-cache, must-revalidate, max-age=0 + Connection: + - keep-alive + Content-Length: + - '39' + Content-Type: + - application/json + Date: + - Thu, 12 Oct 2023 19:15:00 GMT + NEL: + - '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}' + Report-To: + - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=CymLWZlhMr3p%2BEqjjWMz%2FcFjna2HYGBes5m%2FqRlrmkE5sYNMUi2dGWuvbeBL1RpvrBWji7qN3HHlQX4KVDJslXWoayHutaobXmPX2Q4C5MPPg3FdQGhzdOG1yfcdDQev"}],"group":"cf-nel","max_age":604800}' + Server: + - RapidAPI-1.2.8 + X-RapidAPI-Region: + - AWS - us-east-1 + X-RapidAPI-Version: + - 1.2.8 + X-RateLimit-Requests-Limit: + - '2000' + X-RateLimit-Requests-Remaining: + - '1876' + X-RateLimit-Requests-Reset: + - '2089589' + alt-svc: + - h3=":443"; ma=86400 + permissions-policy: + - browsing-topics=() + referrer-policy: + - strict-origin-when-cross-origin + strict-transport-security: + - max-age=31556926; includeSubDomains + vary: + - Accept-Encoding, Cookie + x-content-type-options: + - nosniff + x-midashi-app: + - '1' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + X-RapidAPI-Host: + - biztoc.p.rapidapi.com + X-RapidAPI-Key: + - MOCK_API_KEY + method: GET + uri: https://biztoc.p.rapidapi.com/tags/main + response: + body: + string: !!binary | + H4sIALVFKGUA/3VWwZLsNgi85zP2nFtu+ZVUDlhibMYS+CHJHm8q/x68eVsFM/OOw0iIhu7Gf/3z + 0WH++PODmgKWj39//w4sUKG53/8fIBeZ4RPczxtmVCiKDXVH98dYFYh9pFLOBRFad8GuFhh6utAG + BVsnJmAXzcJQctdRN3/9oN5RQ8J4QnEbU6EE7HHpaC3mJw0/rQ+fEt7HKkmh+yyzyFw8xFsRpRz6 + I5qfute6kq9wMHXMMLocoitqe9+LN2PxoQn5DpWYsQOfsAz/Ahy+Q7R2WV3gjge1xQUajEygMJGH + gkW4juZvVuAFeo+d27YSx86d8ahUCtkMyaji+9Mf7teK3Edaz9D3rkKeMpbstEYl6v6cLCT+VWtD + QFQn4NXqvSmhn0iTRFAapqExIc7n5p9NoFKM0Wg4WqDGjHxpoEqXMLwVd+Ka7GJffOaOrfjioEDF + wJpf1HpxNLJ2wc9JSoEwvY47tgRWJr6+cikVNC2hngI77YFMdCeeXaSg1RRQ36nejdyhHHvaiuEe + mImPhxFHJvJGM0vJhrBBWvzZtsDBNzMOF9sLZKqk2+ghvhjw8xDJkRt3UxBGBpXAhUppoTm2EXSH + INRvuXvAWxWN90xnIjdi4ITPLxrTL7q8U7M/O5FpnluX5IVlttEHY5LqwflqqrQkR4Deb4Uer0nC + pJdoc0nMsSB75Yz2xpPNIgIQUzJG210IVc9JsT9pw3oWbORpugUmYxFuJpKKAeG3GZijp3W7aOUN + XDhje6aa+drpsbSxKVZr41B/ucigtpshYaATz6sE0l8ylJvJRm1/PDPaz5saB8qBkm0Pf0U2NO/z + R9gaddpmYsPpO/2sKbvI7Sz7JX3fxslnq/ig5JHzTjmcv+z8l3s7zHagmpHFdFRvL+sn482Ii8ay + FBIYJKMVs3nKDJbJz+PUUNQX+hz4gJvPxdAy/DAZbNJsS4aez9Qv49ad7H1IfsCNbOML72Aj9nO5 + tjE+NnuyU5jg6MFCV2NNCWURWzvDRA9oi3mkTTEnHzaFX7wJ4kG/73+aja393awqLp0EG3Upr5HF + 2BrWZoptzHDCtWmI/dh2MvFF3hy2qECjk6ikSB7cIeyjPsykfJ0/v1mMU2jODD0QAKov7tr7LEGm + todMUOrH+bVt425jI0/4dNqvr5ujBU88JgiFHy9K6KAzerw/wEK+3MvxbFtClOHCK+nkQbduQN9a + 1dd3V5OwZmxu/tE/wmeTrp9maqgTqhnO37/9Bz30pJSSCwAA + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 8151ab4cdbfb7f82-IAD + Cache-Control: + - no-store, no-cache, must-revalidate, max-age=0 + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '948' + Content-Type: + - application/json + Date: + - Thu, 12 Oct 2023 19:15:01 GMT + NEL: + - '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}' + Report-To: + - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=rnRmkXgNSUm1NZyMHIrWeuHzWUvDiQ%2B3LPMtOwgEUhRwpIruIbFmFOn%2FCYuHYuZsrBPSPcPBEHrS0dP6gidW3K1qtLAH3kj02LzAgVhYQ0gishf6fiowg8Ntd2HPweAE"}],"group":"cf-nel","max_age":604800}' + Server: + - RapidAPI-1.2.8 + X-RapidAPI-Region: + - AWS - us-east-1 + X-RapidAPI-Version: + - 1.2.8 + X-RateLimit-Requests-Limit: + - '2000' + X-RateLimit-Requests-Remaining: + - '1875' + X-RateLimit-Requests-Reset: + - '2089588' + alt-svc: + - h3=":443"; ma=86400 + permissions-policy: + - browsing-topics=() + referrer-policy: + - strict-origin-when-cross-origin + strict-transport-security: + - max-age=31556926; includeSubDomains + vary: + - Accept-Encoding, Cookie + x-content-type-options: + - nosniff + x-midashi-app: + - '1' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + X-RapidAPI-Host: + - biztoc.p.rapidapi.com + X-RapidAPI-Key: + - MOCK_API_KEY + method: GET + uri: https://biztoc.p.rapidapi.com/tags/crypto + response: + body: + string: !!binary | + H4sIALZFKGUA/3VWzW70Ngy89zFy7uELeijQV2l7oCTa5loWBYr2xlv03UtvWoDcpJcsREf8GQ2H + /P2vN4X57be3RJqZ2tvfP/9nmfTDnVAXFNw3ZxqwJWjrBm0SwuK+QIUNCwgOBMnL1y/OkkG4UkOs + lQa3GNKd9E6qKM7SJnWn/0nlQ7pPOU3+ClLLcnZln8/T0Fkhmg2cBAP9dWrQsrcUnMinLAhjl9OZ + 9lE0HrNPb6H0JZVRQX0QGgJYnaFzPeeA3OUHqO3ONDPP1buZuFa+7+NLPKuSfFKpQl6F8+oL5dn7 + Euo9OL++v9BpBjnv0GaPzwIerpwCGBMWFKgXieQIuKv/N8WKs4An5gIb+Lpk+DAzNhzkv5eQhp3q + uXDxECd49ZkXq6Vjmx8LeJ5sVEpFe3eNRHiwp+6FjSG0+psV7zRW6BU8bBCaZVLvdqKCldTzK08B + HFTP98H71cWt0FCh7F1RayjZfHXD29cJslI7MJZzeGyeZBN6kYa9eEyN5758tOgJal72FkBdBVZs + X4AbMOEv3kqrsqfjZllmXvC7HvD+b31jmQO+/+oetPKNwn2GXxH7hgo1RBwmRqZdXmtStS652wUf + c9DcwtXJhISrvzcUrEbBBi8UKTh8mS9SGaKw0cZfv6Somth6mxplKYVG3QNdoBgDwF4Tyh1uvoP2 + MegVt8NDxaufFpkkhzhqLo3yB+H9e2tm7+3gE+Yg9gUOKqGakVn1xksbcWyYPBjdPKvOIGfNS+wF + ZdegdyYm58gQ0r8e4yIZagY/TzrsVffCcmMTlfDqbYbO4p3coKGeFjHwFCu3bQ/vPC5tidp4qq8o + 5wLqsYBKlp4aNx6epGyqZePWBtWAusFLZz1nU8FuFzdsvsGXnZOPLliMGWF4iDYKYwnCtDYyJ6ES + poR1TLcexUUqhaWgQO9Bc7oPngQe5BvIJHE7sVAhD8HnWKSALD0gWVvfQSRgPiNPkylNMR0KDcbW + YDUAK2Hs7SlOrOfAfA6M8M6G18hXWPXPIQZqqy+SdEBLu2VnvKIoMbZeWX+kPWcOWDXCekeZwg6w + cJtXDtO12+5VQ1qbSTue02R5BSnTP/Yf7+/pdv38ivb3B777stOZwuvDYWtcy4t/3M/94uu+J3ZV + gqiSBCLOFcZoXOJm9RRlj1ODw580cA1q7HjbDPPVmKH92Ka15edDzzkGtQEcun6hvtFH0CHlk6/W + +/OnfwBvy8x+OwsAAA== + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 8151ab51fa4f3aea-IAD + Cache-Control: + - no-store, no-cache, must-revalidate, max-age=0 + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '925' + Content-Type: + - application/json + Date: + - Thu, 12 Oct 2023 19:15:02 GMT + NEL: + - '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}' + Report-To: + - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=e3Dqaqp5r5QSLtOc3u6JU%2Flojktm9Cxs2q7OG2iQ7mUYcmcV1fLQREmRo1mHgULiYZT8k3YJImEts0LQADOtvl9kq1d4d3EkfmPCAly4%2BdQ%2FeBOYF4XMeTNOVjHr5T6%2B"}],"group":"cf-nel","max_age":604800}' + Server: + - RapidAPI-1.2.8 + X-RapidAPI-Region: + - AWS - us-east-1 + X-RapidAPI-Version: + - 1.2.8 + X-RateLimit-Requests-Limit: + - '2000' + X-RateLimit-Requests-Remaining: + - '1874' + X-RateLimit-Requests-Reset: + - '2089587' + alt-svc: + - h3=":443"; ma=86400 + permissions-policy: + - browsing-topics=() + referrer-policy: + - strict-origin-when-cross-origin + strict-transport-security: + - max-age=31556926; includeSubDomains + vary: + - Accept-Encoding, Cookie + x-content-type-options: + - nosniff + x-midashi-app: + - '1' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + X-RapidAPI-Host: + - biztoc.p.rapidapi.com + X-RapidAPI-Key: + - MOCK_API_KEY + method: GET + uri: https://biztoc.p.rapidapi.com/tags/media + response: + body: + string: !!binary | + H4sIALdFKGUA/21WS7LcNgzc5xhvnYUr5Y19FScLkIREjEhCBZIja1K5u6EX2wXMm6UgEr/uBvjt + 37cB69vXN+oCWN7++/OXIUOFbr4rJgIaaI9wKefBnIztfz9kLA3HUui7sYyMh8BuLCs8wB6gbfBm + DDsIVJ5tfIxkcxxwFpZ+0GIPaiEPbs5bwT6oEVjrAdJQgnBP1CPfUU7z94YH9ey8RhtZZrUFdVhh + GWKLQoE+eIotW6uqNkriBiU9O3Nla3IN7Z1x0Bho3R6rjdtCnI20nA4WXyzc6uzbKzwFdxbv8w5C + OM7XXbQYzE2AmqVJwHaDSk2JAO2EPG0X973gSxBsyXCn9IBe4G7xFwffyrw6V1D3YbsYqJTAIJat + lVIqiAqMh9oTf9h2am9mKBR91U37pYpBuX68ZuQL/AOrxR3H1JXqLbn6F3VBySaRQe6+kobHybJF + chgV4tZXeFYtR5iu5PcECW3QS5J9CNkWQoLaNbviqPGLCL75UVUOQ5zPjI+gHAOrowJ61UtANQBN + wbSVdF6oD0g0q4UK4hbnqKxxIg9bUqOolSppzpbyFI8w1RtLckgFPLnFv+enT/jFFhKszGNG1ZEj + kDLbfG9YOp7vunY9qgqYG6+XnCq06Yy3WUgHxyWBZ3Dsd+ZjULXtXkXn1YvxY1OV8JqX9oxiq/Vt + SMNCFMFyD/767CgcaHXprsiykr1BA4qftX3nQcvpGnenVmME1ZG1H0qtAG1zVGj2xAKl8JJ5duRl + 9ux791FNeZbpWnfNYCc3Lps2x/ZzZEKRMwh6vfaBd2Weltft8UU7rxeixvao1EOwxfxUnwqoBgRn + L6g0sHdVTMPNt0p7ZCuGIPAgS6ePKsK+O61hZU3SbVWrd10RayHPrLmjVAemvhM2nVvUPA/aYnMJ + KMXpvOJ3ivwBCNANkNw+cdNXI2dthIv/s9sOLrcOWUpSt2SFesPedSGuE0nYlXx3rpZgb1F37w2Z + vXtix6Db2a0PxSj6/ZKDDXib1+xUPV8dgs3zZUydUmejNY8nHESnHbbBFQYrhexiXBR31X9zp924 + UMUM5gNLcWSAVPwU//3sWgsH93qIgrhbZikGWXfUKEBuzqAubbLZaXubRVRDKnscNeii7dO7MmbR + 9xeIOADercNDsIvORn0wIDveqPB0TfjrGlvbC9fUoWaP6xJvbnMFCvTy/RJBRWQb8c7rK6F//vgB + Wc8DbF0LAAA= + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 8151ab57dc8c5908-IAD + Cache-Control: + - no-store, no-cache, must-revalidate, max-age=0 + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '920' + Content-Type: + - application/json + Date: + - Thu, 12 Oct 2023 19:15:03 GMT + NEL: + - '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}' + Report-To: + - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=FR2vOJsQLajCOGMFOiCtwx6NNHE9OKdBibXL4FX0revGUqc8ptf5%2F%2Fvl%2FmYenY9DXz8efXibdJYNSeUAJ6p06UeTPMrrVtZ4wJuxXtYmoP%2FxrZzZiX7keYq6Pg6pzBDb"}],"group":"cf-nel","max_age":604800}' + Server: + - RapidAPI-1.2.8 + X-RapidAPI-Region: + - AWS - us-east-1 + X-RapidAPI-Version: + - 1.2.8 + X-RateLimit-Requests-Limit: + - '2000' + X-RateLimit-Requests-Remaining: + - '1873' + X-RateLimit-Requests-Reset: + - '2089586' + alt-svc: + - h3=":443"; ma=86400 + permissions-policy: + - browsing-topics=() + referrer-policy: + - strict-origin-when-cross-origin + strict-transport-security: + - max-age=31556926; includeSubDomains + vary: + - Accept-Encoding, Cookie + x-content-type-options: + - nosniff + x-midashi-app: + - '1' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + X-RapidAPI-Host: + - biztoc.p.rapidapi.com + X-RapidAPI-Key: + - MOCK_API_KEY + method: GET + uri: https://biztoc.p.rapidapi.com/tags/hot + response: + body: + string: '[] + + ' + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 8151ab5d8aae5a76-IAD + Cache-Control: + - no-store, no-cache, must-revalidate, max-age=0 + Connection: + - keep-alive + Content-Length: + - '3' + Content-Type: + - application/json + Date: + - Thu, 12 Oct 2023 19:15:04 GMT + NEL: + - '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}' + Report-To: + - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=bQ6cqc0YVqRnkRMSrTTMzk%2FNIz1%2BFAGxwpZERmYvJUPlKiU2RJqleXwo2w31kZrjrWz0o1OSk5meieC2k7BTcWtautNimewP9oTNnK7bz32eeAqzdoJOcpMFx8RiIi7y"}],"group":"cf-nel","max_age":604800}' + Server: + - RapidAPI-1.2.8 + X-RapidAPI-Region: + - AWS - us-east-1 + X-RapidAPI-Version: + - 1.2.8 + X-RateLimit-Requests-Limit: + - '2000' + X-RateLimit-Requests-Remaining: + - '1872' + X-RateLimit-Requests-Reset: + - '2089585' + alt-svc: + - h3=":443"; ma=86400 + permissions-policy: + - browsing-topics=() + referrer-policy: + - strict-origin-when-cross-origin + strict-transport-security: + - max-age=31556926; includeSubDomains + vary: + - Accept-Encoding, Cookie + x-content-type-options: + - nosniff + x-midashi-app: + - '1' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + X-RapidAPI-Host: + - biztoc.p.rapidapi.com + X-RapidAPI-Key: + - MOCK_API_KEY + method: GET + uri: https://biztoc.p.rapidapi.com/tags/wire + response: + body: + string: '[] + + ' + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 8151ab62fa2f20b1-IAD + Cache-Control: + - no-store, no-cache, must-revalidate, max-age=0 + Connection: + - keep-alive + Content-Length: + - '3' + Content-Type: + - application/json + Date: + - Thu, 12 Oct 2023 19:15:04 GMT + NEL: + - '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}' + Report-To: + - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=vCyGCo%2BtVBvQbSrnvFBwspJ0rD%2B5pMwtvo%2FXxDBem172KaO0SPsM5hvOLvUoCE55stmHF56KA4oJETMe2DsSo1Eojg2J0kcKQ4gdgm9EOUcf6oRKS%2BKG4O2wWB7uBiCl"}],"group":"cf-nel","max_age":604800}' + Server: + - RapidAPI-1.2.8 + X-RapidAPI-Region: + - AWS - us-east-1 + X-RapidAPI-Version: + - 1.2.8 + X-RateLimit-Requests-Limit: + - '2000' + X-RateLimit-Requests-Remaining: + - '1871' + X-RateLimit-Requests-Reset: + - '2089585' + alt-svc: + - h3=":443"; ma=86400 + permissions-policy: + - browsing-topics=() + referrer-policy: + - strict-origin-when-cross-origin + strict-transport-security: + - max-age=31556926; includeSubDomains + vary: + - Accept-Encoding, Cookie + x-content-type-options: + - nosniff + x-midashi-app: + - '1' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + X-RapidAPI-Host: + - biztoc.p.rapidapi.com + X-RapidAPI-Key: + - MOCK_API_KEY + method: GET + uri: https://biztoc.p.rapidapi.com/sources + response: + body: + string: !!binary | + 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 + A9T++af/ANZGFa71KwAA + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 8151ab68b8ea56c8-IAD + Cache-Control: + - no-store, no-cache, must-revalidate, max-age=0 + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '2694' + Content-Type: + - application/json + Date: + - Thu, 12 Oct 2023 19:15:05 GMT + NEL: + - '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}' + Report-To: + - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=350bGZmVsCpjN90SzQ6k1Xiv03365SzQGR435xb7EWrCnAuFUlh4Cbi8YKb3EB1YPKsqfdPPygSPmv1GpSTiv3zJnDJ6yXTz0zZU9MdqB7AJ1QOzrmC%2FZMTiqpqY6MjI"}],"group":"cf-nel","max_age":604800}' + Server: + - RapidAPI-1.2.8 + X-RapidAPI-Region: + - AWS - us-east-1 + X-RapidAPI-Version: + - 1.2.8 + X-RateLimit-Requests-Limit: + - '2000' + X-RateLimit-Requests-Remaining: + - '1870' + X-RateLimit-Requests-Reset: + - '2089584' + alt-svc: + - h3=":443"; ma=86400 + permissions-policy: + - browsing-topics=() + referrer-policy: + - strict-origin-when-cross-origin + strict-transport-security: + - max-age=31556926; includeSubDomains + vary: + - Accept-Encoding, Cookie + x-content-type-options: + - nosniff + x-midashi-app: + - '1' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + X-RapidAPI-Host: + - biztoc.p.rapidapi.com + X-RapidAPI-Key: + - MOCK_API_KEY + method: GET + uri: https://biztoc.p.rapidapi.com/search?q=earnings + response: + body: + string: !!binary | + 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 + 60D0DevINeucetb/7X/9H3LN8tMBuwAA + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 8151ab6dbf203b95-IAD + Cache-Control: + - no-store, no-cache, must-revalidate, max-age=0 + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '16212' + Content-Type: + - application/json + Date: + - Thu, 12 Oct 2023 19:15:06 GMT + NEL: + - '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}' + Report-To: + - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=1YVn%2F0KK4QH5kYoRJvlrbCjxWiwQU%2BOSS4oCrB4AecLfZrIkX4ar53CFbJfcA1UPJZwPdW8GmQ32WKMnAbv3XEhF06Suc54w7woZhRMCyDQTbKRlXRJJJhkZdnqK19JK"}],"group":"cf-nel","max_age":604800}' + Server: + - RapidAPI-1.2.8 + X-RapidAPI-Region: + - AWS - us-east-1 + X-RapidAPI-Version: + - 1.2.8 + X-RateLimit-Requests-Limit: + - '2000' + X-RateLimit-Requests-Remaining: + - '1869' + X-RateLimit-Requests-Reset: + - '2089583' + alt-svc: + - h3=":443"; ma=86400 + permissions-policy: + - browsing-topics=() + referrer-policy: + - strict-origin-when-cross-origin + strict-transport-security: + - max-age=31556926; includeSubDomains + vary: + - Accept-Encoding, Cookie + x-content-type-options: + - nosniff + x-midashi-app: + - '1' + status: + code: 200 + message: OK +version: 1 diff --git a/openbb_platform/providers/biztoc/tests/test_biztoc_fetchers.py b/openbb_platform/providers/biztoc/tests/test_biztoc_fetchers.py new file mode 100644 index 000000000000..a639a0124729 --- /dev/null +++ b/openbb_platform/providers/biztoc/tests/test_biztoc_fetchers.py @@ -0,0 +1,24 @@ +import pytest +from openbb_biztoc.models.global_news import BiztocGlobalNewsFetcher +from openbb_core.app.service.user_service import UserService + +test_credentials = UserService().default_user_settings.credentials.dict() + + +@pytest.fixture(scope="module") +def vcr_config(): + return { + "filter_headers": [("User-Agent", None), ("X-RapidAPI-Key", "MOCK_API_KEY")], + "filter_query_parameters": [ + ("apikey", "MOCK_API_KEY"), + ], + } + + +@pytest.mark.record_http +def test_biztoc_global_news_fetcher(credentials=test_credentials): + params = {"term": "earnings"} + + fetcher = BiztocGlobalNewsFetcher() + result = fetcher.test(params, credentials) + assert result is None diff --git a/openbb_platform/pyproject.toml b/openbb_platform/pyproject.toml index 84c505bf5f0a..aeec29a75811 100644 --- a/openbb_platform/pyproject.toml +++ b/openbb_platform/pyproject.toml @@ -26,6 +26,7 @@ openbb-stocks = "^0.1.0a3" # Community dependencies openbb-alpha-vantage = { version = "^0.1.0a3", optional = true } +openbb-biztoc = { version = "^0.1.0a3", optional = true } openbb-cboe = { version = "^0.1.0a3", optional = true } openbb-quandl = { version = "^0.1.0a3", optional = true } openbb-yfinance = { version = "^0.1.0a3", optional = true } @@ -39,10 +40,10 @@ openbb-econometrics = { version = "^0.1.0a3", optional = true } [tool.poetry.extras] alpha_vantage = ["openbb-alpha-vantage"] +biztoc = ["openbb-biztoc"] cboe = ["openbb-cboe"] quandl = ["openbb-quandl"] yfinance = ["openbb-yfinance"] -oecd = ["openbb-oecd"] charting = ["openbb-charting"] futures = ["openbb-futures"] qa = ["openbb-qa"] @@ -51,10 +52,10 @@ econometrics = ["openbb-econometrics"] all = [ "openbb-alpha-vantage", + "openbb-biztoc", "openbb-cboe", "openbb-quandl", "openbb-yfinance", - "openbb-oecd", "openbb-charting", "openbb-futures", "openbb-qa", From 7c7b4cae98b8d5c837adc08b6d8fbbedbd0220e3 Mon Sep 17 00:00:00 2001 From: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Date: Thu, 19 Oct 2023 23:19:43 +0200 Subject: [PATCH 02/23] Add Biztoc to workflow --- .github/workflows/platform-api-integration-test.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/platform-api-integration-test.yml b/.github/workflows/platform-api-integration-test.yml index e8a00dd5de30..def45202ec60 100644 --- a/.github/workflows/platform-api-integration-test.yml +++ b/.github/workflows/platform-api-integration-test.yml @@ -57,6 +57,7 @@ jobs: ./openbb_platform/providers/quandl \ ./openbb_platform/providers/yfinance \ ./openbb_platform/providers/oecd \ + ./openbb_platform/providers/biztoc \ ./openbb_platform/extensions/charting \ ./openbb_platform/extensions/futures \ ./openbb_platform/extensions/qa \ @@ -90,7 +91,8 @@ jobs: "fred_api_key": "${{ secrets.FRED_API_KEY }}", "intrinio_api_key": "${{ secrets.INTRINIO_API_KEY }}", "tradingeconomics_api_key": "${{ secrets.TRADINGECONOMICS_API_KEY }}", - "quandl_api_key": "${{ secrets.QUANDL_API_KEY }}" + "quandl_api_key": "${{ secrets.QUANDL_API_KEY }}", + "biztoc_api_key": "${{ secrets.BIZTOC_API_KEY }}" } }' > ~/.openbb_platform/user_settings.json From 494a3fd6c2fc33e9ae5741ab2222e33f5df19645 Mon Sep 17 00:00:00 2001 From: Diogo Sousa Date: Fri, 20 Oct 2023 10:32:30 +0100 Subject: [PATCH 03/23] update readme: credentials --- openbb_platform/platform/core/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openbb_platform/platform/core/README.md b/openbb_platform/platform/core/README.md index 0ff751bba5f4..0ff023cd4a33 100644 --- a/openbb_platform/platform/core/README.md +++ b/openbb_platform/platform/core/README.md @@ -313,6 +313,8 @@ obb.account.refresh() obb.account.logout() ``` +> Note: credentials are stored as Pydantic `SecretStr` objects. This means that they will be masked when printed or displayed in a Jupyter Notebook. To get the actual value, use `obb.user.credentials.polygon_api_key.get_secret_value()`. + ### 4.1.4. Command execution How do we execute commands? From 914572f351aa4133a665f0b268e55be249e96432 Mon Sep 17 00:00:00 2001 From: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Date: Fri, 20 Oct 2023 13:29:05 +0200 Subject: [PATCH 04/23] Add Preferences to README --- openbb_platform/platform/core/README.md | 30 +++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/openbb_platform/platform/core/README.md b/openbb_platform/platform/core/README.md index 0ff023cd4a33..12c2df0de916 100644 --- a/openbb_platform/platform/core/README.md +++ b/openbb_platform/platform/core/README.md @@ -17,6 +17,7 @@ - [4.1.2. Utilities](#412-utilities) - [User settings](#user-settings) - [System settings](#system-settings) + - [Preferences](#preferences) - [Coverage](#coverage) - [4.1.3. OpenBB Hub Account](#413-openbb-hub-account) - [4.1.4. Command execution](#414-command-execution) @@ -26,8 +27,8 @@ - [5.1 HTTPS](#51-https) - [5.2 Docker](#52-docker) - [5.3 Authentication](#53-authentication) - - [5.3.1 HTTP Basic Auth](#531-http-basic-auth) - - [5.3.2 Custom authentication](#532-custom-authentication) + - [5.3.1 HTTP Basic Auth](#531-http-basic-auth) + - [5.3.2 Custom authentication](#532-custom-authentication) - [6. Front-end typing](#6-front-end-typing) ## 1. Introduction @@ -258,6 +259,31 @@ from openbb import obb obb.system ``` +#### Preferences + +Check your preferences by adjusting the `user_settings.json` file inside your home directory. + +The default preferences are: + +```json +{ + "data_directory": "~/.openbb_platform", // Where to store data + "export_directory": "~/.openbb_platform/exports", // Where to store exports + "user_styles_directory": "~/.openbb_platform/styles/user", // Where to store user styles + "charting_extension": "openbb_charting", // Charting extension to use + "chart_style": "dark", // Chart style to use (dark or light) + "plot_enable_pywry": true, // Whether to enable PyWry + "plot_pywry_width": 1400, // PyWry width + "plot_pywry_height": 762, // PyWry height + "plot_open_export": false, // Whether to open plot image exports after they are created + "table_style": "dark", // Table style to use (dark or light) + "request_timeout": 15, // Request timeout + "metadata": true, // Whether to include metadata in the output + "output_type": "OBBject" // Our default output type (OBBject, dataframe, polars, numpy, dict, chart) +} + +``` + #### Coverage Obtain the coverage of providers and commands. From 6a921e487ce05a7dd165e53ad54f227eedddf772 Mon Sep 17 00:00:00 2001 From: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Date: Fri, 20 Oct 2023 14:45:36 +0200 Subject: [PATCH 05/23] improve tests --- .../extensions/news/integration/test_news_api.py | 10 +++++++++- .../extensions/news/integration/test_news_python.py | 10 +++++++++- .../biztoc/openbb_biztoc/models/global_news.py | 1 - 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/openbb_platform/extensions/news/integration/test_news_api.py b/openbb_platform/extensions/news/integration/test_news_api.py index 2389e68f5096..99741924dd59 100644 --- a/openbb_platform/extensions/news/integration/test_news_api.py +++ b/openbb_platform/extensions/news/integration/test_news_api.py @@ -44,7 +44,15 @@ def headers(): "limit": 20, } ), - ({"provider": "biztoc", "filter": "tag", "tag": "federalreserve"}), + ( + { + "provider": "biztoc", + "filter": "tag", + "tag": "federalreserve", + "source": "bloomberg", + "term": "MSFT", + } + ), ], ) @pytest.mark.integration diff --git a/openbb_platform/extensions/news/integration/test_news_python.py b/openbb_platform/extensions/news/integration/test_news_python.py index 65de5ba1a931..cd8754a339c7 100644 --- a/openbb_platform/extensions/news/integration/test_news_python.py +++ b/openbb_platform/extensions/news/integration/test_news_python.py @@ -50,7 +50,15 @@ def obb(pytestconfig): "limit": 20, } ), - ({"provider": "biztoc", "filter": "tag", "tag": "federalreserve"}), + ( + { + "provider": "biztoc", + "filter": "tag", + "tag": "federalreserve", + "source": "bloomberg", + "term": "MSFT", + } + ), ], ) @pytest.mark.integration diff --git a/openbb_platform/providers/biztoc/openbb_biztoc/models/global_news.py b/openbb_platform/providers/biztoc/openbb_biztoc/models/global_news.py index 0895eafb8140..392518c5c244 100644 --- a/openbb_platform/providers/biztoc/openbb_biztoc/models/global_news.py +++ b/openbb_platform/providers/biztoc/openbb_biztoc/models/global_news.py @@ -75,7 +75,6 @@ def extract_data( **kwargs: Any, ) -> List[Dict]: """Extract the data from the Biztoc endpoint.""" - api_key = credentials.get("biztoc_api_key") if credentials else "" data = get_news( From ea5fda0457551aabb6a307ca7a9ff0d4719ec4e1 Mon Sep 17 00:00:00 2001 From: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Date: Fri, 20 Oct 2023 14:55:10 +0200 Subject: [PATCH 06/23] fix biztoc --- openbb_platform/providers/biztoc/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openbb_platform/providers/biztoc/pyproject.toml b/openbb_platform/providers/biztoc/pyproject.toml index bfcfc05bc14b..1e8aa3ff51d2 100644 --- a/openbb_platform/providers/biztoc/pyproject.toml +++ b/openbb_platform/providers/biztoc/pyproject.toml @@ -16,4 +16,4 @@ requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" [tool.poetry.plugins."openbb_provider_extension"] -cboe = "openbb_biztoc:biztoc_provider" +biztoc = "openbb_biztoc:biztoc_provider" From c9199d83f36936d011ba08f151ec9c96eac662ae Mon Sep 17 00:00:00 2001 From: Diogo Sousa Date: Fri, 20 Oct 2023 22:20:18 +0100 Subject: [PATCH 07/23] obbject pylint --- .../core/openbb_core/app/model/obbject.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/openbb_platform/platform/core/openbb_core/app/model/obbject.py b/openbb_platform/platform/core/openbb_core/app/model/obbject.py index aae91d18ddc4..1296d4faca11 100644 --- a/openbb_platform/platform/core/openbb_core/app/model/obbject.py +++ b/openbb_platform/platform/core/openbb_core/app/model/obbject.py @@ -1,6 +1,6 @@ """The OBBject.""" from re import sub -from typing import Any, Dict, Generic, List, Literal, Optional, TypeVar +from typing import TYPE_CHECKING, Any, Dict, Generic, List, Literal, Optional, TypeVar import pandas as pd from numpy import ndarray @@ -14,10 +14,11 @@ from openbb_core.app.provider_interface import ProviderInterface from openbb_core.app.utils import basemodel_to_df -try: - from polars import DataFrame as PolarsDataFrame # type: ignore -except ImportError: - PolarsDataFrame = Any +if TYPE_CHECKING: + try: + from polars import DataFrame as PolarsDataFrame + except ImportError: + PolarsDataFrame = None T = TypeVar("T") PROVIDERS = Literal[tuple(ProviderInterface().available_providers)] # type: ignore @@ -168,14 +169,14 @@ def is_list_of_basemodel(items: List[Any]) -> bool: return df - def to_polars(self) -> PolarsDataFrame: + def to_polars(self) -> "PolarsDataFrame": """Convert results field to polars dataframe.""" try: - from polars import from_pandas # type: ignore - except ImportError: + from polars import from_pandas # pylint: disable=import-outside-toplevel + except ImportError as exc: raise ImportError( "Please install polars: `pip install polars` to use this function." - ) + ) from exc return from_pandas(self.to_dataframe().reset_index()) From 90eeabf82c747e3186f57714d4d7a1a750d77b77 Mon Sep 17 00:00:00 2001 From: Henrique Joaquim Date: Fri, 20 Oct 2023 22:33:54 +0100 Subject: [PATCH 08/23] updating ultima urls (#5587) --- openbb_terminal/keys_controller.py | 2 +- openbb_terminal/miscellaneous/models/all_api_keys.json | 2 +- website/content/terminal/usage/guides/api-keys.md | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/openbb_terminal/keys_controller.py b/openbb_terminal/keys_controller.py index b9d810230281..4b88c10b758c 100644 --- a/openbb_terminal/keys_controller.py +++ b/openbb_terminal/keys_controller.py @@ -1242,7 +1242,7 @@ def call_ultima(self, other_args: List[str]): help="key", ) if not other_args: - console.print("For your API Key, https://ultimainsights.ai/") + console.print("For your API Key, https://ultimainsights.ai/openbb") return if other_args and "-" not in other_args[0][0]: diff --git a/openbb_terminal/miscellaneous/models/all_api_keys.json b/openbb_terminal/miscellaneous/models/all_api_keys.json index 58670f75cd44..a3672fe8c863 100644 --- a/openbb_terminal/miscellaneous/models/all_api_keys.json +++ b/openbb_terminal/miscellaneous/models/all_api_keys.json @@ -3,7 +3,7 @@ "name": "API_ULTIMA_KEY", "source": "Ultima Insights", "link": "https://www.ultimainsights.ai/", - "markdown": "Go to: https://ultimainsights.ai/\n\n![Ultima Insights](https://user-images.githubusercontent.com/1911913/229215125-e3419788-eef3-4389-a3bd-5c08f3333347.png)\n\nClick on, \"Get Started\", to start the sign-up process. After the account has been setup, navigate to [Generate API Key](https://beta.ultimainsights.ai/my-account/generate-api-key) and click \"Generate Key\"." + "markdown": "Go to: https://ultimainsights.ai/openbb\n\n![Ultima Insights](https://user-images.githubusercontent.com/1911913/229215125-e3419788-eef3-4389-a3bd-5c08f3333347.png)\n\nClick on, \"Get Started\", to start the sign-up process. After the account has been setup, navigate to [Generate API Key](https://beta.ultimainsights.ai/my-account/generate-api-key) and click \"Generate Key\"." }, { "name": "API_KEY_ALPHAVANTAGE", diff --git a/website/content/terminal/usage/guides/api-keys.md b/website/content/terminal/usage/guides/api-keys.md index 8de80ae7c96a..173fa77f4894 100644 --- a/website/content/terminal/usage/guides/api-keys.md +++ b/website/content/terminal/usage/guides/api-keys.md @@ -831,11 +831,11 @@ Click on, "Open Account", to start the sign-up process. After the account has be
Instructions -Go to: https://ultimainsights.ai/ +Go to: https://ultimainsights.ai/openbb ![Ultima Insights](https://user-images.githubusercontent.com/1911913/229215125-e3419788-eef3-4389-a3bd-5c08f3333347.png) -Click on, "Get Started", to start the sign-up process. After the account has been setup, navigate to [Generate API Key](https://beta.ultimainsights.ai/my-account/generate-api-key) and click "Generate Key". Copy the API key to the clipboard, and enter this key into the OpenBB Terminal with: +Click on, "Get Started", to start the sign-up process. After the account has been setup, navigate to [Generate API Key](https://ultimainsights.ai/openbb) and click "Generate Key". Copy the API key to the clipboard, and enter this key into the OpenBB Terminal with: ```console /keys/ultima REPLACE_WITH_KEY From 6952dd12e7aeabb8205441c1e5d3f1be2dfbbeca Mon Sep 17 00:00:00 2001 From: Diogo Sousa Date: Sun, 22 Oct 2023 17:34:28 +0100 Subject: [PATCH 09/23] Bug fix: serializ SecretStr before dumping to json --- .../core/openbb_core/app/model/credentials.py | 24 ++++++++++++++++--- .../openbb_core/app/model/hub/hub_session.py | 6 ++++- .../core/openbb_core/app/static/account.py | 2 +- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/openbb_platform/platform/core/openbb_core/app/model/credentials.py b/openbb_platform/platform/core/openbb_core/app/model/credentials.py index 9755a024b1e9..d8d0132fa394 100644 --- a/openbb_platform/platform/core/openbb_core/app/model/credentials.py +++ b/openbb_platform/platform/core/openbb_core/app/model/credentials.py @@ -1,6 +1,6 @@ from typing import Dict, List, Optional, Tuple -from pydantic import ConfigDict, SecretStr, create_model +from pydantic import ConfigDict, SecretStr, create_model, field_serializer from openbb_core.app.provider_interface import ProviderInterface @@ -20,13 +20,31 @@ def format_map( return formatted -Credentials = create_model( # type: ignore +provider_credentials = ProviderInterface().required_credentials + +_Credentials = create_model( # type: ignore "Credentials", __config__=ConfigDict(validate_assignment=True), - **format_map(ProviderInterface().required_credentials), + **format_map(provider_credentials), ) +class Credentials(_Credentials): + """Credentials model used to store provider credentials""" + + @field_serializer(*provider_credentials, when_used="json-unless-none") + def _dump_secret(self, v): + return v.get_secret_value() + + def show(self): + """Unmask credentials and print them""" + print( # noqa: T201 + self.__class__.__name__ + + "\n\n" + + "\n".join([f"{k}: {v}" for k, v in self.model_dump(mode="json").items()]) + ) + + def __repr__(self: Credentials) -> str: return ( self.__class__.__name__ diff --git a/openbb_platform/platform/core/openbb_core/app/model/hub/hub_session.py b/openbb_platform/platform/core/openbb_core/app/model/hub/hub_session.py index 6616b1ddb566..fb0142eafc18 100644 --- a/openbb_platform/platform/core/openbb_core/app/model/hub/hub_session.py +++ b/openbb_platform/platform/core/openbb_core/app/model/hub/hub_session.py @@ -1,6 +1,6 @@ from typing import Optional -from pydantic import BaseModel, SecretStr +from pydantic import BaseModel, SecretStr, field_serializer class HubSession(BaseModel): @@ -15,3 +15,7 @@ def __repr__(self) -> str: return f"{self.__class__.__name__}\n\n" + "\n".join( f"{k}: {v}" for k, v in self.model_dump().items() ) + + @field_serializer("access_token", when_used="json-unless-none") + def _dump_secret(self, v): + return v.get_secret_value() diff --git a/openbb_platform/platform/core/openbb_core/app/static/account.py b/openbb_platform/platform/core/openbb_core/app/static/account.py index 185bf5fab04a..f6d605bdd2d7 100644 --- a/openbb_platform/platform/core/openbb_core/app/static/account.py +++ b/openbb_platform/platform/core/openbb_core/app/static/account.py @@ -117,7 +117,7 @@ def login( if not hs.session: raise OpenBBError("Not connected to hub.") - json.dump(hs.session.model_dump(), f, indent=4) + json.dump(hs.session.model_dump(mode="json"), f, indent=4) return self._base_app._command_runner.user_settings From 58b5e6915bcdcaf8f782551a67f2fb46d4af4125 Mon Sep 17 00:00:00 2001 From: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Date: Mon, 23 Oct 2023 11:05:08 +0100 Subject: [PATCH 10/23] export credentials as json (#5592) --- .../alpha_vantage/tests/test_alpha_vantage_fetchers.py | 4 +++- .../providers/benzinga/tests/test_benzinga_fetchers.py | 4 +++- openbb_platform/providers/cboe/tests/test_cboe_fetchers.py | 4 +++- openbb_platform/providers/fmp/tests/test_fmp_fetchers.py | 4 +++- openbb_platform/providers/fred/tests/test_fred_fetchers.py | 4 +++- .../providers/intrinio/tests/test_intrinio_fetchers.py | 4 +++- openbb_platform/providers/oecd/tests/test_oecd_fetchers.py | 4 +++- .../providers/polygon/tests/test_polygon_fetchers.py | 4 +++- .../providers/quandl/tests/test_quandl_fetchers.py | 4 +++- openbb_platform/providers/tests/utils/unit_tests_generator.py | 2 +- .../tradingeconomics/tests/test_tradingeconomics_fetchers.py | 4 +++- .../providers/yfinance/tests/test_yfinance_fetchers.py | 4 +++- 12 files changed, 34 insertions(+), 12 deletions(-) diff --git a/openbb_platform/providers/alpha_vantage/tests/test_alpha_vantage_fetchers.py b/openbb_platform/providers/alpha_vantage/tests/test_alpha_vantage_fetchers.py index d1d65e00177e..261b8b2d9b3b 100644 --- a/openbb_platform/providers/alpha_vantage/tests/test_alpha_vantage_fetchers.py +++ b/openbb_platform/providers/alpha_vantage/tests/test_alpha_vantage_fetchers.py @@ -4,7 +4,9 @@ from openbb_alpha_vantage.models.stock_historical import AVStockHistoricalFetcher from openbb_core.app.service.user_service import UserService -test_credentials = UserService().default_user_settings.credentials.model_dump() +test_credentials = UserService().default_user_settings.credentials.model_dump( + mode="json" +) @pytest.fixture(scope="module") diff --git a/openbb_platform/providers/benzinga/tests/test_benzinga_fetchers.py b/openbb_platform/providers/benzinga/tests/test_benzinga_fetchers.py index d47a4d0548e5..a3f7914762f7 100644 --- a/openbb_platform/providers/benzinga/tests/test_benzinga_fetchers.py +++ b/openbb_platform/providers/benzinga/tests/test_benzinga_fetchers.py @@ -3,7 +3,9 @@ from openbb_benzinga.models.stock_news import BenzingaStockNewsFetcher from openbb_core.app.service.user_service import UserService -test_credentials = UserService().default_user_settings.credentials.model_dump() +test_credentials = UserService().default_user_settings.credentials.model_dump( + mode="json" +) @pytest.fixture(scope="module") diff --git a/openbb_platform/providers/cboe/tests/test_cboe_fetchers.py b/openbb_platform/providers/cboe/tests/test_cboe_fetchers.py index 6993fcc31816..277dc6960d41 100644 --- a/openbb_platform/providers/cboe/tests/test_cboe_fetchers.py +++ b/openbb_platform/providers/cboe/tests/test_cboe_fetchers.py @@ -20,7 +20,9 @@ from openbb_cboe.models.stock_search import CboeStockSearchFetcher from openbb_core.app.service.user_service import UserService -test_credentials = UserService().default_user_settings.credentials.model_dump() +test_credentials = UserService().default_user_settings.credentials.model_dump( + mode="json" +) @pytest.fixture(scope="module") diff --git a/openbb_platform/providers/fmp/tests/test_fmp_fetchers.py b/openbb_platform/providers/fmp/tests/test_fmp_fetchers.py index be931874f96e..f2d49a87ed02 100644 --- a/openbb_platform/providers/fmp/tests/test_fmp_fetchers.py +++ b/openbb_platform/providers/fmp/tests/test_fmp_fetchers.py @@ -47,7 +47,9 @@ from openbb_fmp.models.stock_splits import FMPStockSplitCalendarFetcher from openbb_fmp.models.treasury_rates import FMPTreasuryRatesFetcher -test_credentials = UserService().default_user_settings.credentials.model_dump() +test_credentials = UserService().default_user_settings.credentials.model_dump( + mode="json" +) @pytest.fixture(scope="module") diff --git a/openbb_platform/providers/fred/tests/test_fred_fetchers.py b/openbb_platform/providers/fred/tests/test_fred_fetchers.py index c9e8b34c0ebb..91698ce80866 100644 --- a/openbb_platform/providers/fred/tests/test_fred_fetchers.py +++ b/openbb_platform/providers/fred/tests/test_fred_fetchers.py @@ -10,7 +10,9 @@ from openbb_fred.models.sonia_rates import FREDSONIAFetcher from openbb_fred.models.us_yield_curve import FREDYieldCurveFetcher -test_credentials = UserService().default_user_settings.credentials.model_dump() +test_credentials = UserService().default_user_settings.credentials.model_dump( + mode="json" +) @pytest.fixture(scope="module") diff --git a/openbb_platform/providers/intrinio/tests/test_intrinio_fetchers.py b/openbb_platform/providers/intrinio/tests/test_intrinio_fetchers.py index 1864cf22ef1b..5ea472460fdd 100644 --- a/openbb_platform/providers/intrinio/tests/test_intrinio_fetchers.py +++ b/openbb_platform/providers/intrinio/tests/test_intrinio_fetchers.py @@ -13,7 +13,9 @@ from openbb_intrinio.models.stock_news import IntrinioStockNewsFetcher from openbb_intrinio.models.stock_quote import IntrinioStockQuoteFetcher -test_credentials = UserService().default_user_settings.credentials.model_dump() +test_credentials = UserService().default_user_settings.credentials.model_dump( + mode="json" +) @pytest.fixture(scope="module") diff --git a/openbb_platform/providers/oecd/tests/test_oecd_fetchers.py b/openbb_platform/providers/oecd/tests/test_oecd_fetchers.py index dd51dd994eb4..be53b64f05dc 100644 --- a/openbb_platform/providers/oecd/tests/test_oecd_fetchers.py +++ b/openbb_platform/providers/oecd/tests/test_oecd_fetchers.py @@ -6,7 +6,9 @@ from openbb_oecd.models.gdpnom import OECDGDPNomFetcher from openbb_oecd.models.gdpreal import OECDGDPRealFetcher -test_credentials = UserService().default_user_settings.credentials.model_dump() +test_credentials = UserService().default_user_settings.credentials.model_dump( + mode="json" +) @pytest.fixture(scope="module") diff --git a/openbb_platform/providers/polygon/tests/test_polygon_fetchers.py b/openbb_platform/providers/polygon/tests/test_polygon_fetchers.py index 966078c6e3ed..bc9d80711701 100644 --- a/openbb_platform/providers/polygon/tests/test_polygon_fetchers.py +++ b/openbb_platform/providers/polygon/tests/test_polygon_fetchers.py @@ -14,7 +14,9 @@ from openbb_polygon.models.stock_historical import PolygonStockHistoricalFetcher from openbb_polygon.models.stock_news import PolygonStockNewsFetcher -test_credentials = UserService().default_user_settings.credentials.model_dump() +test_credentials = UserService().default_user_settings.credentials.model_dump( + mode="json" +) @pytest.fixture(scope="module") diff --git a/openbb_platform/providers/quandl/tests/test_quandl_fetchers.py b/openbb_platform/providers/quandl/tests/test_quandl_fetchers.py index ffc902502484..a15e2adfe71b 100644 --- a/openbb_platform/providers/quandl/tests/test_quandl_fetchers.py +++ b/openbb_platform/providers/quandl/tests/test_quandl_fetchers.py @@ -4,7 +4,9 @@ from openbb_quandl.models.cot_search import QuandlCotSearchFetcher from openbb_quandl.models.sp500_multiples import QuandlSP500MultiplesFetcher -test_credentials = UserService().default_user_settings.credentials.model_dump() +test_credentials = UserService().default_user_settings.credentials.model_dump( + mode="json" +) @pytest.fixture(scope="module") diff --git a/openbb_platform/providers/tests/utils/unit_tests_generator.py b/openbb_platform/providers/tests/utils/unit_tests_generator.py index c97f3a8d73df..a21c688c960b 100644 --- a/openbb_platform/providers/tests/utils/unit_tests_generator.py +++ b/openbb_platform/providers/tests/utils/unit_tests_generator.py @@ -85,7 +85,7 @@ def write_test_credentials(path: str, provider: str) -> None: ) template = """ -test_credentials = UserService().default_user_settings.credentials.model_dump() +test_credentials = UserService().default_user_settings.credentials.model_dump(mode="json") @pytest.fixture(scope="module") diff --git a/openbb_platform/providers/tradingeconomics/tests/test_tradingeconomics_fetchers.py b/openbb_platform/providers/tradingeconomics/tests/test_tradingeconomics_fetchers.py index 3bf2beccb671..7110cad4acf1 100644 --- a/openbb_platform/providers/tradingeconomics/tests/test_tradingeconomics_fetchers.py +++ b/openbb_platform/providers/tradingeconomics/tests/test_tradingeconomics_fetchers.py @@ -4,7 +4,9 @@ from openbb_core.app.service.user_service import UserService from openbb_tradingeconomics.models.economic_calendar import TEEarningsCalendarFetcher -test_credentials = UserService().default_user_settings.credentials.model_dump() +test_credentials = UserService().default_user_settings.credentials.model_dump( + mode="json" +) @pytest.fixture(scope="module") diff --git a/openbb_platform/providers/yfinance/tests/test_yfinance_fetchers.py b/openbb_platform/providers/yfinance/tests/test_yfinance_fetchers.py index 4f4e877e5376..2a61f93224f0 100644 --- a/openbb_platform/providers/yfinance/tests/test_yfinance_fetchers.py +++ b/openbb_platform/providers/yfinance/tests/test_yfinance_fetchers.py @@ -16,7 +16,9 @@ from openbb_yfinance.models.stock_historical import YFinanceStockHistoricalFetcher from openbb_yfinance.models.stock_news import YFinanceStockNewsFetcher -test_credentials = UserService().default_user_settings.credentials.model_dump() +test_credentials = UserService().default_user_settings.credentials.model_dump( + mode="json" +) @pytest.fixture(scope="module") From 5d9d71ec856fa4299de732dba7f4ce9a9c328fbb Mon Sep 17 00:00:00 2001 From: Abhishek Amar <66067391+abhishek-amar@users.noreply.github.com> Date: Tue, 24 Oct 2023 00:04:12 +0530 Subject: [PATCH 11/23] fix: A value is trying to be set on a copy of a slice from a DataFrame #5582 (#5591) --- openbb_terminal/stocks/fundamental_analysis/fmp_model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openbb_terminal/stocks/fundamental_analysis/fmp_model.py b/openbb_terminal/stocks/fundamental_analysis/fmp_model.py index 6406c072b320..bbec51931d90 100644 --- a/openbb_terminal/stocks/fundamental_analysis/fmp_model.py +++ b/openbb_terminal/stocks/fundamental_analysis/fmp_model.py @@ -647,7 +647,7 @@ def clean_metrics_df(data: pd.DataFrame, num: int, mask: bool = False) -> pd.Dat """ # iloc will fail if number is greater than number of columns num = min(num, data.shape[1]) - data = data.iloc[:, 0:num] + data = data.iloc[:, 0:num].copy() if mask: data = data.mask(data.astype(object).eq(num * ["None"])).dropna() From b4db72f5e856e378ee662015868225ca0f4abc8d Mon Sep 17 00:00:00 2001 From: DidierRLopes Date: Mon, 23 Oct 2023 17:08:07 -0700 Subject: [PATCH 12/23] Update README.md (#5598) --- README.md | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index d4618e4c529c..598a545fd634 100644 --- a/README.md +++ b/README.md @@ -12,32 +12,35 @@ -OpenBB is committed to building the future of investment research by focusing on an open-source infrastructure accessible to everyone, everywhere. +The first financial terminal that is free and fully open source. With over 600 commands, the terminal has access to equity, options, crypto, forex, macro economy, fixed income, alternative datasets, and more. -

+Sign up to the [OpenBB Hub](https://my.openbb.co/login) to use our Windows or MacOS installers to get started. + + +

Getting started with the OpenBB Terminal

+ +

- + OpenBB Terminal Illustration -

Click on the GIF above for a DEMO

-

- ≪ GETTING STARTED + ≪ INSTALL   ·   - - CONTRIBUTING + + DATA   ·   - - DOCUMENTATION + + SEE FEATURES   ·   - - SEE FEATURES » + + CONTRIBUTING »

From 88b49d5c8e219d28d78838759e7e7a97fbe572f4 Mon Sep 17 00:00:00 2001 From: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Date: Tue, 24 Oct 2023 10:47:26 +0200 Subject: [PATCH 13/23] Check for wrong, changed, or outdated params. (#5597) --- .../stocks/integration/test_stocks_api.py | 2 - .../stocks/integration/test_stocks_python.py | 4 +- .../tests/test_integration_tests_api.py | 7 +- .../tests/test_integration_tests_python.py | 7 +- .../tests/utils/integration_tests_testers.py | 72 +++++++++++++++++++ 5 files changed, 85 insertions(+), 7 deletions(-) diff --git a/openbb_platform/extensions/stocks/integration/test_stocks_api.py b/openbb_platform/extensions/stocks/integration/test_stocks_api.py index ad0545c03aba..1469edc6af23 100644 --- a/openbb_platform/extensions/stocks/integration/test_stocks_api.py +++ b/openbb_platform/extensions/stocks/integration/test_stocks_api.py @@ -377,8 +377,6 @@ def test_stocks_fa_income_growth(params, headers): { "symbol": "AAPL", "transactionType": "P-Purchase", - "reportingCik": 3571, - "companyCik": 3571, "page": 1, "provider": "fmp", } diff --git a/openbb_platform/extensions/stocks/integration/test_stocks_python.py b/openbb_platform/extensions/stocks/integration/test_stocks_python.py index 045216b29c2c..9ce6bdb186d1 100644 --- a/openbb_platform/extensions/stocks/integration/test_stocks_python.py +++ b/openbb_platform/extensions/stocks/integration/test_stocks_python.py @@ -364,9 +364,7 @@ def test_stocks_fa_income_growth(params, obb): ( { "symbol": "AAPL", - "transactionType": ["P-Purchase"], - "reportingCik": 1, - "companyCik": 1, + "transactionType": "P-Purchase", "page": 1, } ), diff --git a/openbb_platform/extensions/tests/test_integration_tests_api.py b/openbb_platform/extensions/tests/test_integration_tests_api.py index b85d0892bf28..e1022c812182 100644 --- a/openbb_platform/extensions/tests/test_integration_tests_api.py +++ b/openbb_platform/extensions/tests/test_integration_tests_api.py @@ -4,6 +4,7 @@ from extensions.tests.utils.integration_tests_testers import ( check_missing_integration_test_params, check_missing_integration_test_providers, + check_wrong_integration_test_params, get_integration_tests, get_module_functions, ) @@ -28,9 +29,13 @@ def test_api_interface_integration_test_params() -> None: run_test("api", check_missing_integration_test_params) +def test_api_interface_wrong_integration_test_params() -> None: + """Test if there are any wrong params for integration tests.""" + run_test("api", check_wrong_integration_test_params) + + def test_charting_extension_function_coverage() -> None: """Test if all charting extension functions are covered by integration tests.""" - functions = ChartingService.get_implemented_charting_functions() test_names = [f"test_chart_{func}" for func in functions] integration_tests_modules = get_integration_tests( diff --git a/openbb_platform/extensions/tests/test_integration_tests_python.py b/openbb_platform/extensions/tests/test_integration_tests_python.py index c850ba9059a4..9deede09e2ff 100644 --- a/openbb_platform/extensions/tests/test_integration_tests_python.py +++ b/openbb_platform/extensions/tests/test_integration_tests_python.py @@ -4,6 +4,7 @@ from extensions.tests.utils.integration_tests_testers import ( check_missing_integration_test_params, check_missing_integration_test_providers, + check_wrong_integration_test_params, get_integration_tests, get_module_functions, ) @@ -28,9 +29,13 @@ def test_python_interface_integration_test_params() -> None: run_test("python", check_missing_integration_test_params) +def test_python_interface_wrong_integration_test_params() -> None: + """Test if there are any wrong params for integration tests.""" + run_test("python", check_wrong_integration_test_params) + + def test_charting_extension_function_coverage() -> None: """Test if all charting extension functions are covered by integration tests.""" - functions = ChartingService.get_implemented_charting_functions() test_names = [f"test_chart_{func}" for func in functions] integration_tests_modules = get_integration_tests( diff --git a/openbb_platform/extensions/tests/utils/integration_tests_testers.py b/openbb_platform/extensions/tests/utils/integration_tests_testers.py index d85e8ce1d2e5..2c9b11c5e4ac 100644 --- a/openbb_platform/extensions/tests/utils/integration_tests_testers.py +++ b/openbb_platform/extensions/tests/utils/integration_tests_testers.py @@ -94,6 +94,73 @@ def check_missing_providers( return missing_providers +def check_wrong_params( + command_params: Union[Dict[str, Dict[str, dict]], List[Tuple[Dict[str, str], str]]], + function_params: List[dict], + function, + processing: bool = False, +) -> List[str]: + """Check if there are any wrong params passed to a command.""" + wrong_params = [] + if not processing: + for i, test_params in enumerate(function_params): + if "provider" in test_params and i != 0: + provider = test_params["provider"] + if provider in command_params: + for param in test_params: + if ( + param + not in command_params[provider]["QueryParams"]["fields"] + and param + not in command_params["openbb"]["QueryParams"]["fields"] # type: ignore + and param != "provider" + ): + wrong_params.append( + f"Wrong param {param} for provider {provider} in function {function}" + ) + elif isinstance(command_params, dict): + providers = list(command_params.keys()) + providers.remove("openbb") + for param in test_params: + is_wrong_param = True + for provider in providers: + if ( + param in command_params[provider]["QueryParams"]["fields"] + or param + in command_params["openbb"]["QueryParams"]["fields"] + or param == "provider" + ): + is_wrong_param = False + break + + if is_wrong_param: + wrong_params.append( + f"Wrong param {param} in function {function}" + ) + + else: + for test_params in function_params: + if isinstance(command_params, list): + try: + iter_commands_params = command_params[0][0] + except KeyError: + iter_commands_params = command_params[0] # type: ignore + + if isinstance(test_params, dict): + param_keys = test_params.keys() + elif isinstance(test_params, tuple) and all( + isinstance(item, dict) for item in test_params + ): + param_keys = [key for item in test_params for key in item] + else: + continue # Skip this iteration if test_params is neither a dict nor a tuple of dicts + + for key in param_keys: + if key not in iter_commands_params and key != "return": + wrong_params.append(f"Wrong param {key} in function {function}") + return wrong_params + + def check_missing_params( command_params: Union[Dict[str, Dict[str, dict]], List[Tuple[Dict[str, str], str]]], function_params: List[dict], @@ -206,3 +273,8 @@ def check_missing_integration_test_providers(functions: Dict[str, Any]) -> List[ def check_missing_integration_test_params(functions: Dict[str, Any]) -> List[str]: """Check if there are any missing params for integration tests.""" return check_integration_tests(functions, check_missing_params) + + +def check_wrong_integration_test_params(functions: Dict[str, Any]) -> List[str]: + """Check if there are any wrong params for integration tests.""" + return check_integration_tests(functions, check_wrong_params) From 55799d9dc4c0ca8a9b9510abf75cee7861a9f69b Mon Sep 17 00:00:00 2001 From: Pratyush Shukla Date: Wed, 25 Oct 2023 15:34:45 +0530 Subject: [PATCH 14/23] Improving `economy.cpi` for the FRED data (#5602) * remove multiindex using coding magic * Update field descriptions --------- Co-authored-by: Theodore Aptekarev --- .../openbb_provider/standard_models/cpi.py | 16 +++----- .../openbb_provider/utils/descriptions.py | 8 +++- .../providers/fred/openbb_fred/models/cpi.py | 38 +++++++++++-------- 3 files changed, 34 insertions(+), 28 deletions(-) diff --git a/openbb_platform/platform/provider/openbb_provider/standard_models/cpi.py b/openbb_platform/platform/provider/openbb_provider/standard_models/cpi.py index 571a59a48575..7943416ad8cd 100644 --- a/openbb_platform/platform/provider/openbb_provider/standard_models/cpi.py +++ b/openbb_platform/platform/provider/openbb_provider/standard_models/cpi.py @@ -2,6 +2,7 @@ from datetime import date as dateType from typing import List, Literal, Optional +from dateutil import parser from pydantic import Field, field_validator from openbb_provider.abstract.data import Data @@ -91,15 +92,10 @@ class CPIQueryParams(QueryParams): class CPIData(Data): """CPI data.""" - date: Optional[dateType] = Field( - default=None, description=DATA_DESCRIPTIONS.get("date") - ) - value: Optional[float] = Field(default=None, description="CPI value on the date.") + date: dateType = Field(description=DATA_DESCRIPTIONS.get("date")) - @field_validator("value", mode="before") + @field_validator("date", mode="before") @classmethod - def value_validate(cls, v: str): # pylint: disable=E0213 - """Validate value.""" - if v == ".": - return 0.0 - return float(v) + def date_validate(cls, v): + """Validate date.""" + return parser.isoparse(v) diff --git a/openbb_platform/platform/provider/openbb_provider/utils/descriptions.py b/openbb_platform/platform/provider/openbb_provider/utils/descriptions.py index 5e4c82c61565..7384677b34e5 100644 --- a/openbb_platform/platform/provider/openbb_provider/utils/descriptions.py +++ b/openbb_platform/platform/provider/openbb_provider/utils/descriptions.py @@ -11,8 +11,12 @@ "date": "A specific date to get data for.", "limit": "The number of data entries to return.", "countries": "The country or countries to get data.", - "units": "The data units.", - "frequency": "The data time frequency.", + "units": """The unit of measurement for the CPI data. + Options: + - `growth_previous`: growth from the previous period + - `growth_same`: growth from the same period in the previous year + - `index_2015`: index with base year 2015.""", + "frequency": "The frequency of the data points; options include `monthly`, `quarter`, and `annual`", } DATA_DESCRIPTIONS = { diff --git a/openbb_platform/providers/fred/openbb_fred/models/cpi.py b/openbb_platform/providers/fred/openbb_fred/models/cpi.py index b37e150e18c6..f8af6605bdd8 100644 --- a/openbb_platform/providers/fred/openbb_fred/models/cpi.py +++ b/openbb_platform/providers/fred/openbb_fred/models/cpi.py @@ -17,11 +17,9 @@ class FREDCPIData(CPIData): """CPI data.""" -class FREDCPIFetcher(Fetcher[FREDCPIQueryParams, List[Dict[str, List[FREDCPIData]]]]): +class FREDCPIFetcher(Fetcher[FREDCPIQueryParams, List[FREDCPIData]]): """FRED CPI Fetcher.""" - data_type = FREDCPIData - @staticmethod def transform_query(params: Dict[str, Any]) -> FREDCPIQueryParams: return FREDCPIQueryParams(**params) @@ -29,7 +27,7 @@ def transform_query(params: Dict[str, Any]) -> FREDCPIQueryParams: @staticmethod def extract_data( query: FREDCPIQueryParams, credentials: Optional[Dict[str, str]], **kwargs: Any - ) -> dict: + ) -> Dict: api_key = credentials.get("fred_api_key") if credentials else "" all_options = all_cpi_options(query.harmonized) @@ -41,23 +39,31 @@ def extract_data( series_dict = {} fred = Fred(api_key) for item in step_3: - loc = f"{item['country']}-{item['frequency']}-{item['units']}" + loc = f"{item['country']}" temp = fred.get_series( item["series_id"], query.start_date, query.end_date, **kwargs ) - series_dict[loc] = temp + temp = [{"date": item["date"], "value": item["value"]} for item in temp] + series_dict[loc] = [item for item in temp if item["value"] != "."] return series_dict @staticmethod def transform_data( - query: FREDCPIQueryParams, data: dict, **kwargs: Any - ) -> List[Dict[str, List[FREDCPIData]]]: - for key, value in data.items(): - data[key] = [ - FREDCPIData(date=x["date"], value=x["value"]) - for x in value - if x["value"] != "." - ] - - return [data] + query: FREDCPIQueryParams, data: Dict, **kwargs: Any + ) -> List[FREDCPIData]: + transformed_data = {} + + # Iterate over the series_dict + for country, data_list in data.items(): + for item in data_list: + # If the date is not in the dictionary, add it + if item["date"] not in transformed_data: + transformed_data[item["date"]] = {"date": item["date"]} + # Update the dictionary with the country's value data + transformed_data[item["date"]].update({country: item["value"]}) + + # Convert the dictionary to a list of dictionaries + transformed_data = list(transformed_data.values()) + + return [FREDCPIData.model_validate(item) for item in transformed_data] From 912fc6d1f9475e82e9b84feceb4cd2da8d7e5539 Mon Sep 17 00:00:00 2001 From: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Date: Wed, 25 Oct 2023 12:56:16 +0200 Subject: [PATCH 15/23] Improve error message. --- .../provider/tests/standard_models/test_standard_models.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/openbb_platform/platform/provider/tests/standard_models/test_standard_models.py b/openbb_platform/platform/provider/tests/standard_models/test_standard_models.py index 157a5269ea92..9a759bec1532 100644 --- a/openbb_platform/platform/provider/tests/standard_models/test_standard_models.py +++ b/openbb_platform/platform/provider/tests/standard_models/test_standard_models.py @@ -49,9 +49,13 @@ def test_standard_models(standard_model): assert QUERY_DESCRIPTIONS[name] in field.description, ( f"Description for {name} is incorrect for the {standard_model.__name__}.\n" f"Please modify or change the field name to a non-reserved name." + f"To get a full list of reserved descriptions, navigate to openbb_provider.utils.descriptions.py" + f"You can also add extra information to the existing reserved field description in your model." ) elif name in DATA_DESCRIPTIONS: assert DATA_DESCRIPTIONS[name] in field.description, ( f"Description for {name} is incorrect for the {standard_model.__name__}.\n" f"Please modify or change the field name to a non-reserved name." + f"To get a full list of reserved descriptions, navigate to openbb_provider.utils.descriptions.py" + f"You can also add extra information to the existing reserved field description in your model." ) From 863653d84b99be397d896f3528f2639f2ff549d8 Mon Sep 17 00:00:00 2001 From: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Date: Wed, 25 Oct 2023 12:57:51 +0200 Subject: [PATCH 16/23] Improve --- .../provider/tests/standard_models/test_standard_models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openbb_platform/platform/provider/tests/standard_models/test_standard_models.py b/openbb_platform/platform/provider/tests/standard_models/test_standard_models.py index 9a759bec1532..424f842b91de 100644 --- a/openbb_platform/platform/provider/tests/standard_models/test_standard_models.py +++ b/openbb_platform/platform/provider/tests/standard_models/test_standard_models.py @@ -48,14 +48,14 @@ def test_standard_models(standard_model): if name in QUERY_DESCRIPTIONS: assert QUERY_DESCRIPTIONS[name] in field.description, ( f"Description for {name} is incorrect for the {standard_model.__name__}.\n" - f"Please modify or change the field name to a non-reserved name." + f"Please modify the description or change the field name to a non-reserved name." f"To get a full list of reserved descriptions, navigate to openbb_provider.utils.descriptions.py" f"You can also add extra information to the existing reserved field description in your model." ) elif name in DATA_DESCRIPTIONS: assert DATA_DESCRIPTIONS[name] in field.description, ( f"Description for {name} is incorrect for the {standard_model.__name__}.\n" - f"Please modify or change the field name to a non-reserved name." + f"Please modify the description or change the field name to a non-reserved name." f"To get a full list of reserved descriptions, navigate to openbb_provider.utils.descriptions.py" f"You can also add extra information to the existing reserved field description in your model." ) From 8e1231d5ad8d2372a1d93d4d15703aca7813c02c Mon Sep 17 00:00:00 2001 From: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Date: Wed, 25 Oct 2023 17:38:55 +0200 Subject: [PATCH 17/23] Test tests (#5607) * Test tests * Add test --- .../ta/integration/test_ta_python.py | 18 +++++++++++ .../tests/test_integration_tests_api.py | 7 +++++ .../tests/test_integration_tests_python.py | 7 +++++ .../utils/integration_tests_api_generator.py | 15 +++++----- .../tests/utils/integration_tests_testers.py | 30 +++++++++++++++++++ 5 files changed, 69 insertions(+), 8 deletions(-) diff --git a/openbb_platform/extensions/ta/integration/test_ta_python.py b/openbb_platform/extensions/ta/integration/test_ta_python.py index e3541447751a..aecf55bf1913 100644 --- a/openbb_platform/extensions/ta/integration/test_ta_python.py +++ b/openbb_platform/extensions/ta/integration/test_ta_python.py @@ -608,6 +608,24 @@ def test_ta_adx(params, data_type, obb): assert len(result.results) > 0 +@pytest.mark.parametrize( + "params, data_type", + [ + ({"data": "", "index": "", "offset": ""}, "stocks"), + ({"data": "", "index": "date", "offset": "5"}, "crypto"), + ], +) +@pytest.mark.integration +def test_ta_ad(params, data_type, obb): + params = {p: v for p, v in params.items() if v} + params["data"] = get_data(data_type) + + result = obb.ta.ad(**params) + assert result + assert isinstance(result, OBBject) + assert len(result.results) > 0 + + @pytest.mark.parametrize( "params, data_type", [ diff --git a/openbb_platform/extensions/tests/test_integration_tests_api.py b/openbb_platform/extensions/tests/test_integration_tests_api.py index e1022c812182..4731c80b4446 100644 --- a/openbb_platform/extensions/tests/test_integration_tests_api.py +++ b/openbb_platform/extensions/tests/test_integration_tests_api.py @@ -4,6 +4,7 @@ from extensions.tests.utils.integration_tests_testers import ( check_missing_integration_test_params, check_missing_integration_test_providers, + check_missing_integration_tests, check_wrong_integration_test_params, get_integration_tests, get_module_functions, @@ -51,3 +52,9 @@ def test_charting_extension_function_coverage() -> None: ] assert missing_items == [], "\n".join(missing_items) + + +def test_missing_api_integration_tests() -> None: + """Check if there are missing tests.""" + missing = check_missing_integration_tests(test_type="api") + assert not missing, "\n".join(missing) diff --git a/openbb_platform/extensions/tests/test_integration_tests_python.py b/openbb_platform/extensions/tests/test_integration_tests_python.py index 9deede09e2ff..af7baee69e73 100644 --- a/openbb_platform/extensions/tests/test_integration_tests_python.py +++ b/openbb_platform/extensions/tests/test_integration_tests_python.py @@ -4,6 +4,7 @@ from extensions.tests.utils.integration_tests_testers import ( check_missing_integration_test_params, check_missing_integration_test_providers, + check_missing_integration_tests, check_wrong_integration_test_params, get_integration_tests, get_module_functions, @@ -51,3 +52,9 @@ def test_charting_extension_function_coverage() -> None: ] assert missing_items == [], "\n".join(missing_items) + + +def test_missing_api_integration_tests() -> None: + """Check if there are missing tests.""" + missing = check_missing_integration_tests(test_type="python") + assert not missing, "\n".join(missing) diff --git a/openbb_platform/extensions/tests/utils/integration_tests_api_generator.py b/openbb_platform/extensions/tests/utils/integration_tests_api_generator.py index 09b7638abf12..75b23dbd0f13 100644 --- a/openbb_platform/extensions/tests/utils/integration_tests_api_generator.py +++ b/openbb_platform/extensions/tests/utils/integration_tests_api_generator.py @@ -1,3 +1,4 @@ +"""Generate API integration tests.""" import argparse import os from typing import Dict, List, Literal, Type, get_type_hints @@ -25,7 +26,6 @@ def get_post_flat_params(hints: Dict[str, Type]): def write_init_test_template(http_method: str, path: str): """Write some common initialization for the tests with the defined template.""" - http_template_imports = {"get": "", "post": "import json"} template = http_template_imports[http_method] template += """ @@ -57,7 +57,6 @@ def write_test_w_template( chart: bool = False, ): """Write the test with the defined template.""" - params_str = ",\n".join([f"({params})" for params in params_list]) http_template_request = { @@ -103,6 +102,7 @@ def test_exists(route: str, path: str): return route.replace("/", "_")[1:] in f.read() +# pylint: disable=W0621 def write_commands_integration_tests( command_map: CommandMap, provider_interface: ProviderInterface, @@ -111,11 +111,11 @@ def write_commands_integration_tests( """Write the commands integration tests.""" commands_not_found = [] - commandmap_map = command_map.map - commandmap_models = command_map.commands_model + cm_map = command_map.map + cm_models = command_map.commands_model provider_interface_map = provider_interface.map - for route in commandmap_map: + for route in cm_map: http_method = get_http_method(api_paths, f"/api/v1{route}") menu = route.split("/")[1] @@ -128,7 +128,7 @@ def write_commands_integration_tests( if not http_method: commands_not_found.append(route) else: - hints = get_type_hints(commandmap_map[route]) + hints = get_type_hints(cm_map[route]) hints.pop("cc", None) hints.pop("return", None) @@ -136,7 +136,7 @@ def write_commands_integration_tests( [{k: "" for k in get_post_flat_params(hints)}] if http_method == "post" else get_test_params( - model_name=commandmap_models[route], + model_name=cm_models[route], provider_interface_map=provider_interface_map, ) ) @@ -154,7 +154,6 @@ def write_commands_integration_tests( def write_charting_extension_integration_tests(): """Write the charting extension integration tests.""" - functions = ChartingService.get_implemented_charting_functions() # we assume test file exists diff --git a/openbb_platform/extensions/tests/utils/integration_tests_testers.py b/openbb_platform/extensions/tests/utils/integration_tests_testers.py index 2c9b11c5e4ac..5dc18adb0d44 100644 --- a/openbb_platform/extensions/tests/utils/integration_tests_testers.py +++ b/openbb_platform/extensions/tests/utils/integration_tests_testers.py @@ -265,6 +265,36 @@ def check_integration_tests( return all_missing_items +def check_missing_integration_tests(test_type: Literal["api", "python"]) -> List[str]: + """Check if all endpoints have integration tests.""" + cm = CommandMap(coverage_sep=".") + routes = [route[1:].replace("/", "_") for route in cm.map] + missing_integration_tests: List[str] = [] + + if test_type == "api": + functions = get_module_functions(get_integration_tests(test_type="api")) + else: + functions = get_module_functions(get_integration_tests(test_type="python")) + + tested_functions = [ + function.replace("test_", "") + for function in functions + if function.startswith("test_") + ] + + for route in routes: + if route not in tested_functions: + # TODO: See how to handle edge cases that are excluded from the schema + # on purpose. This is currently on the econometrics router. + if test_type == "api" and "econometrics" in route: + continue + missing_integration_tests.append( + f"Missing {test_type} integration test for route {route}" + ) + + return missing_integration_tests + + def check_missing_integration_test_providers(functions: Dict[str, Any]) -> List[str]: """Check if there are any missing providers for integration tests.""" return check_integration_tests(functions, check_missing_providers) From b70ed0d254a178ac5b5881c34ec70ec306012b8c Mon Sep 17 00:00:00 2001 From: Henrique Joaquim Date: Thu, 26 Oct 2023 10:21:30 +0100 Subject: [PATCH 18/23] 4.0.0a4 PyPI publishing (#5608) * changes to publish * fix mini conflict * typo --- openbb_platform/PUBLISH.md | 13 +-- openbb_platform/README.md | 8 +- .../extensions/charting/poetry.lock | 1 + .../extensions/charting/pyproject.toml | 6 +- .../extensions/crypto/pyproject.toml | 4 +- .../extensions/econometrics/pyproject.toml | 8 +- .../economy/integration/test_economy_api.py | 4 +- .../extensions/economy/pyproject.toml | 4 +- .../extensions/fixedincome/pyproject.toml | 4 +- .../extensions/forex/pyproject.toml | 4 +- .../extensions/futures/pyproject.toml | 4 +- .../extensions/news/pyproject.toml | 4 +- openbb_platform/extensions/qa/pyproject.toml | 6 +- .../extensions/stocks/pyproject.toml | 4 +- openbb_platform/extensions/ta/pyproject.toml | 6 +- .../openbb/package/__extensions__.py | 30 ++++--- openbb_platform/openbb/package/crypto.py | 22 +++-- openbb_platform/openbb/package/economy.py | 58 +++++++++---- .../openbb/package/extension_map.json | 17 +--- openbb_platform/openbb/package/fixedincome.py | 22 +++-- openbb_platform/openbb/package/forex.py | 22 +++-- openbb_platform/openbb/package/news.py | 47 ++++++++--- openbb_platform/openbb/package/stocks.py | 23 ++++-- openbb_platform/openbb/package/stocks_ca.py | 23 ++++-- openbb_platform/openbb/package/stocks_fa.py | 22 +++-- .../openbb/package/stocks_options.py | 23 ++++-- openbb_platform/platform/core/pyproject.toml | 4 +- .../platform/provider/pyproject.toml | 2 +- openbb_platform/poetry.lock | 81 +++---------------- .../providers/alpha_vantage/pyproject.toml | 4 +- .../providers/benzinga/pyproject.toml | 4 +- openbb_platform/providers/biztoc/poetry.lock | 14 +--- .../providers/biztoc/pyproject.toml | 4 +- openbb_platform/providers/cboe/pyproject.toml | 4 +- openbb_platform/providers/fmp/pyproject.toml | 4 +- openbb_platform/providers/fred/pyproject.toml | 4 +- .../providers/intrinio/pyproject.toml | 4 +- openbb_platform/providers/oecd/pyproject.toml | 4 +- .../providers/polygon/pyproject.toml | 4 +- .../providers/quandl/pyproject.toml | 4 +- .../providers/tradingeconomics/pyproject.toml | 4 +- .../providers/yfinance/pyproject.toml | 6 +- openbb_platform/pyproject.toml | 50 ++++++------ 43 files changed, 332 insertions(+), 258 deletions(-) diff --git a/openbb_platform/PUBLISH.md b/openbb_platform/PUBLISH.md index 1e5d56b55781..7b55cbae1874 100644 --- a/openbb_platform/PUBLISH.md +++ b/openbb_platform/PUBLISH.md @@ -6,13 +6,16 @@ Publishing checklist: 1. Ensure all unit tests pass: `pytest openbb_platform -m "not integration"` 2. Ensure all integration tests pass: `pytest openbb_platform -m integration` -3. Change the Platform version on `openbb_platform/platform/core/openbb_core/app/constants.py` -4. Run the publishing script: `python openbb_platform/dev_publish.py` -5. Update poetry files: `python openbb_platform/poetry_update.py` +3. Change the Platform version on: + - `openbb_platform/platform/core/openbb_core/app/constants.py` + - `openbb_platform/README.md` +4. Run the publishing script: `python openbb_platform/dev_utils/dev_publish.py` +5. Update poetry files: `python openbb_platform/dev_utils/poetry_update.py` 6. Open a PR so that changes are reflected on the main branch +7. If applicable, set the version on `constants.py` to use the `dev` tag again -Finally, check if everything worked: +Finally, check if everything works: 1. Install and test the package from Pypi on a clean environment 2. Check if all the `pyproject.toml` files are correct, including the `openbb_platform` one. -3. Double check if there is any new extension or provider that needs to be added to [integration tests GitHub Action workflow](/.github/workflows/platform-api-integration-test.yml). \ No newline at end of file +3. Double check if there is any new extension or provider that needs to be added to [integration tests GitHub Action workflow](/.github/workflows/platform-api-integration-test.yml). diff --git a/openbb_platform/README.md b/openbb_platform/README.md index ff61c6beef2b..d3ff51ade17d 100644 --- a/openbb_platform/README.md +++ b/openbb_platform/README.md @@ -17,17 +17,19 @@ The OpenBB Platform provides a convenient way to access raw financial data from The command below provides access to the core functionalities behind the OpenBB Platform. ```bash -pip install openbb==4.0.0a2 +pip install openbb==4.0.0a4 ``` +> Note that the version `4.0.0a4` is an example and you should replace it with the latest version available. + To install extensions that expand the core functionalities specify the extension name or use `all` to install all. ```bash # Install single extension, e.g. openbb-charting -pip install openbb[charting]==4.0.0a2 +pip install openbb[charting]==4.0.0a4 # Install all available extensions -pip install openbb[all]==4.0.0a2 +pip install openbb[all]==4.0.0a4 `````` > Note: These instruction are specific to v4. For installation instructions and documentation for v3 go to our [website](https://docs.openbb.co/sdk). diff --git a/openbb_platform/extensions/charting/poetry.lock b/openbb_platform/extensions/charting/poetry.lock index 53753060bd5a..67e261adda9e 100644 --- a/openbb_platform/extensions/charting/poetry.lock +++ b/openbb_platform/extensions/charting/poetry.lock @@ -1449,6 +1449,7 @@ optional = false python-versions = ">=3.7,<4" files = [ {file = "reportlab-4.0.5-py3-none-any.whl", hash = "sha256:1344dbe779b9049a1888105503837d0e5b62163bf5c6b33bd1fbe84bad484f50"}, + {file = "reportlab-4.0.5.tar.gz", hash = "sha256:9c68f277736f585c5c9938755b826dd57c877fcaeb203e21cefea12b3b1db4f5"}, ] [package.dependencies] diff --git a/openbb_platform/extensions/charting/pyproject.toml b/openbb_platform/extensions/charting/pyproject.toml index f295ed8fce45..f28c413cca7a 100644 --- a/openbb_platform/extensions/charting/pyproject.toml +++ b/openbb_platform/extensions/charting/pyproject.toml @@ -1,13 +1,13 @@ [tool.poetry] name = "openbb-charting" -version = "0.1.0a3" +version = "0.1.0a4" description = "Charting extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" packages = [{ include = "openbb_charting" }] [tool.poetry.dependencies] -python = ">=3.8,<3.12" # scipy forces python <4.0 explicitly +python = ">=3.8,<3.12" # scipy forces python <4.0 explicitly scipy = "^1.10.0" plotly = "^5.17.0" statsmodels = "^0.14.0" @@ -17,7 +17,7 @@ svglib = "^1.5.1" aiohttp = "^3.8.4" nbformat = "^5.9.2" pandas-ta = "^0.3.14b" -openbb-core = "^0.1.0a4" +openbb-core = "^0.1.0a5" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/extensions/crypto/pyproject.toml b/openbb_platform/extensions/crypto/pyproject.toml index 2f603ec3599b..10b8c03cbf96 100644 --- a/openbb_platform/extensions/crypto/pyproject.toml +++ b/openbb_platform/extensions/crypto/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-crypto" -version = "0.1.0a3" +version = "0.1.0a4" description = "Crypto extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_crypto" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^0.1.0a4" +openbb-core = "^0.1.0a5" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/extensions/econometrics/pyproject.toml b/openbb_platform/extensions/econometrics/pyproject.toml index 3eea9e02b6aa..bec17f72a5a5 100644 --- a/openbb_platform/extensions/econometrics/pyproject.toml +++ b/openbb_platform/extensions/econometrics/pyproject.toml @@ -1,18 +1,18 @@ [tool.poetry] name = "openbb-econometrics" -version = "0.1.0a3" +version = "0.1.0a4" description = "Econometrics Toolkit for OpenBB" authors = ["OpenBB Team "] readme = "README.md" packages = [{ include = "openbb_econometrics" }] [tool.poetry.dependencies] -python = ">=3.8,<3.12" # scipy forces python <4.0 explicitly +python = ">=3.8,<3.12" # scipy forces python <4.0 explicitly scipy = "^1.10.1" statsmodels = "^0.14.0" arch = "^5.5.0" -linearmodels = "<=4.25" # ^4.26 has setuptools-scm in setup_requires -openbb-core = { version = "^0.1.0a3" } +linearmodels = "<=4.25" # ^4.26 has setuptools-scm in setup_requires +openbb-core = { version = "^0.1.0a5" } [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/extensions/economy/integration/test_economy_api.py b/openbb_platform/extensions/economy/integration/test_economy_api.py index b94d4f51fb59..071842c12cab 100644 --- a/openbb_platform/extensions/economy/integration/test_economy_api.py +++ b/openbb_platform/extensions/economy/integration/test_economy_api.py @@ -166,7 +166,7 @@ def test_economy_index(params, headers): query_str = get_querystring(params, []) url = f"http://0.0.0.0:8000/api/v1/economy/index?{query_str}" - result = requests.get(url, headers=headers, timeout=10) + result = requests.get(url, headers=headers, timeout=20) assert isinstance(result, requests.Response) assert result.status_code == 200 @@ -360,7 +360,7 @@ def test_economy_sp500_multiples(params, headers): query_str = get_querystring(params, []) url = f"http://0.0.0.0:8000/api/v1/economy/sp500_multiples?{query_str}" - result = requests.get(url, headers=headers, timeout=10) + result = requests.get(url, headers=headers, timeout=20) assert isinstance(result, requests.Response) assert result.status_code == 200 diff --git a/openbb_platform/extensions/economy/pyproject.toml b/openbb_platform/extensions/economy/pyproject.toml index 577df3d3e938..77667fe646ec 100644 --- a/openbb_platform/extensions/economy/pyproject.toml +++ b/openbb_platform/extensions/economy/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-economy" -version = "0.1.0a3" +version = "0.1.0a4" description = "Economy extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_economy" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^0.1.0a4" +openbb-core = "^0.1.0a5" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/extensions/fixedincome/pyproject.toml b/openbb_platform/extensions/fixedincome/pyproject.toml index ec57019985d7..ee796485b379 100644 --- a/openbb_platform/extensions/fixedincome/pyproject.toml +++ b/openbb_platform/extensions/fixedincome/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-fixedincome" -version = "0.1.0a3" +version = "0.1.0a4" description = "Fixed income extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_fixedincome" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^0.1.0a4" +openbb-core = "^0.1.0a5" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/extensions/forex/pyproject.toml b/openbb_platform/extensions/forex/pyproject.toml index b149e202e03a..d45783849f71 100644 --- a/openbb_platform/extensions/forex/pyproject.toml +++ b/openbb_platform/extensions/forex/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-forex" -version = "0.1.0a3" +version = "0.1.0a4" description = "Forex extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_forex" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^0.1.0a4" +openbb-core = "^0.1.0a5" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/extensions/futures/pyproject.toml b/openbb_platform/extensions/futures/pyproject.toml index 8cbaec61a26c..c1753ccc664f 100644 --- a/openbb_platform/extensions/futures/pyproject.toml +++ b/openbb_platform/extensions/futures/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-futures" -version = "0.1.0a3" +version = "0.1.0a4" description = "Futures extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_futures" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^0.1.0a4" +openbb-core = "^0.1.0a5" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/extensions/news/pyproject.toml b/openbb_platform/extensions/news/pyproject.toml index ec5b87f17922..7bd37b36cbbe 100644 --- a/openbb_platform/extensions/news/pyproject.toml +++ b/openbb_platform/extensions/news/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-news" -version = "0.1.0a3" +version = "0.1.0a4" description = "News extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_news" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^0.1.0a4" +openbb-core = "^0.1.0a5" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/extensions/qa/pyproject.toml b/openbb_platform/extensions/qa/pyproject.toml index 7cef02f41ba4..ba7d11bc4129 100644 --- a/openbb_platform/extensions/qa/pyproject.toml +++ b/openbb_platform/extensions/qa/pyproject.toml @@ -1,17 +1,17 @@ [tool.poetry] name = "openbb-qa" -version = "0.1.0a3" +version = "0.1.0a4" description = "Quantitative Analysis extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" packages = [{ include = "openbb_qa" }] [tool.poetry.dependencies] -python = ">=3.8,<3.12" # scipy forces python <4.0 explicitly +python = ">=3.8,<3.12" # scipy forces python <4.0 explicitly scipy = "^1.10.1" statsmodels = "^0.14.0" pandas-ta = "^0.3.14b" -openbb-core = "^0.1.0a4" +openbb-core = "^0.1.0a5" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/extensions/stocks/pyproject.toml b/openbb_platform/extensions/stocks/pyproject.toml index 77b744826000..0d919a243956 100644 --- a/openbb_platform/extensions/stocks/pyproject.toml +++ b/openbb_platform/extensions/stocks/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-stocks" -version = "0.1.0a3" +version = "0.1.0a4" description = "Stocks extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_stocks" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^0.1.0a4" +openbb-core = "^0.1.0a5" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/extensions/ta/pyproject.toml b/openbb_platform/extensions/ta/pyproject.toml index 703eb74ae0ba..c9e3a74a8160 100644 --- a/openbb_platform/extensions/ta/pyproject.toml +++ b/openbb_platform/extensions/ta/pyproject.toml @@ -1,17 +1,17 @@ [tool.poetry] name = "openbb-ta" -version = "0.1.0a3" +version = "0.1.0a4" description = "Technical Analysis extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" packages = [{ include = "openbb_ta" }] [tool.poetry.dependencies] -python = ">=3.8,<3.12" # scipy forces python <4.0 explicitly +python = ">=3.8,<3.12" # scipy forces python <4.0 explicitly scipy = "^1.10.1" statsmodels = "^0.14.0" scikit-learn = "^1.3.1" -openbb-core = "^0.1.0a4" +openbb-core = "^0.1.0a5" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/openbb/package/__extensions__.py b/openbb_platform/openbb/package/__extensions__.py index 792b3378d91d..6ede41d44940 100644 --- a/openbb_platform/openbb/package/__extensions__.py +++ b/openbb_platform/openbb/package/__extensions__.py @@ -1,7 +1,24 @@ ### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ### - from openbb_core.app.static.container import Container +from openbb_core.app.model.obbject import OBBject +from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +import openbb_provider +import pandas +import datetime +import pydantic +from pydantic import BaseModel +from inspect import Parameter +import typing +from typing import List, Dict, Union, Optional, Literal +from annotated_types import Ge, Le, Gt, Lt +import typing_extensions +from openbb_core.app.utils import df_to_basemodel +from openbb_core.app.static.decorators import validate + +from openbb_core.app.static.filters import filter_inputs + +from openbb_provider.abstract.data import Data class Extensions(Container): @@ -21,28 +38,19 @@ class Extensions(Container): Extensions: - crypto@0.1.0a3 - - econometrics@0.1.0a3 - economy@0.1.0a3 - fixedincome@0.1.0a3 - forex@0.1.0a3 - - futures@0.1.0a3 - news@0.1.0a3 - - openbb_charting@0.1.0a3 - - qa@0.1.0a3 - stocks@0.1.0a3 - - ta@0.1.0a3 - alpha_vantage@0.1.0a3 - benzinga@0.1.0a3 - - cboe@0.1.0a3 - fmp@0.1.0a3 - fred@0.1.0a3 - intrinio@0.1.0a3 - - oecd@0.1.0a3 - - polygon@0.1.0a3 - - quandl@0.1.0a3 - tradingeconomics@0.1.0a3 - - yfinance@0.1.0a3 """ + """ # fmt: on def __repr__(self) -> str: return self.__doc__ or "" diff --git a/openbb_platform/openbb/package/crypto.py b/openbb_platform/openbb/package/crypto.py index 113b76b6d1e9..6f2b22e45b67 100644 --- a/openbb_platform/openbb/package/crypto.py +++ b/openbb_platform/openbb/package/crypto.py @@ -1,15 +1,27 @@ ### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ### +from openbb_core.app.static.container import Container +from openbb_core.app.model.obbject import OBBject +from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +import openbb_provider +import pandas import datetime -from typing import List, Literal, Union - +import pydantic +from pydantic import BaseModel +from inspect import Parameter +import typing +from typing import List, Dict, Union, Optional, Literal +from annotated_types import Ge, Le, Gt, Lt import typing_extensions -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import OBBject -from openbb_core.app.static.container import Container +from openbb_core.app.utils import df_to_basemodel from openbb_core.app.static.decorators import validate + from openbb_core.app.static.filters import filter_inputs + from openbb_provider.abstract.data import Data +import openbb_core.app.model.command_context +import openbb_core.app.model.obbject +import types class ROUTER_crypto(Container): diff --git a/openbb_platform/openbb/package/economy.py b/openbb_platform/openbb/package/economy.py index dd16cd403804..96dbd073e4da 100644 --- a/openbb_platform/openbb/package/economy.py +++ b/openbb_platform/openbb/package/economy.py @@ -1,15 +1,27 @@ ### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ### +from openbb_core.app.static.container import Container +from openbb_core.app.model.obbject import OBBject +from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +import openbb_provider +import pandas import datetime -from typing import List, Literal, Union - +import pydantic +from pydantic import BaseModel +from inspect import Parameter +import typing +from typing import List, Dict, Union, Optional, Literal +from annotated_types import Ge, Le, Gt, Lt import typing_extensions -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import OBBject -from openbb_core.app.static.container import Container +from openbb_core.app.utils import df_to_basemodel from openbb_core.app.static.decorators import validate + from openbb_core.app.static.filters import filter_inputs + from openbb_provider.abstract.data import Data +import openbb_core.app.model.command_context +import openbb_core.app.model.obbject +import types class ROUTER_economy(Container): @@ -428,11 +440,15 @@ def cpi( ], units: typing_extensions.Annotated[ Literal["growth_previous", "growth_same", "index_2015"], - OpenBBCustomParameter(description="The data units."), + OpenBBCustomParameter( + description="The unit of measurement for the CPI data.\n Options:\n - `growth_previous`: growth from the previous period\n - `growth_same`: growth from the same period in the previous year\n - `index_2015`: index with base year 2015." + ), ] = "growth_same", frequency: typing_extensions.Annotated[ Literal["monthly", "quarter", "annual"], - OpenBBCustomParameter(description="The data time frequency."), + OpenBBCustomParameter( + description="The frequency of the data points; options include `monthly`, `quarter`, and `annual`" + ), ] = "monthly", harmonized: typing_extensions.Annotated[ bool, @@ -462,9 +478,13 @@ def cpi( countries : List[Literal['australia', 'austria', 'belgium', 'brazil', 'bulgar... The country or countries to get data. units : Literal['growth_previous', 'growth_same', 'index_2015'] - The data units. + The unit of measurement for the CPI data. + Options: + - `growth_previous`: growth from the previous period + - `growth_same`: growth from the same period in the previous year + - `index_2015`: index with base year 2015. frequency : Literal['monthly', 'quarter', 'annual'] - The data time frequency. + The frequency of the data points; options include `monthly`, `quarter`, and `annual` harmonized : bool Whether you wish to obtain harmonized data. start_date : Union[datetime.date, None] @@ -492,10 +512,8 @@ def cpi( CPI --- - date : Optional[Union[date]] + date : date The date of the data. - value : Optional[Union[float]] - CPI value on the date. Example ------- @@ -1030,7 +1048,7 @@ def gdpnom( units: typing_extensions.Annotated[ Literal["usd", "usd_cap"], OpenBBCustomParameter( - description="The data units. Units to get nominal GDP in. Either usd or usd_cap indicating per capita." + description="The unit of measurement for the CPI data.\n Options:\n - `growth_previous`: growth from the previous period\n - `growth_same`: growth from the same period in the previous year\n - `index_2015`: index with base year 2015. Units to get nominal GDP in. Either usd or usd_cap indicating per capita." ), ] = "usd", start_date: typing_extensions.Annotated[ @@ -1053,7 +1071,11 @@ def gdpnom( Parameters ---------- units : Literal['usd', 'usd_cap'] - The data units. Units to get nominal GDP in. Either usd or usd_cap indicating per capita. + The unit of measurement for the CPI data. + Options: + - `growth_previous`: growth from the previous period + - `growth_same`: growth from the same period in the previous year + - `index_2015`: index with base year 2015. Units to get nominal GDP in. Either usd or usd_cap indicating per capita. start_date : Union[datetime.date, None] Start date of the data, in YYYY-MM-DD format. end_date : Union[datetime.date, None] @@ -1115,7 +1137,7 @@ def gdpreal( units: typing_extensions.Annotated[ Literal["idx", "qoq", "yoy"], OpenBBCustomParameter( - description="The data units. Either idx (indicating 2015=100), qoq (previous period) or yoy (same period, previous year).)" + description="The unit of measurement for the CPI data.\n Options:\n - `growth_previous`: growth from the previous period\n - `growth_same`: growth from the same period in the previous year\n - `index_2015`: index with base year 2015. Either idx (indicating 2015=100), qoq (previous period) or yoy (same period, previous year).)" ), ] = "yoy", start_date: typing_extensions.Annotated[ @@ -1138,7 +1160,11 @@ def gdpreal( Parameters ---------- units : Literal['idx', 'qoq', 'yoy'] - The data units. Either idx (indicating 2015=100), qoq (previous period) or yoy (same period, previous year).) + The unit of measurement for the CPI data. + Options: + - `growth_previous`: growth from the previous period + - `growth_same`: growth from the same period in the previous year + - `index_2015`: index with base year 2015. Either idx (indicating 2015=100), qoq (previous period) or yoy (same period, previous year).) start_date : Union[datetime.date, None] Start date of the data, in YYYY-MM-DD format. end_date : Union[datetime.date, None] diff --git a/openbb_platform/openbb/package/extension_map.json b/openbb_platform/openbb/package/extension_map.json index 445b047d5b60..ba02cd97fd69 100644 --- a/openbb_platform/openbb/package/extension_map.json +++ b/openbb_platform/openbb/package/extension_map.json @@ -1,28 +1,19 @@ { "openbb_core_extension": [ "crypto@0.1.0a3", - "econometrics@0.1.0a3", "economy@0.1.0a3", - "fixedincome@0.1.0a3", "forex@0.1.0a3", - "futures@0.1.0a3", + "fixedincome@0.1.0a3", "news@0.1.0a3", - "openbb_charting@0.1.0a3", - "qa@0.1.0a3", - "stocks@0.1.0a3", - "ta@0.1.0a3" + "stocks@0.1.0a3" ], "openbb_provider_extension": [ - "alpha_vantage@0.1.0a3", "benzinga@0.1.0a3", - "cboe@0.1.0a3", "fmp@0.1.0a3", "fred@0.1.0a3", "intrinio@0.1.0a3", - "oecd@0.1.0a3", "polygon@0.1.0a3", - "quandl@0.1.0a3", - "tradingeconomics@0.1.0a3", - "yfinance@0.1.0a3" + "alpha_vantage@0.1.0a3", + "tradingeconomics@0.1.0a3" ] } \ No newline at end of file diff --git a/openbb_platform/openbb/package/fixedincome.py b/openbb_platform/openbb/package/fixedincome.py index f7ece0001f36..6b16c2132c48 100644 --- a/openbb_platform/openbb/package/fixedincome.py +++ b/openbb_platform/openbb/package/fixedincome.py @@ -1,15 +1,27 @@ ### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ### +from openbb_core.app.static.container import Container +from openbb_core.app.model.obbject import OBBject +from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +import openbb_provider +import pandas import datetime -from typing import List, Literal, Union - +import pydantic +from pydantic import BaseModel +from inspect import Parameter +import typing +from typing import List, Dict, Union, Optional, Literal +from annotated_types import Ge, Le, Gt, Lt import typing_extensions -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import OBBject -from openbb_core.app.static.container import Container +from openbb_core.app.utils import df_to_basemodel from openbb_core.app.static.decorators import validate + from openbb_core.app.static.filters import filter_inputs + from openbb_provider.abstract.data import Data +import openbb_core.app.model.command_context +import openbb_core.app.model.obbject +import types class ROUTER_fixedincome(Container): diff --git a/openbb_platform/openbb/package/forex.py b/openbb_platform/openbb/package/forex.py index 0b3adc2c570f..27ce9e8bb1af 100644 --- a/openbb_platform/openbb/package/forex.py +++ b/openbb_platform/openbb/package/forex.py @@ -1,15 +1,27 @@ ### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ### +from openbb_core.app.static.container import Container +from openbb_core.app.model.obbject import OBBject +from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +import openbb_provider +import pandas import datetime -from typing import List, Literal, Union - +import pydantic +from pydantic import BaseModel +from inspect import Parameter +import typing +from typing import List, Dict, Union, Optional, Literal +from annotated_types import Ge, Le, Gt, Lt import typing_extensions -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import OBBject -from openbb_core.app.static.container import Container +from openbb_core.app.utils import df_to_basemodel from openbb_core.app.static.decorators import validate + from openbb_core.app.static.filters import filter_inputs + from openbb_provider.abstract.data import Data +import openbb_core.app.model.command_context +import openbb_core.app.model.obbject +import types class ROUTER_forex(Container): diff --git a/openbb_platform/openbb/package/news.py b/openbb_platform/openbb/package/news.py index b189e94390ad..65e5e872b827 100644 --- a/openbb_platform/openbb/package/news.py +++ b/openbb_platform/openbb/package/news.py @@ -1,14 +1,27 @@ ### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ### -from typing import List, Literal, Union - -import typing_extensions -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container +from openbb_core.app.model.obbject import OBBject +from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +import openbb_provider +import pandas +import datetime +import pydantic +from pydantic import BaseModel +from inspect import Parameter +import typing +from typing import List, Dict, Union, Optional, Literal +from annotated_types import Ge, Le, Gt, Lt +import typing_extensions +from openbb_core.app.utils import df_to_basemodel from openbb_core.app.static.decorators import validate + from openbb_core.app.static.filters import filter_inputs + from openbb_provider.abstract.data import Data +import openbb_core.app.model.command_context +import openbb_core.app.model.obbject +import types class ROUTER_news(Container): @@ -28,7 +41,7 @@ def globalnews( description="The number of data entries to return. Here its the no. of articles to return." ), ] = 20, - provider: Union[Literal["benzinga", "fmp", "intrinio"], None] = None, + provider: Union[Literal["benzinga", "biztoc", "fmp", "intrinio"], None] = None, **kwargs ) -> OBBject[List[Data]]: """Global News. Global news data. @@ -37,7 +50,7 @@ def globalnews( ---------- limit : int The number of data entries to return. Here its the no. of articles to return. - provider : Union[Literal['benzinga', 'fmp', 'intrinio'], None] + provider : Union[Literal['benzinga', 'biztoc', 'fmp', 'intrinio'], None] The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'benzinga' if there is no default. @@ -69,13 +82,21 @@ def globalnews( Authors of the news to retrieve. (provider: benzinga) content_types : Optional[Union[str]] Content types of the news to retrieve. (provider: benzinga) + filter : Literal['crypto', 'hot', 'latest', 'main', 'media', 'source', 'tag'] + Filter by type of news. (provider: biztoc) + source : str + Filter by a specific publisher. Only valid when filter is set to source. (provider: biztoc) + tag : Optional[Union[str]] + Tag, topic, to filter articles by. Only valid when filter is set to tag. (provider: biztoc) + term : Optional[Union[str]] + Search term to filter articles by. This overrides all other filters. (provider: biztoc) Returns ------- OBBject results : Union[List[GlobalNews]] Serializable results. - provider : Union[Literal['benzinga', 'fmp', 'intrinio'], None] + provider : Union[Literal['benzinga', 'biztoc', 'fmp', 'intrinio'], None] Provider name. warnings : Optional[List[Warning_]] List of warnings. @@ -97,7 +118,7 @@ def globalnews( url : Optional[Union[str]] URL of the news. id : Optional[Union[str]] - ID of the news. (provider: benzinga); Article ID. (provider: intrinio) + ID of the news. (provider: benzinga); Unique Article ID. (provider: biztoc); Article ID. (provider: intrinio) author : Optional[Union[str]] Author of the news. (provider: benzinga) teaser : Optional[Union[str]] @@ -106,10 +127,14 @@ def globalnews( Channels associated with the news. (provider: benzinga) stocks : Optional[Union[str]] Stocks associated with the news. (provider: benzinga) - tags : Optional[Union[str]] - Tags associated with the news. (provider: benzinga) + tags : Optional[Union[str, List[str]]] + Tags associated with the news. (provider: benzinga); Tags for the article. (provider: biztoc) updated : Optional[Union[datetime]] None + favicon : Optional[Union[str]] + Icon image for the source of the article. (provider: biztoc) + score : Optional[Union[float]] + Search relevance score for the article. (provider: biztoc) site : Optional[Union[str]] Site of the news. (provider: fmp) company : Optional[Union[Dict[str, Any]]] diff --git a/openbb_platform/openbb/package/stocks.py b/openbb_platform/openbb/package/stocks.py index 38ff7d9df958..503c5bee52b7 100644 --- a/openbb_platform/openbb/package/stocks.py +++ b/openbb_platform/openbb/package/stocks.py @@ -1,16 +1,27 @@ ### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ### +from openbb_core.app.static.container import Container +from openbb_core.app.model.obbject import OBBject +from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +import openbb_provider +import pandas import datetime -from typing import List, Literal, Union - +import pydantic +from pydantic import BaseModel +from inspect import Parameter +import typing +from typing import List, Dict, Union, Optional, Literal +from annotated_types import Ge, Le, Gt, Lt import typing_extensions -from annotated_types import Ge -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import OBBject -from openbb_core.app.static.container import Container +from openbb_core.app.utils import df_to_basemodel from openbb_core.app.static.decorators import validate + from openbb_core.app.static.filters import filter_inputs + from openbb_provider.abstract.data import Data +import openbb_core.app.model.command_context +import openbb_core.app.model.obbject +import types class ROUTER_stocks(Container): diff --git a/openbb_platform/openbb/package/stocks_ca.py b/openbb_platform/openbb/package/stocks_ca.py index 1d3f3a74a207..f16968410fee 100644 --- a/openbb_platform/openbb/package/stocks_ca.py +++ b/openbb_platform/openbb/package/stocks_ca.py @@ -1,14 +1,27 @@ ### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ### -from typing import List, Literal, Union - -import typing_extensions -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container +from openbb_core.app.model.obbject import OBBject +from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +import openbb_provider +import pandas +import datetime +import pydantic +from pydantic import BaseModel +from inspect import Parameter +import typing +from typing import List, Dict, Union, Optional, Literal +from annotated_types import Ge, Le, Gt, Lt +import typing_extensions +from openbb_core.app.utils import df_to_basemodel from openbb_core.app.static.decorators import validate + from openbb_core.app.static.filters import filter_inputs + from openbb_provider.abstract.data import Data +import openbb_core.app.model.command_context +import openbb_core.app.model.obbject +import types class ROUTER_stocks_ca(Container): diff --git a/openbb_platform/openbb/package/stocks_fa.py b/openbb_platform/openbb/package/stocks_fa.py index b226e8db048a..444e8fef9d0b 100644 --- a/openbb_platform/openbb/package/stocks_fa.py +++ b/openbb_platform/openbb/package/stocks_fa.py @@ -1,15 +1,27 @@ ### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ### +from openbb_core.app.static.container import Container +from openbb_core.app.model.obbject import OBBject +from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +import openbb_provider +import pandas import datetime -from typing import List, Literal, Union - +import pydantic +from pydantic import BaseModel +from inspect import Parameter +import typing +from typing import List, Dict, Union, Optional, Literal +from annotated_types import Ge, Le, Gt, Lt import typing_extensions -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import OBBject -from openbb_core.app.static.container import Container +from openbb_core.app.utils import df_to_basemodel from openbb_core.app.static.decorators import validate + from openbb_core.app.static.filters import filter_inputs + from openbb_provider.abstract.data import Data +import openbb_core.app.model.command_context +import openbb_core.app.model.obbject +import types class ROUTER_stocks_fa(Container): diff --git a/openbb_platform/openbb/package/stocks_options.py b/openbb_platform/openbb/package/stocks_options.py index 5c2af298509a..73ba8b75700d 100644 --- a/openbb_platform/openbb/package/stocks_options.py +++ b/openbb_platform/openbb/package/stocks_options.py @@ -1,14 +1,27 @@ ### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ### -from typing import List, Literal, Union - -import typing_extensions -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container +from openbb_core.app.model.obbject import OBBject +from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +import openbb_provider +import pandas +import datetime +import pydantic +from pydantic import BaseModel +from inspect import Parameter +import typing +from typing import List, Dict, Union, Optional, Literal +from annotated_types import Ge, Le, Gt, Lt +import typing_extensions +from openbb_core.app.utils import df_to_basemodel from openbb_core.app.static.decorators import validate + from openbb_core.app.static.filters import filter_inputs + from openbb_provider.abstract.data import Data +import openbb_core.app.model.command_context +import openbb_core.app.model.obbject +import types class ROUTER_stocks_options(Container): diff --git a/openbb_platform/platform/core/pyproject.toml b/openbb_platform/platform/core/pyproject.toml index f092c885c9fd..6d33fd7cfc25 100644 --- a/openbb_platform/platform/core/pyproject.toml +++ b/openbb_platform/platform/core/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-core" -version = "0.1.0a4" +version = "0.1.0a5" description = "OpenBB package with core functionality" authors = ["OpenBB Team "] readme = "README.md" @@ -18,7 +18,7 @@ python-jose = "^3.3.0" uuid7 = "^0.1.0" posthog = "^3.0.1" python-multipart = "^0.0.6" -openbb-provider = "^0.1.0a3" +openbb-provider = "^0.1.0a4" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/platform/provider/pyproject.toml b/openbb_platform/platform/provider/pyproject.toml index fce0eb786345..d0248e790578 100644 --- a/openbb_platform/platform/provider/pyproject.toml +++ b/openbb_platform/platform/provider/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-provider" -version = "0.1.0a3" +version = "0.1.0a4" description = "OpenBB package to execute queries to financial data providers" authors = ["OpenBB Team "] readme = "README.md" diff --git a/openbb_platform/poetry.lock b/openbb_platform/poetry.lock index d9679f2739f0..5ab2e6089b87 100644 --- a/openbb_platform/poetry.lock +++ b/openbb_platform/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "aiohttp" @@ -1258,47 +1258,6 @@ files = [ {file = "numpy-1.24.4.tar.gz", hash = "sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463"}, ] -[[package]] -name = "numpy" -version = "1.26.1" -description = "Fundamental package for array computing in Python" -optional = false -python-versions = "<3.13,>=3.9" -files = [ - {file = "numpy-1.26.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82e871307a6331b5f09efda3c22e03c095d957f04bf6bc1804f30048d0e5e7af"}, - {file = "numpy-1.26.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdd9ec98f0063d93baeb01aad472a1a0840dee302842a2746a7a8e92968f9575"}, - {file = "numpy-1.26.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d78f269e0c4fd365fc2992c00353e4530d274ba68f15e968d8bc3c69ce5f5244"}, - {file = "numpy-1.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ab9163ca8aeb7fd32fe93866490654d2f7dda4e61bc6297bf72ce07fdc02f67"}, - {file = "numpy-1.26.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:78ca54b2f9daffa5f323f34cdf21e1d9779a54073f0018a3094ab907938331a2"}, - {file = "numpy-1.26.1-cp310-cp310-win32.whl", hash = "sha256:d1cfc92db6af1fd37a7bb58e55c8383b4aa1ba23d012bdbba26b4bcca45ac297"}, - {file = "numpy-1.26.1-cp310-cp310-win_amd64.whl", hash = "sha256:d2984cb6caaf05294b8466966627e80bf6c7afd273279077679cb010acb0e5ab"}, - {file = "numpy-1.26.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cd7837b2b734ca72959a1caf3309457a318c934abef7a43a14bb984e574bbb9a"}, - {file = "numpy-1.26.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1c59c046c31a43310ad0199d6299e59f57a289e22f0f36951ced1c9eac3665b9"}, - {file = "numpy-1.26.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d58e8c51a7cf43090d124d5073bc29ab2755822181fcad978b12e144e5e5a4b3"}, - {file = "numpy-1.26.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6081aed64714a18c72b168a9276095ef9155dd7888b9e74b5987808f0dd0a974"}, - {file = "numpy-1.26.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:97e5d6a9f0702c2863aaabf19f0d1b6c2628fbe476438ce0b5ce06e83085064c"}, - {file = "numpy-1.26.1-cp311-cp311-win32.whl", hash = "sha256:b9d45d1dbb9de84894cc50efece5b09939752a2d75aab3a8b0cef6f3a35ecd6b"}, - {file = "numpy-1.26.1-cp311-cp311-win_amd64.whl", hash = "sha256:3649d566e2fc067597125428db15d60eb42a4e0897fc48d28cb75dc2e0454e53"}, - {file = "numpy-1.26.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1d1bd82d539607951cac963388534da3b7ea0e18b149a53cf883d8f699178c0f"}, - {file = "numpy-1.26.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:afd5ced4e5a96dac6725daeb5242a35494243f2239244fad10a90ce58b071d24"}, - {file = "numpy-1.26.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a03fb25610ef560a6201ff06df4f8105292ba56e7cdd196ea350d123fc32e24e"}, - {file = "numpy-1.26.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcfaf015b79d1f9f9c9fd0731a907407dc3e45769262d657d754c3a028586124"}, - {file = "numpy-1.26.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c"}, - {file = "numpy-1.26.1-cp312-cp312-win32.whl", hash = "sha256:af22f3d8e228d84d1c0c44c1fbdeb80f97a15a0abe4f080960393a00db733b66"}, - {file = "numpy-1.26.1-cp312-cp312-win_amd64.whl", hash = "sha256:9f42284ebf91bdf32fafac29d29d4c07e5e9d1af862ea73686581773ef9e73a7"}, - {file = "numpy-1.26.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bb894accfd16b867d8643fc2ba6c8617c78ba2828051e9a69511644ce86ce83e"}, - {file = "numpy-1.26.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617"}, - {file = "numpy-1.26.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9696aa2e35cc41e398a6d42d147cf326f8f9d81befcb399bc1ed7ffea339b64e"}, - {file = "numpy-1.26.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5b411040beead47a228bde3b2241100454a6abde9df139ed087bd73fc0a4908"}, - {file = "numpy-1.26.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1e11668d6f756ca5ef534b5be8653d16c5352cbb210a5c2a79ff288e937010d5"}, - {file = "numpy-1.26.1-cp39-cp39-win32.whl", hash = "sha256:d1d2c6b7dd618c41e202c59c1413ef9b2c8e8a15f5039e344af64195459e3104"}, - {file = "numpy-1.26.1-cp39-cp39-win_amd64.whl", hash = "sha256:59227c981d43425ca5e5c01094d59eb14e8772ce6975d4b2fc1e106a833d5ae2"}, - {file = "numpy-1.26.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:06934e1a22c54636a059215d6da99e23286424f316fddd979f5071093b648668"}, - {file = "numpy-1.26.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76ff661a867d9272cd2a99eed002470f46dbe0943a5ffd140f49be84f68ffc42"}, - {file = "numpy-1.26.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:6965888d65d2848e8768824ca8288db0a81263c1efccec881cb35a0d805fcd2f"}, - {file = "numpy-1.26.1.tar.gz", hash = "sha256:c8c6c72d4a9f831f328efb1312642a1cafafaa88981d9ab76368d50d07d93cbe"}, -] - [[package]] name = "openbb-alpha-vantage" version = "0.1.0a3" @@ -1329,16 +1288,18 @@ openbb-core = ">=0.1.0a2,<0.2.0" [[package]] name = "openbb-biztoc" -version = "0.1.0a3" +version = "0.1.0a4" description = "" optional = true -python-versions = "*" -files = [] -develop = true +python-versions = ">=3.8,<4.0" +files = [ + {file = "openbb_biztoc-0.1.0a4-py3-none-any.whl", hash = "sha256:b3c19c45d300956114f3725790b7edd9458a7d2b1ba7cefd47d149241aa8a05c"}, + {file = "openbb_biztoc-0.1.0a4.tar.gz", hash = "sha256:4ec4e6fd0950dee6b40c90c8987738258482eb94543f7686b25d6a5fda89e836"}, +] -[package.source] -type = "directory" -url = "providers/biztoc" +[package.dependencies] +openbb-core = ">=0.1.0a4,<0.2.0" +requests-cache = ">=1.1.0,<2.0.0" [[package]] name = "openbb-cboe" @@ -1734,8 +1695,8 @@ files = [ [package.dependencies] numpy = [ + {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, {version = ">=1.20.3", markers = "python_version < \"3.10\""}, - {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, ] python-dateutil = ">=2.8.2" @@ -2314,7 +2275,6 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -2322,15 +2282,8 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -2347,7 +2300,6 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -2355,7 +2307,6 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -2830,20 +2781,12 @@ files = [ {file = "statsmodels-0.14.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5a6a0a1a06ff79be8aa89c8494b33903442859add133f0dda1daf37c3c71682e"}, {file = "statsmodels-0.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77b3cd3a5268ef966a0a08582c591bd29c09c88b4566c892a7c087935234f285"}, {file = "statsmodels-0.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c64ebe9cf376cba0c31aed138e15ed179a1d128612dd241cdf299d159e5e882"}, - {file = "statsmodels-0.14.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:229b2f676b4a45cb62d132a105c9c06ca8a09ffba060abe34935391eb5d9ba87"}, {file = "statsmodels-0.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb471f757fc45102a87e5d86e87dc2c8c78b34ad4f203679a46520f1d863b9da"}, {file = "statsmodels-0.14.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:582f9e41092e342aaa04920d17cc3f97240e3ee198672f194719b5a3d08657d6"}, {file = "statsmodels-0.14.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7ebe885ccaa64b4bc5ad49ac781c246e7a594b491f08ab4cfd5aa456c363a6f6"}, {file = "statsmodels-0.14.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b587ee5d23369a0e881da6e37f78371dce4238cf7638a455db4b633a1a1c62d6"}, {file = "statsmodels-0.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ef7fa4813c7a73b0d8a0c830250f021c102c71c95e9fe0d6877bcfb56d38b8c"}, - {file = "statsmodels-0.14.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:afe80544ef46730ea1b11cc655da27038bbaa7159dc5af4bc35bbc32982262f2"}, {file = "statsmodels-0.14.0-cp311-cp311-win_amd64.whl", hash = "sha256:a6ad7b8aadccd4e4dd7f315a07bef1bca41d194eeaf4ec600d20dea02d242fce"}, - {file = "statsmodels-0.14.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:0eea4a0b761aebf0c355b726ac5616b9a8b618bd6e81a96b9f998a61f4fd7484"}, - {file = "statsmodels-0.14.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4c815ce7a699047727c65a7c179bff4031cff9ae90c78ca730cfd5200eb025dd"}, - {file = "statsmodels-0.14.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:575f61337c8e406ae5fa074d34bc6eb77b5a57c544b2d4ee9bc3da6a0a084cf1"}, - {file = "statsmodels-0.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8be53cdeb82f49c4cb0fda6d7eeeb2d67dbd50179b3e1033510e061863720d93"}, - {file = "statsmodels-0.14.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:6f7d762df4e04d1dde8127d07e91aff230eae643aa7078543e60e83e7d5b40db"}, - {file = "statsmodels-0.14.0-cp312-cp312-win_amd64.whl", hash = "sha256:fc2c7931008a911e3060c77ea8933f63f7367c0f3af04f82db3a04808ad2cd2c"}, {file = "statsmodels-0.14.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3757542c95247e4ab025291a740efa5da91dc11a05990c033d40fce31c450dc9"}, {file = "statsmodels-0.14.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:de489e3ed315bdba55c9d1554a2e89faa65d212e365ab81bc323fa52681fc60e"}, {file = "statsmodels-0.14.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76e290f4718177bffa8823a780f3b882d56dd64ad1c18cfb4bc8b5558f3f5757"}, @@ -2859,8 +2802,8 @@ files = [ [package.dependencies] numpy = [ - {version = ">=1.18", markers = "python_version != \"3.10\" or platform_system != \"Windows\" or platform_python_implementation == \"PyPy\""}, {version = ">=1.22.3", markers = "python_version == \"3.10\" and platform_system == \"Windows\" and platform_python_implementation != \"PyPy\""}, + {version = ">=1.18", markers = "python_version != \"3.10\" or platform_system != \"Windows\" or platform_python_implementation == \"PyPy\""}, ] packaging = ">=21.3" pandas = ">=1.0" diff --git a/openbb_platform/providers/alpha_vantage/pyproject.toml b/openbb_platform/providers/alpha_vantage/pyproject.toml index 85ba5550c28c..2746447ea111 100644 --- a/openbb_platform/providers/alpha_vantage/pyproject.toml +++ b/openbb_platform/providers/alpha_vantage/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-alpha-vantage" -version = "0.1.0a3" +version = "0.1.0a4" description = "Alpha Vantage extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_alpha_vantage" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^0.1.0a4" +openbb-core = "^0.1.0a5" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/providers/benzinga/pyproject.toml b/openbb_platform/providers/benzinga/pyproject.toml index 7b1f7b54da98..602de1079c99 100644 --- a/openbb_platform/providers/benzinga/pyproject.toml +++ b/openbb_platform/providers/benzinga/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-benzinga" -version = "0.1.0a3" +version = "0.1.0a4" description = "Benzinga extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_benzinga" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^0.1.0a4" +openbb-core = "^0.1.0a5" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/providers/biztoc/poetry.lock b/openbb_platform/providers/biztoc/poetry.lock index 20997b62f2e1..d0ef6754e11d 100644 --- a/openbb_platform/providers/biztoc/poetry.lock +++ b/openbb_platform/providers/biztoc/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "annotated-types" @@ -583,8 +583,8 @@ files = [ [package.dependencies] numpy = [ {version = ">=1.20.3", markers = "python_version < \"3.10\""}, - {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, + {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -900,7 +900,6 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -908,15 +907,8 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -933,7 +925,6 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -941,7 +932,6 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, diff --git a/openbb_platform/providers/biztoc/pyproject.toml b/openbb_platform/providers/biztoc/pyproject.toml index 1e8aa3ff51d2..168445616a03 100644 --- a/openbb_platform/providers/biztoc/pyproject.toml +++ b/openbb_platform/providers/biztoc/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-biztoc" -version = "0.1.0a3" +version = "0.1.0a4" description = "" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_biztoc" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^0.1.0a4" +openbb-core = "^0.1.0a5" requests-cache = "^1.1.0" [build-system] diff --git a/openbb_platform/providers/cboe/pyproject.toml b/openbb_platform/providers/cboe/pyproject.toml index e7e6e1bf7ade..f9a2072b5f84 100644 --- a/openbb_platform/providers/cboe/pyproject.toml +++ b/openbb_platform/providers/cboe/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-cboe" -version = "0.1.0a3" +version = "0.1.0a4" description = "CBOE extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -9,7 +9,7 @@ packages = [{ include = "openbb_cboe" }] [tool.poetry.dependencies] python = "^3.8" requests-cache = "^1.1.0" -openbb-core = "^0.1.0a4" +openbb-core = "^0.1.0a5" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/providers/fmp/pyproject.toml b/openbb_platform/providers/fmp/pyproject.toml index 5f4d4691bceb..a3b0f04d499e 100644 --- a/openbb_platform/providers/fmp/pyproject.toml +++ b/openbb_platform/providers/fmp/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-fmp" -version = "0.1.0a3" +version = "0.1.0a4" description = "FMP extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_fmp" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^0.1.0a4" +openbb-core = "^0.1.0a5" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/providers/fred/pyproject.toml b/openbb_platform/providers/fred/pyproject.toml index 33de72ae4265..e13fb5717ef2 100644 --- a/openbb_platform/providers/fred/pyproject.toml +++ b/openbb_platform/providers/fred/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-fred" -version = "0.1.0a3" +version = "0.1.0a4" description = "FRED extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_fred" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^0.1.0a4" +openbb-core = "^0.1.0a5" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/providers/intrinio/pyproject.toml b/openbb_platform/providers/intrinio/pyproject.toml index c473a3c66f84..aecc980bdd78 100644 --- a/openbb_platform/providers/intrinio/pyproject.toml +++ b/openbb_platform/providers/intrinio/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-intrinio" -version = "0.1.0a3" +version = "0.1.0a4" description = "Intrinio extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -9,7 +9,7 @@ packages = [{ include = "openbb_intrinio" }] [tool.poetry.dependencies] python = "^3.8" requests-cache = "^1.1.0" -openbb-core = "^0.1.0a4" +openbb-core = "^0.1.0a5" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/providers/oecd/pyproject.toml b/openbb_platform/providers/oecd/pyproject.toml index afad556c8440..ab2369f41ce6 100644 --- a/openbb_platform/providers/oecd/pyproject.toml +++ b/openbb_platform/providers/oecd/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-oecd" -version = "0.1.0a3" +version = "0.1.0a4" description = "OECD extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_oecd" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^0.1.0a4" +openbb-core = "^0.1.0a5" urllib3 = ">1.26.16" [build-system] diff --git a/openbb_platform/providers/polygon/pyproject.toml b/openbb_platform/providers/polygon/pyproject.toml index d5dc7c3e2d26..e2ac7cb1b7d2 100644 --- a/openbb_platform/providers/polygon/pyproject.toml +++ b/openbb_platform/providers/polygon/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-polygon" -version = "0.1.0a3" +version = "0.1.0a4" description = "Polygon extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_polygon" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^0.1.0a4" +openbb-core = "^0.1.0a5" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/providers/quandl/pyproject.toml b/openbb_platform/providers/quandl/pyproject.toml index e71af60aff8e..7500203f8795 100644 --- a/openbb_platform/providers/quandl/pyproject.toml +++ b/openbb_platform/providers/quandl/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-quandl" -version = "0.1.0a3" +version = "0.1.0a4" description = "Quandl extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -9,7 +9,7 @@ packages = [{ include = "openbb_quandl" }] [tool.poetry.dependencies] python = "^3.8" quandl = ">=3.7.0" -openbb-core = "^0.1.0a4" +openbb-core = "^0.1.0a5" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/providers/tradingeconomics/pyproject.toml b/openbb_platform/providers/tradingeconomics/pyproject.toml index c4022fef94f9..2edbb920e18c 100644 --- a/openbb_platform/providers/tradingeconomics/pyproject.toml +++ b/openbb_platform/providers/tradingeconomics/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-tradingeconomics" -version = "0.1.0a3" +version = "0.1.0a4" description = "Trading Economics extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_tradingeconomics" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^0.1.0a4" +openbb-core = "^0.1.0a5" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/providers/yfinance/pyproject.toml b/openbb_platform/providers/yfinance/pyproject.toml index 2d5f67df0a8d..4de268854e58 100644 --- a/openbb_platform/providers/yfinance/pyproject.toml +++ b/openbb_platform/providers/yfinance/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-yfinance" -version = "0.1.0a3" +version = "0.1.0a4" description = "yfinance extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,8 +8,8 @@ packages = [{ include = "openbb_yfinance" }] [tool.poetry.dependencies] python = "^3.8" -yfinance="^0.2.27" -openbb-core = "^0.1.0a4" +yfinance = "^0.2.27" +openbb-core = "^0.1.0a5" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/pyproject.toml b/openbb_platform/pyproject.toml index aeec29a75811..fef690ddbc74 100644 --- a/openbb_platform/pyproject.toml +++ b/openbb_platform/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb" -version = "4.0.0a3" +version = "4.0.0a4" description = "OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,35 +8,35 @@ packages = [{ include = "openbb" }] [tool.poetry.dependencies] python = ">=3.8,<3.12" -openbb-core = "^0.1.0a4" +openbb-core = "^0.1.0a5" -openbb-benzinga = "^0.1.0a3" -openbb-fmp = "^0.1.0a3" -openbb-fred = "^0.1.0a3" -openbb-intrinio = "^0.1.0a3" -openbb-polygon = "^0.1.0a3" -openbb-tradingeconomics = "^0.1.0a3" +openbb-benzinga = "^0.1.0a4" +openbb-fmp = "^0.1.0a4" +openbb-fred = "^0.1.0a4" +openbb-intrinio = "^0.1.0a4" +openbb-polygon = "^0.1.0a4" +openbb-tradingeconomics = "^0.1.0a4" -openbb-crypto = "^0.1.0a3" -openbb-economy = "^0.1.0a3" -openbb-forex = "^0.1.0a3" -openbb-fixedincome = "^0.1.0a3" -openbb-news = "^0.1.0a3" -openbb-stocks = "^0.1.0a3" +openbb-crypto = "^0.1.0a4" +openbb-economy = "^0.1.0a4" +openbb-forex = "^0.1.0a4" +openbb-fixedincome = "^0.1.0a4" +openbb-news = "^0.1.0a4" +openbb-stocks = "^0.1.0a4" # Community dependencies -openbb-alpha-vantage = { version = "^0.1.0a3", optional = true } -openbb-biztoc = { version = "^0.1.0a3", optional = true } -openbb-cboe = { version = "^0.1.0a3", optional = true } -openbb-quandl = { version = "^0.1.0a3", optional = true } -openbb-yfinance = { version = "^0.1.0a3", optional = true } -openbb-oecd = { version = "^0.1.0a3", optional = true } +openbb-alpha-vantage = { version = "^0.1.0a4", optional = true } +openbb-biztoc = { version = "^0.1.0a4", optional = true } +openbb-cboe = { version = "^0.1.0a4", optional = true } +openbb-quandl = { version = "^0.1.0a4", optional = true } +openbb-yfinance = { version = "^0.1.0a4", optional = true } +openbb-oecd = { version = "^0.1.0a4", optional = true } -openbb-charting = { version = "^0.1.0a3", optional = true } -openbb-futures = { version = "^0.1.0a3", optional = true } -openbb-qa = { version = "^0.1.0a3", optional = true } -openbb-ta = { version = "^0.1.0a3", optional = true } -openbb-econometrics = { version = "^0.1.0a3", optional = true } +openbb-charting = { version = "^0.1.0a4", optional = true } +openbb-futures = { version = "^0.1.0a4", optional = true } +openbb-qa = { version = "^0.1.0a4", optional = true } +openbb-ta = { version = "^0.1.0a4", optional = true } +openbb-econometrics = { version = "^0.1.0a4", optional = true } [tool.poetry.extras] alpha_vantage = ["openbb-alpha-vantage"] From 0fa263f0beec8844cdf01811de88515378c77aba Mon Sep 17 00:00:00 2001 From: Pratyush Shukla Date: Thu, 26 Oct 2023 17:37:50 +0530 Subject: [PATCH 19/23] cleaned `descriptions.py` --- .../provider/openbb_provider/utils/descriptions.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/openbb_platform/platform/provider/openbb_provider/utils/descriptions.py b/openbb_platform/platform/provider/openbb_provider/utils/descriptions.py index 7384677b34e5..acc42709eabc 100644 --- a/openbb_platform/platform/provider/openbb_provider/utils/descriptions.py +++ b/openbb_platform/platform/provider/openbb_provider/utils/descriptions.py @@ -5,17 +5,10 @@ "start_date": "Start date of the data, in YYYY-MM-DD format.", "end_date": "End date of the data, in YYYY-MM-DD format.", "interval": "Time interval of the data to return.", - # "weekly": "Whether to return weekly data.", - # "monthly": "Whether to return monthly data.", "period": "Time period of the data to return.", "date": "A specific date to get data for.", "limit": "The number of data entries to return.", "countries": "The country or countries to get data.", - "units": """The unit of measurement for the CPI data. - Options: - - `growth_previous`: growth from the previous period - - `growth_same`: growth from the same period in the previous year - - `index_2015`: index with base year 2015.""", "frequency": "The frequency of the data points; options include `monthly`, `quarter`, and `annual`", } From 386b13573b1f313c3e38e5e1926318cf296662bd Mon Sep 17 00:00:00 2001 From: Pratyush Shukla Date: Thu, 26 Oct 2023 17:42:36 +0530 Subject: [PATCH 20/23] fix description in `cpi.py` --- .../platform/provider/openbb_provider/standard_models/cpi.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/openbb_platform/platform/provider/openbb_provider/standard_models/cpi.py b/openbb_platform/platform/provider/openbb_provider/standard_models/cpi.py index 7943416ad8cd..4c5312ae1c41 100644 --- a/openbb_platform/platform/provider/openbb_provider/standard_models/cpi.py +++ b/openbb_platform/platform/provider/openbb_provider/standard_models/cpi.py @@ -73,7 +73,9 @@ class CPIQueryParams(QueryParams): description=QUERY_DESCRIPTIONS.get("countries") ) units: CPI_UNITS = Field( - default="growth_same", description=QUERY_DESCRIPTIONS.get("units") + default="growth_same", + description=("Units to fetch data for. Choose between " + "'growth_previous', 'growth_same', 'index_2015'") ) frequency: CPI_FREQUENCY = Field( default="monthly", description=QUERY_DESCRIPTIONS.get("frequency") From bc109ff5228ba36988a2cf404236b8b200e5e995 Mon Sep 17 00:00:00 2001 From: Theodore Aptekarev Date: Thu, 26 Oct 2023 16:57:30 +0200 Subject: [PATCH 21/23] Add ETF extension to v4 (#5609) * Add etf extension with search data model * Add FMP ETF search * Add fetcher tests --- openbb_platform/extensions/etf/README.md | 11 + .../extensions/etf/openbb_etf/__init__.py | 1 + .../extensions/etf/openbb_etf/etf_router.py | 29 + openbb_platform/extensions/etf/pyproject.toml | 18 + openbb_platform/extensions/etf/tests/.gitkeep | 0 .../standard_models/etf_search.py | 4 +- .../providers/fmp/openbb_fmp/__init__.py | 2 + .../fmp/openbb_fmp/models/etf_search.py | 134 + .../providers/fmp/openbb_fmp/utils/helpers.py | 9 +- .../test_fmp_etf_search_fetcher.yaml | 3984 +++++++++++++++++ .../providers/fmp/tests/test_fmp_fetchers.py | 10 + 11 files changed, 4196 insertions(+), 6 deletions(-) create mode 100644 openbb_platform/extensions/etf/README.md create mode 100644 openbb_platform/extensions/etf/openbb_etf/__init__.py create mode 100644 openbb_platform/extensions/etf/openbb_etf/etf_router.py create mode 100644 openbb_platform/extensions/etf/pyproject.toml create mode 100644 openbb_platform/extensions/etf/tests/.gitkeep create mode 100644 openbb_platform/providers/fmp/openbb_fmp/models/etf_search.py create mode 100644 openbb_platform/providers/fmp/tests/record/http/test_fmp_fetchers/test_fmp_etf_search_fetcher.yaml diff --git a/openbb_platform/extensions/etf/README.md b/openbb_platform/extensions/etf/README.md new file mode 100644 index 000000000000..ea64529e6472 --- /dev/null +++ b/openbb_platform/extensions/etf/README.md @@ -0,0 +1,11 @@ +# ETF data extension for OpenBB SDK + +This extension provides a set of commands for ETF data retrieval. + +## Installation + +To install the extension, run the following command in this folder: + +```bash +pip install . +``` diff --git a/openbb_platform/extensions/etf/openbb_etf/__init__.py b/openbb_platform/extensions/etf/openbb_etf/__init__.py new file mode 100644 index 000000000000..0151e352e778 --- /dev/null +++ b/openbb_platform/extensions/etf/openbb_etf/__init__.py @@ -0,0 +1 @@ +"""OpenBB ETF Extension.""" diff --git a/openbb_platform/extensions/etf/openbb_etf/etf_router.py b/openbb_platform/extensions/etf/openbb_etf/etf_router.py new file mode 100644 index 000000000000..a8ff8dde67a5 --- /dev/null +++ b/openbb_platform/extensions/etf/openbb_etf/etf_router.py @@ -0,0 +1,29 @@ +"""ETF Router.""" + +from openbb_core.app.model.command_context import CommandContext +from openbb_core.app.model.obbject import OBBject +from openbb_core.app.provider_interface import ( + ExtraParams, + ProviderChoices, + StandardParams, +) +from openbb_core.app.query import Query +from openbb_core.app.router import Router +from pydantic import BaseModel + +router = Router(prefix="") + + +# pylint: disable=unused-argument +@router.command(model="EtfSearch") +def search( + cc: CommandContext, + provider_choices: ProviderChoices, + standard_params: StandardParams, + extra_params: ExtraParams, +) -> OBBject[BaseModel]: + """Search for ETFs. + + An empty query returns the full list of ETFs from the provider. + """ + return OBBject(results=Query(**locals()).execute()) diff --git a/openbb_platform/extensions/etf/pyproject.toml b/openbb_platform/extensions/etf/pyproject.toml new file mode 100644 index 000000000000..73c9878f6642 --- /dev/null +++ b/openbb_platform/extensions/etf/pyproject.toml @@ -0,0 +1,18 @@ +[tool.poetry] +name = "openbb-etf" +version = "0.1.0a3" +description = "ETF extension for OpenBB" +authors = ["OpenBB Team "] +readme = "README.md" +packages = [{ include = "openbb_etf" }] + +[tool.poetry.dependencies] +python = "^3.8" +openbb-core = "^0.1.0a4" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" + +[tool.poetry.plugins."openbb_core_extension"] +etf = "openbb_etf.etf_router:router" diff --git a/openbb_platform/extensions/etf/tests/.gitkeep b/openbb_platform/extensions/etf/tests/.gitkeep new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/openbb_platform/platform/provider/openbb_provider/standard_models/etf_search.py b/openbb_platform/platform/provider/openbb_provider/standard_models/etf_search.py index 6725d120c6a1..13db993169bb 100644 --- a/openbb_platform/platform/provider/openbb_provider/standard_models/etf_search.py +++ b/openbb_platform/platform/provider/openbb_provider/standard_models/etf_search.py @@ -10,7 +10,7 @@ class EtfSearchQueryParams(QueryParams): - """ETF Search Query Params""" + """ETF Search Query Params.""" query: Optional[str] = Field(description="Search query.", default="") @@ -18,5 +18,5 @@ class EtfSearchQueryParams(QueryParams): class EtfSearchData(Data): """ETF Search Data.""" - symbol: str = Field(description=DATA_DESCRIPTIONS.get("symbol", "")) + symbol: str = Field(description=DATA_DESCRIPTIONS.get("symbol", "") + "(ETF)") name: Optional[str] = Field(description="Name of the ETF.", default=None) diff --git a/openbb_platform/providers/fmp/openbb_fmp/__init__.py b/openbb_platform/providers/fmp/openbb_fmp/__init__.py index 1250b6e7d232..5b03b72e2b67 100644 --- a/openbb_platform/providers/fmp/openbb_fmp/__init__.py +++ b/openbb_platform/providers/fmp/openbb_fmp/__init__.py @@ -11,6 +11,7 @@ from openbb_fmp.models.dividend_calendar import FMPDividendCalendarFetcher from openbb_fmp.models.earnings_calendar import FMPEarningsCalendarFetcher from openbb_fmp.models.earnings_call_transcript import FMPEarningsCallTranscriptFetcher +from openbb_fmp.models.etf_search import FMPEtfSearchFetcher from openbb_fmp.models.executive_compensation import FMPExecutiveCompensationFetcher from openbb_fmp.models.financial_ratios import FMPFinancialRatiosFetcher from openbb_fmp.models.forex_historical import FMPForexHistoricalFetcher @@ -82,6 +83,7 @@ "CompanyFilings": FMPCompanyFilingsFetcher, "TreasuryRates": FMPTreasuryRatesFetcher, "ExecutiveCompensation": FMPExecutiveCompensationFetcher, + "EtfSearch": FMPEtfSearchFetcher, "CryptoHistorical": FMPCryptoHistoricalFetcher, "ForexHistorical": FMPForexHistoricalFetcher, "ForexPairs": FMPForexPairsFetcher, diff --git a/openbb_platform/providers/fmp/openbb_fmp/models/etf_search.py b/openbb_platform/providers/fmp/openbb_fmp/models/etf_search.py new file mode 100644 index 000000000000..2b9545bd7122 --- /dev/null +++ b/openbb_platform/providers/fmp/openbb_fmp/models/etf_search.py @@ -0,0 +1,134 @@ +"""FMP ETF Search fetcher.""" + +from typing import Any, Dict, List, Literal, Optional + +import pandas as pd +from openbb_fmp.utils.helpers import create_url, get_data_many +from openbb_provider.abstract.fetcher import Fetcher +from openbb_provider.standard_models.etf_search import ( + EtfSearchData, + EtfSearchQueryParams, +) +from pydantic import Field + + +class FMPEtfSearchQueryParams(EtfSearchQueryParams): + """FMP ETF Search Query Params.""" + + exchange: Optional[ + Literal["AMEX", "NYSE", "NASDAQ", "ETF", "TSX", "EURONEXT"] + ] = Field( + description="The exchange code the ETF trades on.", + default=None, + ) + is_active: Optional[Literal[True, False]] = Field( + description="Whether the ETF is actively trading.", + default=None, + ) + + +class FMPEtfSearchData(EtfSearchData): + """FMP ETF Search Data.""" + + __alias_dict__ = { + "name": "companyName", + } + + market_cap: Optional[float] = Field( + description="The market cap of the ETF.", alias="marketCap", default=None + ) + sector: Optional[str] = Field(description="The sector of the ETF.", default=None) + industry: Optional[str] = Field( + description="The industry of the ETF.", default=None + ) + beta: Optional[float] = Field(description="The beta of the ETF.", default=None) + price: Optional[float] = Field( + description="The current price of the ETF.", default=None + ) + last_annual_dividend: Optional[float] = Field( + description="The last annual dividend paid.", + alias="lastAnnualDividend", + default=None, + ) + volume: Optional[float] = Field( + description="The current trading volume of the ETF.", default=None + ) + exchange: Optional[str] = Field( + description="The exchange code the ETF trades on.", + alias="exchangeShortName", + default=None, + ) + exchange_name: Optional[str] = Field( + description="The full name of the exchange the ETF trades on.", + alias="exchange", + default=None, + ) + country: Optional[str] = Field( + description="The country the ETF is registered in.", default=None + ) + actively_trading: Optional[Literal[True, False]] = Field( + description="Whether the ETF is actively trading.", + alias="isActivelyTrading", + default=None, + ) + + +class FMPEtfSearchFetcher( + Fetcher[ + FMPEtfSearchQueryParams, + List[FMPEtfSearchData], + ] +): + """Transform the query, extract and transform the data from the FMP endpoints.""" + + @staticmethod + def transform_query(params: Dict[str, Any]) -> FMPEtfSearchQueryParams: + """Transform the query.""" + return FMPEtfSearchQueryParams(**params) + + @staticmethod + def extract_data( + query: FMPEtfSearchQueryParams, + credentials: Optional[Dict[str, str]], + **kwargs: Any, + ) -> List[Dict]: + """Return the raw data from the FMP endpoint.""" + api_key = credentials.get("fmp_api_key") if credentials else "" + + url = create_url( + 3, + "stock-screener", + api_key, + {"isEtf": True, "limit": 10000}, + exclude=["symbol"], + ) + + return get_data_many(url, **kwargs) + + @staticmethod + def transform_data( + query: FMPEtfSearchQueryParams, data: List[Dict], **kwargs: Any + ) -> List[FMPEtfSearchData]: + """Return the transformed data.""" + etfs = pd.DataFrame(data) + etfs.drop(columns="isEtf", inplace=True) + + if query.is_active: + etfs = etfs[etfs["isActivelyTrading"] == query.is_active] + + if query.exchange: + etfs = etfs[etfs["exchangeShortName"] == query.exchange] + + if query.query: + etfs = etfs[ + etfs["companyName"].str.contains(query.query, case=False) + | etfs["exchangeShortName"].str.contains(query.query, case=False) + | etfs["exchange"].str.contains(query.query, case=False) + | etfs["sector"].str.contains(query.query, case=False) + | etfs["industry"].str.contains(query.query, case=False) + | etfs["country"].str.contains(query.query, case=False) + ] + for col in etfs: + if etfs[col].dtype in ("int", "float"): + etfs[col] = etfs[col].fillna(0) + return [FMPEtfSearchData.model_validate(d) for d in etfs.to_dict("records")] diff --git a/openbb_platform/providers/fmp/openbb_fmp/utils/helpers.py b/openbb_platform/providers/fmp/openbb_fmp/utils/helpers.py index 953e60275b03..e045cce0c432 100644 --- a/openbb_platform/providers/fmp/openbb_fmp/utils/helpers.py +++ b/openbb_platform/providers/fmp/openbb_fmp/utils/helpers.py @@ -3,7 +3,7 @@ import json from datetime import date as dateType from io import StringIO -from typing import Any, List, Optional, TypeVar, Union +from typing import Any, Dict, List, Optional, TypeVar, Union import requests from openbb_provider import helpers @@ -79,7 +79,7 @@ def create_url( version: int, endpoint: str, api_key: Optional[str], - query: Optional[BaseModel] = None, + query: Optional[Union[BaseModel, Dict]] = None, exclude: Optional[List[str]] = None, ) -> str: """Return a URL for the FMP API. @@ -102,7 +102,9 @@ def create_url( str The querystring. """ - the_dict = {} if not query else query.model_dump() + the_dict = {} + if query: + the_dict = query.model_dump() if isinstance(query, BaseModel) else query query_string = get_querystring(the_dict, exclude or []) base_url = f"https://financialmodelingprep.com/api/v{version}/" return f"{base_url}{endpoint}?{query_string}&apikey={api_key}" @@ -169,7 +171,6 @@ def most_recent_quarter(base: dateType = dateType.today()) -> dateType: def get_interval(value: str) -> str: """Get the intervals for the FMP API.""" - intervals = { "m": "min", "h": "hour", diff --git a/openbb_platform/providers/fmp/tests/record/http/test_fmp_fetchers/test_fmp_etf_search_fetcher.yaml b/openbb_platform/providers/fmp/tests/record/http/test_fmp_fetchers/test_fmp_etf_search_fetcher.yaml new file mode 100644 index 000000000000..fafedab31d6c --- /dev/null +++ b/openbb_platform/providers/fmp/tests/record/http/test_fmp_fetchers/test_fmp_etf_search_fetcher.yaml @@ -0,0 +1,3984 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://financialmodelingprep.com/api/v3/stock-screener?apikey=MOCK_API_KEY&isEtf=True&limit=10000 + response: + body: + string: !!binary | + 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 + 7d//B2SP8Lc/BSIA + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Headers: + - X-Requested-With, content-type, auth-token, Authorization, stripe-signature, + APPS + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Access-Control-Max-Age: + - '3600' + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json; charset=utf-8 + Date: + - Thu, 26 Oct 2023 09:51:12 GMT + ETag: + - W/"22053f-EEOM4e1ljqq3RFQ+bm23QDVvh+o" + Server: + - nginx/1.18.0 (Ubuntu) + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + X-Frame-Options: + - SAMEORIGIN + X-Powered-By: + - Express + status: + code: 200 + message: OK +version: 1 diff --git a/openbb_platform/providers/fmp/tests/test_fmp_fetchers.py b/openbb_platform/providers/fmp/tests/test_fmp_fetchers.py index f2d49a87ed02..3152cbed6e35 100644 --- a/openbb_platform/providers/fmp/tests/test_fmp_fetchers.py +++ b/openbb_platform/providers/fmp/tests/test_fmp_fetchers.py @@ -14,6 +14,7 @@ from openbb_fmp.models.dividend_calendar import FMPDividendCalendarFetcher from openbb_fmp.models.earnings_calendar import FMPEarningsCalendarFetcher from openbb_fmp.models.earnings_call_transcript import FMPEarningsCallTranscriptFetcher +from openbb_fmp.models.etf_search import FMPEtfSearchFetcher from openbb_fmp.models.executive_compensation import FMPExecutiveCompensationFetcher from openbb_fmp.models.financial_ratios import FMPFinancialRatiosFetcher from openbb_fmp.models.forex_historical import FMPForexHistoricalFetcher @@ -455,3 +456,12 @@ def test_fmp_financial_ratios_fetcher(credentials=test_credentials): fetcher = FMPFinancialRatiosFetcher() result = fetcher.test(params, credentials) assert result is None + + +@pytest.mark.record_http +def test_fmp_etf_search_fetcher(credentials=test_credentials): + params = {"query": "India"} + + fetcher = FMPEtfSearchFetcher() + result = fetcher.test(params, credentials) + assert result is None From 6b8947cf29e91e4d508a385fea5bc18115092718 Mon Sep 17 00:00:00 2001 From: Theodore Aptekarev Date: Thu, 26 Oct 2023 17:25:03 +0200 Subject: [PATCH 22/23] Add ETF historical price from yfinance (#5610) * Add etf extension with search data model * Add FMP ETF search * Add fetcher tests * Add etf historical price standard model and route * Add etf historical data from yfinance * Add unit tests * Fix linter error. Organize imports * Update test data * Revert common descriptions erased by CPI PR --- .../extensions/etf/openbb_etf/etf_router.py | 11 + .../openbb_provider/standard_models/cpi.py | 13 +- .../standard_models/etf_historical.py | 51 +++++ .../openbb_provider/utils/descriptions.py | 5 +- .../yfinance/openbb_yfinance/__init__.py | 2 + .../openbb_yfinance/models/etf_historical.py | 93 ++++++++ .../yfinance/openbb_yfinance/py.typed | 0 .../yfinance/openbb_yfinance/utils/helpers.py | 11 +- ...test_y_finance_etf_historical_fetcher.yaml | 207 ++++++++++++++++++ .../yfinance/tests/test_yfinance_fetchers.py | 14 ++ 10 files changed, 398 insertions(+), 9 deletions(-) create mode 100644 openbb_platform/platform/provider/openbb_provider/standard_models/etf_historical.py create mode 100644 openbb_platform/providers/yfinance/openbb_yfinance/models/etf_historical.py create mode 100644 openbb_platform/providers/yfinance/openbb_yfinance/py.typed create mode 100644 openbb_platform/providers/yfinance/tests/record/http/test_yfinance_fetchers/test_y_finance_etf_historical_fetcher.yaml diff --git a/openbb_platform/extensions/etf/openbb_etf/etf_router.py b/openbb_platform/extensions/etf/openbb_etf/etf_router.py index a8ff8dde67a5..654b8d0adfbc 100644 --- a/openbb_platform/extensions/etf/openbb_etf/etf_router.py +++ b/openbb_platform/extensions/etf/openbb_etf/etf_router.py @@ -27,3 +27,14 @@ def search( An empty query returns the full list of ETFs from the provider. """ return OBBject(results=Query(**locals()).execute()) + + +@router.command(model="EtfHistorical") +def historical( + cc: CommandContext, + provider_choices: ProviderChoices, + standard_params: StandardParams, + extra_params: ExtraParams, +) -> OBBject[BaseModel]: + """ETF Historical Market Price.""" + return OBBject(results=Query(**locals()).execute()) diff --git a/openbb_platform/platform/provider/openbb_provider/standard_models/cpi.py b/openbb_platform/platform/provider/openbb_provider/standard_models/cpi.py index 4c5312ae1c41..d8cafff7e3a4 100644 --- a/openbb_platform/platform/provider/openbb_provider/standard_models/cpi.py +++ b/openbb_platform/platform/provider/openbb_provider/standard_models/cpi.py @@ -74,11 +74,18 @@ class CPIQueryParams(QueryParams): ) units: CPI_UNITS = Field( default="growth_same", - description=("Units to fetch data for. Choose between " - "'growth_previous', 'growth_same', 'index_2015'") + description=QUERY_DESCRIPTIONS.get("units", "") + + """ + Options: + - `growth_previous`: growth from the previous period + - `growth_same`: growth from the same period in the previous year + - `index_2015`: index with base year 2015.""", ) frequency: CPI_FREQUENCY = Field( - default="monthly", description=QUERY_DESCRIPTIONS.get("frequency") + default="monthly", + description=QUERY_DESCRIPTIONS.get("frequency", "") + + """ + Options: `monthly`, `quarter`, and `annual`.""", ) harmonized: bool = Field( default=False, description="Whether you wish to obtain harmonized data." diff --git a/openbb_platform/platform/provider/openbb_provider/standard_models/etf_historical.py b/openbb_platform/platform/provider/openbb_provider/standard_models/etf_historical.py new file mode 100644 index 000000000000..a7faf874faa0 --- /dev/null +++ b/openbb_platform/platform/provider/openbb_provider/standard_models/etf_historical.py @@ -0,0 +1,51 @@ +"""ETF Historical End of Day Market Price.""" + +from datetime import date as dateType +from typing import List, Optional, Set, Union + +from dateutil import parser +from pydantic import Field, NonNegativeInt, PositiveFloat, field_validator + +from openbb_provider.abstract.data import Data +from openbb_provider.abstract.query_params import QueryParams +from openbb_provider.utils.descriptions import DATA_DESCRIPTIONS, QUERY_DESCRIPTIONS + + +class EtfHistoricalQueryParams(QueryParams): + """ETF end of day Query.""" + + symbol: str = Field(description=QUERY_DESCRIPTIONS.get("symbol", "") + " (ETF)") + start_date: Optional[dateType] = Field( + default=None, + description=QUERY_DESCRIPTIONS.get("start_date", ""), + ) + end_date: Optional[dateType] = Field( + default=None, + description=QUERY_DESCRIPTIONS.get("end_date", ""), + ) + + @field_validator("symbol", mode="before", check_fields=False) + @classmethod + def validate_symbol(cls, v: Union[str, List[str], Set[str]]): + """Convert symbol to uppercase and remove '-'.""" + if isinstance(v, str): + return v.upper() + return ",".join([symbol.upper() for symbol in list(v)]) + + +class EtfHistoricalData(Data): + """ETF end of day price Data.""" + + date: dateType = Field(description=DATA_DESCRIPTIONS.get("date", "")) + open: PositiveFloat = Field(description=DATA_DESCRIPTIONS.get("open", "")) + high: PositiveFloat = Field(description=DATA_DESCRIPTIONS.get("high", "")) + low: PositiveFloat = Field(description=DATA_DESCRIPTIONS.get("low", "")) + close: PositiveFloat = Field(description=DATA_DESCRIPTIONS.get("close", "")) + volume: Optional[NonNegativeInt] = Field( + description=DATA_DESCRIPTIONS.get("volume", "") + ) + + @field_validator("date", mode="before", check_fields=False) + def date_validate(cls, v): # pylint: disable=E0213 + """Return formatted datetime.""" + return parser.isoparse(str(v)) diff --git a/openbb_platform/platform/provider/openbb_provider/utils/descriptions.py b/openbb_platform/platform/provider/openbb_provider/utils/descriptions.py index acc42709eabc..9a400b94a9b2 100644 --- a/openbb_platform/platform/provider/openbb_provider/utils/descriptions.py +++ b/openbb_platform/platform/provider/openbb_provider/utils/descriptions.py @@ -5,11 +5,14 @@ "start_date": "Start date of the data, in YYYY-MM-DD format.", "end_date": "End date of the data, in YYYY-MM-DD format.", "interval": "Time interval of the data to return.", + # "weekly": "Whether to return weekly data.", + # "monthly": "Whether to return monthly data.", "period": "Time period of the data to return.", "date": "A specific date to get data for.", "limit": "The number of data entries to return.", "countries": "The country or countries to get data.", - "frequency": "The frequency of the data points; options include `monthly`, `quarter`, and `annual`", + "units": "The unit of measurement for the data.", + "frequency": "The frequency of the data.", } DATA_DESCRIPTIONS = { diff --git a/openbb_platform/providers/yfinance/openbb_yfinance/__init__.py b/openbb_platform/providers/yfinance/openbb_yfinance/__init__.py index 4930113bc00b..b1a314534c96 100644 --- a/openbb_platform/providers/yfinance/openbb_yfinance/__init__.py +++ b/openbb_platform/providers/yfinance/openbb_yfinance/__init__.py @@ -6,6 +6,7 @@ from openbb_yfinance.models.balance_sheet import YFinanceBalanceSheetFetcher from openbb_yfinance.models.cash_flow import YFinanceCashFlowStatementFetcher from openbb_yfinance.models.crypto_historical import YFinanceCryptoHistoricalFetcher +from openbb_yfinance.models.etf_historical import YFinanceEtfHistoricalFetcher from openbb_yfinance.models.forex_historical import YFinanceForexHistoricalFetcher from openbb_yfinance.models.futures_curve import YFinanceFuturesCurveFetcher from openbb_yfinance.models.futures_historical import YFinanceFuturesHistoricalFetcher @@ -27,6 +28,7 @@ "ForexHistorical": YFinanceForexHistoricalFetcher, "MajorIndicesHistorical": YFinanceMajorIndicesHistoricalFetcher, "StockHistorical": YFinanceStockHistoricalFetcher, + "EtfHistorical": YFinanceEtfHistoricalFetcher, "FuturesHistorical": YFinanceFuturesHistoricalFetcher, "FuturesCurve": YFinanceFuturesCurveFetcher, "StockNews": YFinanceStockNewsFetcher, diff --git a/openbb_platform/providers/yfinance/openbb_yfinance/models/etf_historical.py b/openbb_platform/providers/yfinance/openbb_yfinance/models/etf_historical.py new file mode 100644 index 000000000000..f6d12ea5d048 --- /dev/null +++ b/openbb_platform/providers/yfinance/openbb_yfinance/models/etf_historical.py @@ -0,0 +1,93 @@ +"""YFinance ETF Historical Market Price.""" +from datetime import datetime +from typing import Any, Dict, List, Optional + +from dateutil.relativedelta import relativedelta +from openbb_provider.abstract.fetcher import Fetcher +from openbb_provider.standard_models.etf_historical import ( + EtfHistoricalData, + EtfHistoricalQueryParams, +) +from openbb_provider.utils.errors import EmptyDataError +from pandas import Timestamp +from pydantic import Field, field_validator + +from ..utils.helpers import yf_download + + +class YFinanceEtfHistoricalQueryParams(EtfHistoricalQueryParams): + """YFinance ETF Historical End of Day Market Price Query. + + Source: https://finance.yahoo.com/ + """ + + +class YFinanceEtfHistoricalData(EtfHistoricalData): + """YFinance Etf End of Day Data.""" + + __alias_dict__ = { + "adj_close": "adj close", + } + + adj_close: float = Field( + description="The adjusted closing price of the ETF.", + ) + + @field_validator("date", mode="before", check_fields=False) + def date_validate(cls, v): # pylint: disable=E0213 + """Return formatted datetime.""" + if isinstance(v, Timestamp): + return v.to_pydatetime() + return v + + +class YFinanceEtfHistoricalFetcher( + Fetcher[ + YFinanceEtfHistoricalQueryParams, + List[YFinanceEtfHistoricalData], + ] +): + """Transform the query, extract and transform the data from the yfinance endpoints.""" + + @staticmethod + def transform_query(params: Dict[str, Any]) -> YFinanceEtfHistoricalQueryParams: + """Transform the query.""" + transformed_params = params + now = datetime.now().date() + + if params.get("start_date") is None: + transformed_params["start_date"] = now - relativedelta(years=1) + + if params.get("end_date") is None: + transformed_params["end_date"] = now + + return YFinanceEtfHistoricalQueryParams(**params) + + # pylint: disable=unused-argument + @staticmethod + def extract_data( + query: YFinanceEtfHistoricalQueryParams, + credentials: Optional[Dict[str, str]], + **kwargs: Any, + ) -> List[Dict]: + """Return the raw data from the yfinance endpoint.""" + data = yf_download( + symbol=query.symbol, + start_date=query.start_date, + end_date=query.end_date, + keep_adjusted=True, + ) + + if data.empty: + raise EmptyDataError() + + return data.to_dict("records") + + @staticmethod + def transform_data( + query: YFinanceEtfHistoricalQueryParams, + data: List[Dict], + **kwargs: Any, + ) -> List[YFinanceEtfHistoricalData]: + """Transform the data to the standard format.""" + return [YFinanceEtfHistoricalData.model_validate(d) for d in data] diff --git a/openbb_platform/providers/yfinance/openbb_yfinance/py.typed b/openbb_platform/providers/yfinance/openbb_yfinance/py.typed new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/openbb_platform/providers/yfinance/openbb_yfinance/utils/helpers.py b/openbb_platform/providers/yfinance/openbb_yfinance/utils/helpers.py index d0a9d75c51e1..f4e7e8ad03a7 100644 --- a/openbb_platform/providers/yfinance/openbb_yfinance/utils/helpers.py +++ b/openbb_platform/providers/yfinance/openbb_yfinance/utils/helpers.py @@ -1,6 +1,5 @@ """yfinance helpers module.""" - from datetime import ( date as dateType, datetime, @@ -11,7 +10,8 @@ import pandas as pd import yfinance as yf from dateutil.relativedelta import relativedelta -from openbb_yfinance.utils.references import MONTHS + +from .references import MONTHS def get_futures_data() -> pd.DataFrame: @@ -78,6 +78,7 @@ def get_futures_curve(symbol: str, date: Optional[dateType]) -> pd.DataFrame: return pd.DataFrame({"Last Price": futures_curve, "expiration": futures_index}) +# pylint: disable=too-many-arguments,unused-argument def yf_download( symbol: str, start_date: Optional[Union[str, dateType]] = None, @@ -94,10 +95,10 @@ def yf_download( repair: bool = False, rounding: bool = False, group_by: Literal["symbol", "column"] = "column", + keep_adjusted: bool = False, **kwargs: Any, ) -> pd.DataFrame: - """Base level yFinance OHLC helper function for returning any ticker and interval available.""" - + """Get yFinance OHLC data for any ticker and interval available.""" symbol = symbol.upper() _start_date = start_date @@ -165,7 +166,7 @@ def yf_download( if interval not in ["1m", "2m", "5m", "15m", "30m", "90m", "60m", "1h"]: data["date"] = data["date"].dt.tz_localize(None).dt.strftime("%Y-%m-%d") - if actions is False: + if keep_adjusted is False: data = data.drop(columns=["Adj Close"]) data.columns = data.columns.str.lower().to_list() diff --git a/openbb_platform/providers/yfinance/tests/record/http/test_yfinance_fetchers/test_y_finance_etf_historical_fetcher.yaml b/openbb_platform/providers/yfinance/tests/record/http/test_yfinance_fetchers/test_y_finance_etf_historical_fetcher.yaml new file mode 100644 index 000000000000..08dd47194462 --- /dev/null +++ b/openbb_platform/providers/yfinance/tests/record/http/test_yfinance_fetchers/test_y_finance_etf_historical_fetcher.yaml @@ -0,0 +1,207 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://query2.finance.yahoo.com/v8/finance/chart/IOO?interval=1d&range=1d + response: + body: + string: '{"chart":{"result":[{"meta":{"currency":"USD","symbol":"IOO","exchangeName":"PCX","instrumentType":"ETF","firstTradeDate":976285800,"regularMarketTime":1698331637,"gmtoffset":-14400,"timezone":"EDT","exchangeTimezoneName":"America/New_York","regularMarketPrice":71.644,"chartPreviousClose":72.31,"priceHint":2,"currentTradingPeriod":{"pre":{"timezone":"EDT","start":1698307200,"end":1698327000,"gmtoffset":-14400},"regular":{"timezone":"EDT","start":1698327000,"end":1698350400,"gmtoffset":-14400},"post":{"timezone":"EDT","start":1698350400,"end":1698364800,"gmtoffset":-14400}},"dataGranularity":"1d","range":"1d","validRanges":["1d","5d","1mo","3mo","6mo","1y","2y","5y","10y","ytd","max"]},"timestamp":[1698331637],"indicators":{"quote":[{"volume":[19268],"low":[71.4000015258789],"high":[72.0999984741211],"close":[71.64420318603516],"open":[72.05000305175781]}],"adjclose":[{"adjclose":[71.64420318603516]}]}}],"error":null}}' + headers: + Age: + - '0' + Connection: + - keep-alive + Expect-CT: + - max-age=31536000, report-uri="http://csp.yahoo.com/beacon/csp?src=yahoocom-expect-ct-report-only" + Referrer-Policy: + - no-referrer-when-downgrade + Strict-Transport-Security: + - max-age=31536000 + X-Content-Type-Options: + - nosniff + X-XSS-Protection: + - 1; mode=block + cache-control: + - public, max-age=10, stale-while-revalidate=20 + content-length: + - '931' + content-type: + - application/json;charset=utf-8 + date: + - Thu, 26 Oct 2023 14:52:53 GMT + server: + - ATS + vary: + - Origin,Accept-Encoding + x-envoy-decorator-operation: + - finance-chart-api--mtls-production-ir2.finance-k8s.svc.yahoo.local:4080/* + x-envoy-upstream-service-time: + - '50' + x-request-id: + - b0b23b93-2e0e-4611-8012-ffdafb27725b + x-yahoo-request-id: + - 5nlevs5ijkva5 + y-rid: + - 5nlevs5ijkva5 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://query2.finance.yahoo.com/v8/finance/chart/IOO?events=div%2Csplits%2CcapitalGains&includePrePost=False&interval=1d&period1=MOCK_PERIOD_1&period2=MOCK_PERIOD_2 + response: + body: + string: !!binary | + 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 + 249SVN49PT0+3Xz18OHNm48f/xcdPk6xj1cAAA== + headers: + Age: + - '1' + Connection: + - keep-alive + Expect-CT: + - max-age=31536000, report-uri="http://csp.yahoo.com/beacon/csp?src=yahoocom-expect-ct-report-only" + Referrer-Policy: + - no-referrer-when-downgrade + Strict-Transport-Security: + - max-age=31536000 + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + X-XSS-Protection: + - 1; mode=block + cache-control: + - public, max-age=10, stale-while-revalidate=20 + content-encoding: + - gzip + content-type: + - application/json;charset=utf-8 + date: + - Thu, 26 Oct 2023 14:52:53 GMT + server: + - ATS + vary: + - Origin,Accept-Encoding + x-envoy-decorator-operation: + - finance-chart-api--mtls-production-ir2.finance-k8s.svc.yahoo.local:4080/* + x-envoy-upstream-service-time: + - '31' + x-request-id: + - a0cc5f2f-2ba3-46fc-aed6-4f8ddf0543b9 + x-yahoo-request-id: + - 65556j9ijkva6 + y-rid: + - 65556j9ijkva6 + status: + code: 200 + message: OK +version: 1 diff --git a/openbb_platform/providers/yfinance/tests/test_yfinance_fetchers.py b/openbb_platform/providers/yfinance/tests/test_yfinance_fetchers.py index 2a61f93224f0..afbab841967d 100644 --- a/openbb_platform/providers/yfinance/tests/test_yfinance_fetchers.py +++ b/openbb_platform/providers/yfinance/tests/test_yfinance_fetchers.py @@ -6,6 +6,7 @@ from openbb_yfinance.models.balance_sheet import YFinanceBalanceSheetFetcher from openbb_yfinance.models.cash_flow import YFinanceCashFlowStatementFetcher from openbb_yfinance.models.crypto_historical import YFinanceCryptoHistoricalFetcher +from openbb_yfinance.models.etf_historical import YFinanceEtfHistoricalFetcher from openbb_yfinance.models.forex_historical import YFinanceForexHistoricalFetcher from openbb_yfinance.models.futures_curve import YFinanceFuturesCurveFetcher from openbb_yfinance.models.futures_historical import YFinanceFuturesHistoricalFetcher @@ -154,3 +155,16 @@ def test_y_finance_available_indices_fetcher(credentials=test_credentials): fetcher = YFinanceAvailableIndicesFetcher() result = fetcher.test(params, credentials) assert result is None + + +@pytest.mark.record_http +def test_y_finance_etf_historical_fetcher(credentials=test_credentials): + params = { + "symbol": "IOO", + "start_date": date(2023, 1, 1), + "end_date": date(2023, 6, 6), + } + + fetcher = YFinanceEtfHistoricalFetcher() + result = fetcher.test(params, credentials) + assert result is None From c51336fa746083684903a8f9b1367e65c26b6a28 Mon Sep 17 00:00:00 2001 From: Pratyush Shukla Date: Thu, 26 Oct 2023 21:13:35 +0530 Subject: [PATCH 23/23] remove `symbol` from data for `stocks.ca.peers` --- .../provider/openbb_provider/standard_models/stock_peers.py | 3 +-- openbb_platform/providers/fmp/openbb_fmp/models/stock_peers.py | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openbb_platform/platform/provider/openbb_provider/standard_models/stock_peers.py b/openbb_platform/platform/provider/openbb_provider/standard_models/stock_peers.py index 6fe2bc0ebc4e..e8d13f12836e 100644 --- a/openbb_platform/platform/provider/openbb_provider/standard_models/stock_peers.py +++ b/openbb_platform/platform/provider/openbb_provider/standard_models/stock_peers.py @@ -6,7 +6,7 @@ from openbb_provider.abstract.data import Data from openbb_provider.abstract.query_params import QueryParams -from openbb_provider.utils.descriptions import DATA_DESCRIPTIONS, QUERY_DESCRIPTIONS +from openbb_provider.utils.descriptions import QUERY_DESCRIPTIONS class StockPeersQueryParams(QueryParams): @@ -25,7 +25,6 @@ def upper_symbol(cls, v: Union[str, List[str], Set[str]]): class StockPeersData(Data): """Stock Peers data.""" - symbol: str = Field(description=DATA_DESCRIPTIONS.get("symbol", "")) peers_list: List[str] = Field( default_factory=list, description="A list of stock peers based on sector, exchange and market cap.", diff --git a/openbb_platform/providers/fmp/openbb_fmp/models/stock_peers.py b/openbb_platform/providers/fmp/openbb_fmp/models/stock_peers.py index 6c3c1fc437bf..faf1882a5c7e 100644 --- a/openbb_platform/providers/fmp/openbb_fmp/models/stock_peers.py +++ b/openbb_platform/providers/fmp/openbb_fmp/models/stock_peers.py @@ -54,4 +54,5 @@ def transform_data( query: FMPStockPeersQueryParams, data: dict, **kwargs: Any ) -> FMPStockPeersData: """Return the transformed data.""" + data.pop("symbol") return FMPStockPeersData.model_validate(data)