From 48f2c2ee3f295f44b314e4e17b4e6b96ec52fe05 Mon Sep 17 00:00:00 2001 From: Franco Bocci <121866694+franco-bocci@users.noreply.github.com> Date: Thu, 5 Dec 2024 11:39:11 +0100 Subject: [PATCH 1/3] Remove upper bound for `protobuf` Signed-off-by: franco-bocci Signed-off-by: Erin Boehmer --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 034f669910..16240ff272 100644 --- a/setup.py +++ b/setup.py @@ -33,7 +33,7 @@ "click>=7.0.0,<9.0.0", "colorama>=0.3.9,<1", "dill~=0.3.0", - "protobuf>=4.24.0,<5.0.0", + "protobuf>=4.24.0", "Jinja2>=2,<4", "jsonschema", "mmh3", From 2f9158cb1c7e9e0424fe7ffe3699651aa1d60293 Mon Sep 17 00:00:00 2001 From: Erin Boehmer Date: Mon, 27 Jan 2025 16:53:26 -0500 Subject: [PATCH 2/3] Recompile python lock files Signed-off-by: Erin Boehmer --- .../requirements/py3.10-ci-requirements.txt | 179 +++++++++--------- .../requirements/py3.10-requirements.txt | 54 +++--- .../requirements/py3.11-ci-requirements.txt | 178 ++++++++--------- .../requirements/py3.11-requirements.txt | 54 +++--- .../requirements/py3.9-ci-requirements.txt | 160 ++++++++-------- .../requirements/py3.9-requirements.txt | 43 +++-- 6 files changed, 340 insertions(+), 328 deletions(-) diff --git a/sdk/python/requirements/py3.10-ci-requirements.txt b/sdk/python/requirements/py3.10-ci-requirements.txt index af41030a6d..eae0a088fb 100644 --- a/sdk/python/requirements/py3.10-ci-requirements.txt +++ b/sdk/python/requirements/py3.10-ci-requirements.txt @@ -1,6 +1,6 @@ # This file was autogenerated by uv via the following command: # uv pip compile -p 3.10 --system --no-strip-extras setup.py --extra ci --output-file sdk/python/requirements/py3.10-ci-requirements.txt -aiobotocore==2.16.0 +aiobotocore==2.19.0 # via feast (setup.py) aiohappyeyeballs==2.4.4 # via aiohttp @@ -16,7 +16,7 @@ altair==4.2.2 # via great-expectations annotated-types==0.7.0 # via pydantic -anyio==4.7.0 +anyio==4.8.0 # via # httpx # jupyter-server @@ -46,9 +46,9 @@ async-timeout==5.0.1 # via # aiohttp # redis -atpublic==5.0 +atpublic==5.1 # via ibis-framework -attrs==24.3.0 +attrs==25.1.0 # via # aiohttp # jsonschema @@ -59,7 +59,7 @@ azure-core==1.32.0 # azure-storage-blob azure-identity==1.19.0 # via feast (setup.py) -azure-storage-blob==12.24.0 +azure-storage-blob==12.24.1 # via feast (setup.py) babel==2.16.0 # via @@ -67,15 +67,15 @@ babel==2.16.0 # sphinx beautifulsoup4==4.12.3 # via nbconvert -bigtree==0.22.3 +bigtree==0.23.1 # via feast (setup.py) -bleach==6.2.0 +bleach[css]==6.2.0 # via nbconvert -boto3==1.35.81 +boto3==1.36.3 # via # feast (setup.py) # moto -botocore==1.35.81 +botocore==1.36.3 # via # aiobotocore # boto3 @@ -86,7 +86,7 @@ build==1.2.2.post1 # feast (setup.py) # pip-tools # singlestoredb -cachetools==5.5.0 +cachetools==5.5.1 # via google-auth cassandra-driver==3.29.2 # via feast (setup.py) @@ -106,11 +106,11 @@ cffi==1.17.1 # snowflake-connector-python cfgv==3.4.0 # via pre-commit -charset-normalizer==3.4.0 +charset-normalizer==3.4.1 # via # requests # snowflake-connector-python -click==8.1.7 +click==8.1.8 # via # feast (setup.py) # dask @@ -118,7 +118,7 @@ click==8.1.7 # great-expectations # pip-tools # uvicorn -cloudpickle==3.1.0 +cloudpickle==3.1.1 # via dask colorama==0.4.6 # via @@ -130,7 +130,7 @@ comm==0.2.2 # ipywidgets couchbase==4.3.2 # via feast (setup.py) -coverage[toml]==7.6.9 +coverage[toml]==7.6.10 # via pytest-cov cryptography==43.0.3 # via @@ -148,21 +148,17 @@ cryptography==43.0.3 # types-redis cython==3.0.11 # via thriftpy2 -dask[dataframe]==2024.12.1 - # via - # feast (setup.py) - # dask-expr -dask-expr==1.1.21 - # via dask -db-dtypes==1.3.1 +dask[dataframe]==2025.1.0 + # via feast (setup.py) +db-dtypes==1.4.0 # via google-cloud-bigquery -debugpy==1.8.11 +debugpy==1.8.12 # via ipykernel decorator==5.1.1 # via ipython defusedxml==0.7.1 # via nbconvert -deltalake==0.22.3 +deltalake==0.24.0 # via feast (setup.py) deprecation==2.1.0 # via python-keycloak @@ -176,9 +172,9 @@ docutils==0.19 # via sphinx duckdb==1.1.3 # via ibis-framework -elastic-transport==8.15.1 +elastic-transport==8.17.0 # via elasticsearch -elasticsearch==8.17.0 +elasticsearch==8.17.1 # via feast (setup.py) entrypoints==0.4 # via altair @@ -191,15 +187,15 @@ exceptiongroup==1.2.2 # pytest execnet==2.1.1 # via pytest-xdist -executing==2.1.0 +executing==2.2.0 # via stack-data faiss-cpu==1.9.0.post1 # via feast (setup.py) -fastapi==0.115.6 +fastapi==0.115.7 # via feast (setup.py) fastjsonschema==2.21.1 # via nbformat -filelock==3.16.1 +filelock==3.17.0 # via # snowflake-connector-python # virtualenv @@ -215,7 +211,7 @@ fsspec==2024.9.0 # dask geomet==0.2.1.post1 # via cassandra-driver -google-api-core[grpc]==2.24.0 +google-api-core[grpc]==2.24.1 # via # feast (setup.py) # google-cloud-bigquery @@ -224,7 +220,7 @@ google-api-core[grpc]==2.24.0 # google-cloud-core # google-cloud-datastore # google-cloud-storage -google-auth==2.37.0 +google-auth==2.38.0 # via # google-api-core # google-cloud-bigquery @@ -234,11 +230,11 @@ google-auth==2.37.0 # google-cloud-datastore # google-cloud-storage # kubernetes -google-cloud-bigquery[pandas]==3.27.0 +google-cloud-bigquery[pandas]==3.29.0 # via feast (setup.py) google-cloud-bigquery-storage==2.27.0 # via feast (setup.py) -google-cloud-bigtable==2.27.0 +google-cloud-bigtable==2.28.1 # via feast (setup.py) google-cloud-core==2.4.1 # via @@ -266,9 +262,9 @@ googleapis-common-protos[grpc]==1.66.0 # grpcio-status great-expectations==0.18.22 # via feast (setup.py) -grpc-google-iam-v1==0.13.1 +grpc-google-iam-v1==0.14.0 # via google-cloud-bigtable -grpcio==1.68.1 +grpcio==1.70.0 # via # feast (setup.py) # google-api-core @@ -281,15 +277,15 @@ grpcio==1.68.1 # grpcio-tools # pymilvus # qdrant-client -grpcio-health-checking==1.62.3 +grpcio-health-checking==1.70.0 # via feast (setup.py) -grpcio-reflection==1.62.3 +grpcio-reflection==1.70.0 # via feast (setup.py) -grpcio-status==1.62.3 +grpcio-status==1.70.0 # via google-api-core -grpcio-testing==1.62.3 +grpcio-testing==1.70.0 # via feast (setup.py) -grpcio-tools==1.62.3 +grpcio-tools==1.70.0 # via # feast (setup.py) # qdrant-client @@ -309,7 +305,7 @@ hazelcast-python-client==5.5.0 # via feast (setup.py) hiredis==2.4.0 # via feast (setup.py) -hpack==4.0.0 +hpack==4.1.0 # via h2 httpcore==1.0.7 # via httpx @@ -321,7 +317,7 @@ httpx[http2]==0.27.2 # jupyterlab # python-keycloak # qdrant-client -hyperframe==6.0.1 +hyperframe==6.1.0 # via h2 ibis-framework[duckdb]==9.5.0 # via @@ -329,7 +325,7 @@ ibis-framework[duckdb]==9.5.0 # ibis-substrait ibis-substrait==4.0.1 # via feast (setup.py) -identify==2.6.3 +identify==2.6.6 # via pre-commit idna==3.10 # via @@ -341,7 +337,7 @@ idna==3.10 # yarl imagesize==1.4.1 # via sphinx -importlib-metadata==8.5.0 +importlib-metadata==8.6.1 # via # build # dask @@ -349,7 +345,7 @@ iniconfig==2.0.0 # via pytest ipykernel==6.29.5 # via jupyterlab -ipython==8.30.0 +ipython==8.31.0 # via # great-expectations # ipykernel @@ -375,6 +371,7 @@ jinja2==3.1.5 # sphinx jmespath==1.0.1 # via + # aiobotocore # boto3 # botocore json5==0.10.0 @@ -413,7 +410,7 @@ jupyter-events==0.11.0 # via jupyter-server jupyter-lsp==2.2.5 # via jupyterlab -jupyter-server==2.14.2 +jupyter-server==2.15.0 # via # jupyter-lsp # jupyterlab @@ -438,6 +435,8 @@ kubernetes==20.13.0 # via feast (setup.py) locket==1.0.0 # via partd +lz4==4.4.3 + # via trino makefun==1.15.6 # via great-expectations markdown-it-py==3.0.0 @@ -447,7 +446,7 @@ markupsafe==3.0.2 # jinja2 # nbconvert # werkzeug -marshmallow==3.23.2 +marshmallow==3.26.0 # via # environs # great-expectations @@ -457,15 +456,15 @@ matplotlib-inline==0.1.7 # ipython mdurl==0.1.2 # via markdown-it-py -milvus-lite==2.4.10 +milvus-lite==2.4.11 # via pymilvus minio==7.2.11 # via feast (setup.py) -mistune==3.0.2 +mistune==3.1.0 # via # great-expectations # nbconvert -mmh3==5.0.1 +mmh3==5.1.0 # via feast (setup.py) mock==2.0.0 # via feast (setup.py) @@ -479,6 +478,7 @@ msal-extensions==1.2.0 # via azure-identity multidict==6.1.0 # via + # aiobotocore # aiohttp # yarl mypy==1.11.2 @@ -491,7 +491,7 @@ mypy-protobuf==3.3.0 # via feast (setup.py) nbclient==0.10.2 # via nbconvert -nbconvert==7.16.4 +nbconvert==7.16.5 # via jupyter-server nbformat==5.10.4 # via @@ -503,7 +503,7 @@ nest-asyncio==1.6.0 # via ipykernel nodeenv==1.9.1 # via pre-commit -notebook==7.3.1 +notebook==7.3.2 # via great-expectations notebook-shim==0.2.4 # via @@ -552,7 +552,6 @@ pandas==2.2.3 # feast (setup.py) # altair # dask - # dask-expr # db-dtypes # google-cloud-bigquery # great-expectations @@ -573,7 +572,7 @@ pbr==6.1.0 # via mock pexpect==4.9.0 # via ipython -pip==24.3.1 +pip==25.0 # via pip-tools pip-tools==7.4.1 # via feast (setup.py) @@ -596,19 +595,19 @@ prometheus-client==0.21.1 # via # feast (setup.py) # jupyter-server -prompt-toolkit==3.0.48 +prompt-toolkit==3.0.50 # via ipython propcache==0.2.1 # via # aiohttp # yarl -proto-plus==1.25.0 +proto-plus==1.26.0 # via # google-api-core # google-cloud-bigquery-storage # google-cloud-bigtable # google-cloud-datastore -protobuf==4.25.5 +protobuf==5.29.3 # via # feast (setup.py) # google-api-core @@ -630,9 +629,9 @@ psutil==5.9.0 # via # feast (setup.py) # ipykernel -psycopg[binary, pool]==3.2.3 +psycopg[binary, pool]==3.2.4 # via feast (setup.py) -psycopg-binary==3.2.3 +psycopg-binary==3.2.4 # via psycopg psycopg-pool==3.2.4 # via psycopg @@ -651,7 +650,7 @@ py4j==0.10.9.7 pyarrow==17.0.0 # via # feast (setup.py) - # dask-expr + # dask # db-dtypes # deltalake # google-cloud-bigquery @@ -671,7 +670,7 @@ pycparser==2.22 # via cffi pycryptodome==3.21.0 # via minio -pydantic==2.10.4 +pydantic==2.10.6 # via # feast (setup.py) # fastapi @@ -679,7 +678,7 @@ pydantic==2.10.4 # qdrant-client pydantic-core==2.27.2 # via pydantic -pygments==2.18.0 +pygments==2.19.1 # via # feast (setup.py) # ipython @@ -702,13 +701,13 @@ pyodbc==5.2.0 # via feast (setup.py) pyopenssl==24.3.0 # via snowflake-connector-python -pyparsing==3.2.0 +pyparsing==3.2.1 # via great-expectations pyproject-hooks==1.2.0 # via # build # pip-tools -pyspark==3.5.3 +pyspark==3.5.4 # via feast (setup.py) pytest==7.4.4 # via @@ -742,6 +741,7 @@ pytest-xdist==3.6.1 # via feast (setup.py) python-dateutil==2.9.0.post0 # via + # aiobotocore # arrow # botocore # google-cloud-bigquery @@ -782,11 +782,11 @@ pyzmq==26.2.0 # ipykernel # jupyter-client # jupyter-server -qdrant-client==1.12.1 +qdrant-client==1.13.2 # via feast (setup.py) redis==4.6.0 # via feast (setup.py) -referencing==0.35.1 +referencing==0.36.2 # via # jsonschema # jsonschema-specifications @@ -820,7 +820,7 @@ requests-oauthlib==2.0.0 # via kubernetes requests-toolbelt==1.0.0 # via python-keycloak -responses==0.25.3 +responses==0.25.6 # via moto rfc3339-validator==0.1.4 # via @@ -842,15 +842,15 @@ ruamel-yaml==0.17.40 # via great-expectations ruamel-yaml-clib==0.2.12 # via ruamel-yaml -ruff==0.8.4 +ruff==0.9.3 # via feast (setup.py) -s3transfer==0.10.4 +s3transfer==0.11.2 # via boto3 -scipy==1.14.1 +scipy==1.15.1 # via great-expectations send2trash==1.8.3 # via jupyter-server -setuptools==75.6.0 +setuptools==75.8.0 # via # grpcio-tools # jupyterlab @@ -876,7 +876,7 @@ sniffio==1.3.1 # httpx snowballstemmer==2.2.0 # via sphinx -snowflake-connector-python[pandas]==3.12.4 +snowflake-connector-python[pandas]==3.13.0 # via feast (setup.py) sortedcontainers==2.4.0 # via snowflake-connector-python @@ -896,17 +896,17 @@ sphinxcontrib-qthelp==2.0.0 # via sphinx sphinxcontrib-serializinghtml==2.0.0 # via sphinx -sqlalchemy[mypy]==2.0.36 +sqlalchemy[mypy]==2.0.37 # via feast (setup.py) sqlglot==25.20.2 # via ibis-framework -sqlite-vec==0.1.3 +sqlite-vec==0.1.1 # via feast (setup.py) -sqlparams==6.1.0 +sqlparams==6.2.0 # via singlestoredb stack-data==0.6.3 # via ipython -starlette==0.41.3 +starlette==0.45.3 # via fastapi substrait==0.23.0 # via ibis-substrait @@ -923,7 +923,7 @@ testcontainers==4.8.2 thriftpy2==0.5.2 # via happybase tinycss2==1.4.0 - # via nbconvert + # via bleach toml==0.10.2 # via feast (setup.py) tomli==2.2.1 @@ -972,11 +972,11 @@ traitlets==5.14.3 # nbclient # nbconvert # nbformat -trino==0.331.0 +trino==0.332.0 # via feast (setup.py) typeguard==4.4.1 # via feast (setup.py) -types-cffi==1.16.0.20240331 +types-cffi==1.16.0.20241221 # via types-pyopenssl types-protobuf==3.19.22 # via @@ -990,15 +990,15 @@ types-python-dateutil==2.9.0.20241206 # via # feast (setup.py) # arrow -types-pytz==2024.2.0.20241003 +types-pytz==2024.2.0.20241221 # via feast (setup.py) -types-pyyaml==6.0.12.20240917 +types-pyyaml==6.0.12.20241230 # via feast (setup.py) types-redis==4.6.0.20241004 # via feast (setup.py) types-requests==2.30.0.0 # via feast (setup.py) -types-setuptools==75.6.0.20241126 +types-setuptools==75.8.0.20250110 # via # feast (setup.py) # types-cffi @@ -1019,19 +1019,21 @@ typing-extensions==4.12.2 # ipython # jwcrypto # minio + # mistune # multidict # mypy # psycopg # psycopg-pool # pydantic # pydantic-core + # referencing # rich # snowflake-connector-python # sqlalchemy # testcontainers # typeguard # uvicorn -tzdata==2024.2 +tzdata==2025.1 # via pandas tzlocal==5.2 # via @@ -1041,9 +1043,10 @@ ujson==5.10.0 # via pymilvus uri-template==1.3.0 # via jsonschema -urllib3==2.2.3 +urllib3==2.3.0 # via # feast (setup.py) + # aiobotocore # botocore # docker # elastic-transport @@ -1058,7 +1061,7 @@ uvicorn[standard]==0.34.0 # via # feast (setup.py) # uvicorn-worker -uvicorn-worker==0.2.0 +uvicorn-worker==0.3.0 # via feast (setup.py) uvloop==0.21.0 # via uvicorn @@ -1066,7 +1069,7 @@ virtualenv==20.23.0 # via # feast (setup.py) # pre-commit -watchfiles==1.0.3 +watchfiles==1.0.4 # via uvicorn wcwidth==0.2.13 # via prompt-toolkit @@ -1080,7 +1083,7 @@ websocket-client==1.8.0 # via # jupyter-server # kubernetes -websockets==14.1 +websockets==14.2 # via uvicorn werkzeug==3.1.3 # via moto @@ -1090,7 +1093,7 @@ wheel==0.45.1 # singlestoredb widgetsnbextension==4.0.13 # via ipywidgets -wrapt==1.17.0 +wrapt==1.17.2 # via # aiobotocore # testcontainers @@ -1100,3 +1103,5 @@ yarl==1.18.3 # via aiohttp zipp==3.21.0 # via importlib-metadata +zstandard==0.23.0 + # via trino diff --git a/sdk/python/requirements/py3.10-requirements.txt b/sdk/python/requirements/py3.10-requirements.txt index 2488e12304..7e873fc510 100644 --- a/sdk/python/requirements/py3.10-requirements.txt +++ b/sdk/python/requirements/py3.10-requirements.txt @@ -2,40 +2,36 @@ # uv pip compile -p 3.10 --system --no-strip-extras setup.py --output-file sdk/python/requirements/py3.10-requirements.txt annotated-types==0.7.0 # via pydantic -anyio==4.7.0 +anyio==4.8.0 # via # starlette # watchfiles -attrs==24.3.0 +attrs==25.1.0 # via # jsonschema # referencing -bigtree==0.22.3 +bigtree==0.23.1 # via feast (setup.py) certifi==2024.12.14 # via requests -charset-normalizer==3.4.0 +charset-normalizer==3.4.1 # via requests -click==8.1.7 +click==8.1.8 # via # feast (setup.py) # dask # uvicorn -cloudpickle==3.1.0 +cloudpickle==3.1.1 # via dask colorama==0.4.6 # via feast (setup.py) -dask[dataframe]==2024.12.1 - # via - # feast (setup.py) - # dask-expr -dask-expr==1.1.21 - # via dask +dask[dataframe]==2025.1.0 + # via feast (setup.py) dill==0.3.9 # via feast (setup.py) exceptiongroup==1.2.2 # via anyio -fastapi==0.115.6 +fastapi==0.115.7 # via feast (setup.py) fsspec==2024.12.0 # via dask @@ -51,7 +47,7 @@ idna==3.10 # via # anyio # requests -importlib-metadata==8.5.0 +importlib-metadata==8.6.1 # via dask jinja2==3.1.5 # via feast (setup.py) @@ -63,9 +59,9 @@ locket==1.0.0 # via partd markupsafe==3.0.2 # via jinja2 -mmh3==5.0.1 +mmh3==5.1.0 # via feast (setup.py) -mypy==1.13.0 +mypy==1.14.1 # via sqlalchemy mypy-extensions==1.0.0 # via mypy @@ -82,26 +78,25 @@ pandas==2.2.3 # via # feast (setup.py) # dask - # dask-expr partd==1.4.2 # via dask prometheus-client==0.21.1 # via feast (setup.py) -protobuf==4.25.5 +protobuf==5.29.3 # via feast (setup.py) psutil==6.1.1 # via feast (setup.py) pyarrow==18.0.0 # via # feast (setup.py) - # dask-expr -pydantic==2.10.4 + # dask +pydantic==2.10.6 # via # feast (setup.py) # fastapi pydantic-core==2.27.2 # via pydantic -pygments==2.18.0 +pygments==2.19.1 # via feast (setup.py) pyjwt==2.10.1 # via feast (setup.py) @@ -116,7 +111,7 @@ pyyaml==6.0.2 # feast (setup.py) # dask # uvicorn -referencing==0.35.1 +referencing==0.36.2 # via # jsonschema # jsonschema-specifications @@ -130,9 +125,9 @@ six==1.17.0 # via python-dateutil sniffio==1.3.1 # via anyio -sqlalchemy[mypy]==2.0.36 +sqlalchemy[mypy]==2.0.37 # via feast (setup.py) -starlette==0.41.3 +starlette==0.45.3 # via fastapi tabulate==0.9.0 # via feast (setup.py) @@ -157,24 +152,25 @@ typing-extensions==4.12.2 # mypy # pydantic # pydantic-core + # referencing # sqlalchemy # typeguard # uvicorn -tzdata==2024.2 +tzdata==2025.1 # via pandas -urllib3==2.2.3 +urllib3==2.3.0 # via requests uvicorn[standard]==0.34.0 # via # feast (setup.py) # uvicorn-worker -uvicorn-worker==0.2.0 +uvicorn-worker==0.3.0 # via feast (setup.py) uvloop==0.21.0 # via uvicorn -watchfiles==1.0.3 +watchfiles==1.0.4 # via uvicorn -websockets==14.1 +websockets==14.2 # via uvicorn zipp==3.21.0 # via importlib-metadata diff --git a/sdk/python/requirements/py3.11-ci-requirements.txt b/sdk/python/requirements/py3.11-ci-requirements.txt index 10c31f3095..c8b7d34d7e 100644 --- a/sdk/python/requirements/py3.11-ci-requirements.txt +++ b/sdk/python/requirements/py3.11-ci-requirements.txt @@ -1,6 +1,6 @@ # This file was autogenerated by uv via the following command: # uv pip compile -p 3.11 --system --no-strip-extras setup.py --extra ci --output-file sdk/python/requirements/py3.11-ci-requirements.txt -aiobotocore==2.16.0 +aiobotocore==2.19.0 # via feast (setup.py) aiohappyeyeballs==2.4.4 # via aiohttp @@ -16,7 +16,7 @@ altair==4.2.2 # via great-expectations annotated-types==0.7.0 # via pydantic -anyio==4.7.0 +anyio==4.8.0 # via # httpx # jupyter-server @@ -44,9 +44,9 @@ async-property==0.2.2 # via python-keycloak async-timeout==5.0.1 # via redis -atpublic==5.0 +atpublic==5.1 # via ibis-framework -attrs==24.3.0 +attrs==25.1.0 # via # aiohttp # jsonschema @@ -57,7 +57,7 @@ azure-core==1.32.0 # azure-storage-blob azure-identity==1.19.0 # via feast (setup.py) -azure-storage-blob==12.24.0 +azure-storage-blob==12.24.1 # via feast (setup.py) babel==2.16.0 # via @@ -65,15 +65,15 @@ babel==2.16.0 # sphinx beautifulsoup4==4.12.3 # via nbconvert -bigtree==0.22.3 +bigtree==0.23.1 # via feast (setup.py) -bleach==6.2.0 +bleach[css]==6.2.0 # via nbconvert -boto3==1.35.81 +boto3==1.36.3 # via # feast (setup.py) # moto -botocore==1.35.81 +botocore==1.36.3 # via # aiobotocore # boto3 @@ -84,7 +84,7 @@ build==1.2.2.post1 # feast (setup.py) # pip-tools # singlestoredb -cachetools==5.5.0 +cachetools==5.5.1 # via google-auth cassandra-driver==3.29.2 # via feast (setup.py) @@ -104,11 +104,11 @@ cffi==1.17.1 # snowflake-connector-python cfgv==3.4.0 # via pre-commit -charset-normalizer==3.4.0 +charset-normalizer==3.4.1 # via # requests # snowflake-connector-python -click==8.1.7 +click==8.1.8 # via # feast (setup.py) # dask @@ -116,7 +116,7 @@ click==8.1.7 # great-expectations # pip-tools # uvicorn -cloudpickle==3.1.0 +cloudpickle==3.1.1 # via dask colorama==0.4.6 # via @@ -128,7 +128,7 @@ comm==0.2.2 # ipywidgets couchbase==4.3.2 # via feast (setup.py) -coverage[toml]==7.6.9 +coverage[toml]==7.6.10 # via pytest-cov cryptography==43.0.3 # via @@ -146,21 +146,17 @@ cryptography==43.0.3 # types-redis cython==3.0.11 # via thriftpy2 -dask[dataframe]==2024.12.1 - # via - # feast (setup.py) - # dask-expr -dask-expr==1.1.21 - # via dask -db-dtypes==1.3.1 +dask[dataframe]==2025.1.0 + # via feast (setup.py) +db-dtypes==1.4.0 # via google-cloud-bigquery -debugpy==1.8.11 +debugpy==1.8.12 # via ipykernel decorator==5.1.1 # via ipython defusedxml==0.7.1 # via nbconvert -deltalake==0.22.3 +deltalake==0.24.0 # via feast (setup.py) deprecation==2.1.0 # via python-keycloak @@ -174,9 +170,9 @@ docutils==0.19 # via sphinx duckdb==1.1.3 # via ibis-framework -elastic-transport==8.15.1 +elastic-transport==8.17.0 # via elasticsearch -elasticsearch==8.17.0 +elasticsearch==8.17.1 # via feast (setup.py) entrypoints==0.4 # via altair @@ -184,15 +180,15 @@ environs==9.5.0 # via pymilvus execnet==2.1.1 # via pytest-xdist -executing==2.1.0 +executing==2.2.0 # via stack-data faiss-cpu==1.9.0.post1 # via feast (setup.py) -fastapi==0.115.6 +fastapi==0.115.7 # via feast (setup.py) fastjsonschema==2.21.1 # via nbformat -filelock==3.16.1 +filelock==3.17.0 # via # snowflake-connector-python # virtualenv @@ -208,7 +204,7 @@ fsspec==2024.9.0 # dask geomet==0.2.1.post1 # via cassandra-driver -google-api-core[grpc]==2.24.0 +google-api-core[grpc]==2.24.1 # via # feast (setup.py) # google-cloud-bigquery @@ -217,7 +213,7 @@ google-api-core[grpc]==2.24.0 # google-cloud-core # google-cloud-datastore # google-cloud-storage -google-auth==2.37.0 +google-auth==2.38.0 # via # google-api-core # google-cloud-bigquery @@ -227,11 +223,11 @@ google-auth==2.37.0 # google-cloud-datastore # google-cloud-storage # kubernetes -google-cloud-bigquery[pandas]==3.27.0 +google-cloud-bigquery[pandas]==3.29.0 # via feast (setup.py) google-cloud-bigquery-storage==2.27.0 # via feast (setup.py) -google-cloud-bigtable==2.27.0 +google-cloud-bigtable==2.28.1 # via feast (setup.py) google-cloud-core==2.4.1 # via @@ -259,9 +255,9 @@ googleapis-common-protos[grpc]==1.66.0 # grpcio-status great-expectations==0.18.22 # via feast (setup.py) -grpc-google-iam-v1==0.13.1 +grpc-google-iam-v1==0.14.0 # via google-cloud-bigtable -grpcio==1.68.1 +grpcio==1.70.0 # via # feast (setup.py) # google-api-core @@ -274,15 +270,15 @@ grpcio==1.68.1 # grpcio-tools # pymilvus # qdrant-client -grpcio-health-checking==1.62.3 +grpcio-health-checking==1.70.0 # via feast (setup.py) -grpcio-reflection==1.62.3 +grpcio-reflection==1.70.0 # via feast (setup.py) -grpcio-status==1.62.3 +grpcio-status==1.70.0 # via google-api-core -grpcio-testing==1.62.3 +grpcio-testing==1.70.0 # via feast (setup.py) -grpcio-tools==1.62.3 +grpcio-tools==1.70.0 # via # feast (setup.py) # qdrant-client @@ -302,7 +298,7 @@ hazelcast-python-client==5.5.0 # via feast (setup.py) hiredis==2.4.0 # via feast (setup.py) -hpack==4.0.0 +hpack==4.1.0 # via h2 httpcore==1.0.7 # via httpx @@ -314,7 +310,7 @@ httpx[http2]==0.27.2 # jupyterlab # python-keycloak # qdrant-client -hyperframe==6.0.1 +hyperframe==6.1.0 # via h2 ibis-framework[duckdb]==9.5.0 # via @@ -322,7 +318,7 @@ ibis-framework[duckdb]==9.5.0 # ibis-substrait ibis-substrait==4.0.1 # via feast (setup.py) -identify==2.6.3 +identify==2.6.6 # via pre-commit idna==3.10 # via @@ -334,13 +330,13 @@ idna==3.10 # yarl imagesize==1.4.1 # via sphinx -importlib-metadata==8.5.0 +importlib-metadata==8.6.1 # via dask iniconfig==2.0.0 # via pytest ipykernel==6.29.5 # via jupyterlab -ipython==8.30.0 +ipython==8.31.0 # via # great-expectations # ipykernel @@ -366,6 +362,7 @@ jinja2==3.1.5 # sphinx jmespath==1.0.1 # via + # aiobotocore # boto3 # botocore json5==0.10.0 @@ -404,7 +401,7 @@ jupyter-events==0.11.0 # via jupyter-server jupyter-lsp==2.2.5 # via jupyterlab -jupyter-server==2.14.2 +jupyter-server==2.15.0 # via # jupyter-lsp # jupyterlab @@ -429,6 +426,8 @@ kubernetes==20.13.0 # via feast (setup.py) locket==1.0.0 # via partd +lz4==4.4.3 + # via trino makefun==1.15.6 # via great-expectations markdown-it-py==3.0.0 @@ -438,7 +437,7 @@ markupsafe==3.0.2 # jinja2 # nbconvert # werkzeug -marshmallow==3.23.2 +marshmallow==3.26.0 # via # environs # great-expectations @@ -448,15 +447,15 @@ matplotlib-inline==0.1.7 # ipython mdurl==0.1.2 # via markdown-it-py -milvus-lite==2.4.10 +milvus-lite==2.4.11 # via pymilvus minio==7.2.11 # via feast (setup.py) -mistune==3.0.2 +mistune==3.1.0 # via # great-expectations # nbconvert -mmh3==5.0.1 +mmh3==5.1.0 # via feast (setup.py) mock==2.0.0 # via feast (setup.py) @@ -470,6 +469,7 @@ msal-extensions==1.2.0 # via azure-identity multidict==6.1.0 # via + # aiobotocore # aiohttp # yarl mypy==1.11.2 @@ -482,7 +482,7 @@ mypy-protobuf==3.3.0 # via feast (setup.py) nbclient==0.10.2 # via nbconvert -nbconvert==7.16.4 +nbconvert==7.16.5 # via jupyter-server nbformat==5.10.4 # via @@ -494,7 +494,7 @@ nest-asyncio==1.6.0 # via ipykernel nodeenv==1.9.1 # via pre-commit -notebook==7.3.1 +notebook==7.3.2 # via great-expectations notebook-shim==0.2.4 # via @@ -543,7 +543,6 @@ pandas==2.2.3 # feast (setup.py) # altair # dask - # dask-expr # db-dtypes # google-cloud-bigquery # great-expectations @@ -564,7 +563,7 @@ pbr==6.1.0 # via mock pexpect==4.9.0 # via ipython -pip==24.3.1 +pip==25.0 # via pip-tools pip-tools==7.4.1 # via feast (setup.py) @@ -587,19 +586,19 @@ prometheus-client==0.21.1 # via # feast (setup.py) # jupyter-server -prompt-toolkit==3.0.48 +prompt-toolkit==3.0.50 # via ipython propcache==0.2.1 # via # aiohttp # yarl -proto-plus==1.25.0 +proto-plus==1.26.0 # via # google-api-core # google-cloud-bigquery-storage # google-cloud-bigtable # google-cloud-datastore -protobuf==4.25.5 +protobuf==5.29.3 # via # feast (setup.py) # google-api-core @@ -621,9 +620,9 @@ psutil==5.9.0 # via # feast (setup.py) # ipykernel -psycopg[binary, pool]==3.2.3 +psycopg[binary, pool]==3.2.4 # via feast (setup.py) -psycopg-binary==3.2.3 +psycopg-binary==3.2.4 # via psycopg psycopg-pool==3.2.4 # via psycopg @@ -642,7 +641,7 @@ py4j==0.10.9.7 pyarrow==17.0.0 # via # feast (setup.py) - # dask-expr + # dask # db-dtypes # deltalake # google-cloud-bigquery @@ -662,7 +661,7 @@ pycparser==2.22 # via cffi pycryptodome==3.21.0 # via minio -pydantic==2.10.4 +pydantic==2.10.6 # via # feast (setup.py) # fastapi @@ -670,7 +669,7 @@ pydantic==2.10.4 # qdrant-client pydantic-core==2.27.2 # via pydantic -pygments==2.18.0 +pygments==2.19.1 # via # feast (setup.py) # ipython @@ -693,13 +692,13 @@ pyodbc==5.2.0 # via feast (setup.py) pyopenssl==24.3.0 # via snowflake-connector-python -pyparsing==3.2.0 +pyparsing==3.2.1 # via great-expectations pyproject-hooks==1.2.0 # via # build # pip-tools -pyspark==3.5.3 +pyspark==3.5.4 # via feast (setup.py) pytest==7.4.4 # via @@ -733,6 +732,7 @@ pytest-xdist==3.6.1 # via feast (setup.py) python-dateutil==2.9.0.post0 # via + # aiobotocore # arrow # botocore # google-cloud-bigquery @@ -773,11 +773,11 @@ pyzmq==26.2.0 # ipykernel # jupyter-client # jupyter-server -qdrant-client==1.12.1 +qdrant-client==1.13.2 # via feast (setup.py) redis==4.6.0 # via feast (setup.py) -referencing==0.35.1 +referencing==0.36.2 # via # jsonschema # jsonschema-specifications @@ -811,7 +811,7 @@ requests-oauthlib==2.0.0 # via kubernetes requests-toolbelt==1.0.0 # via python-keycloak -responses==0.25.3 +responses==0.25.6 # via moto rfc3339-validator==0.1.4 # via @@ -833,15 +833,15 @@ ruamel-yaml==0.17.40 # via great-expectations ruamel-yaml-clib==0.2.12 # via ruamel-yaml -ruff==0.8.4 +ruff==0.9.3 # via feast (setup.py) -s3transfer==0.10.4 +s3transfer==0.11.2 # via boto3 -scipy==1.14.1 +scipy==1.15.1 # via great-expectations send2trash==1.8.3 # via jupyter-server -setuptools==75.6.0 +setuptools==75.8.0 # via # grpcio-tools # jupyterlab @@ -867,7 +867,7 @@ sniffio==1.3.1 # httpx snowballstemmer==2.2.0 # via sphinx -snowflake-connector-python[pandas]==3.12.4 +snowflake-connector-python[pandas]==3.13.0 # via feast (setup.py) sortedcontainers==2.4.0 # via snowflake-connector-python @@ -887,17 +887,17 @@ sphinxcontrib-qthelp==2.0.0 # via sphinx sphinxcontrib-serializinghtml==2.0.0 # via sphinx -sqlalchemy[mypy]==2.0.36 +sqlalchemy[mypy]==2.0.37 # via feast (setup.py) sqlglot==25.20.2 # via ibis-framework -sqlite-vec==0.1.3 +sqlite-vec==0.1.1 # via feast (setup.py) -sqlparams==6.1.0 +sqlparams==6.2.0 # via singlestoredb stack-data==0.6.3 # via ipython -starlette==0.41.3 +starlette==0.45.3 # via fastapi substrait==0.23.0 # via ibis-substrait @@ -914,7 +914,7 @@ testcontainers==4.8.2 thriftpy2==0.5.2 # via happybase tinycss2==1.4.0 - # via nbconvert + # via bleach toml==0.10.2 # via feast (setup.py) tomlkit==0.13.2 @@ -953,11 +953,11 @@ traitlets==5.14.3 # nbclient # nbconvert # nbformat -trino==0.331.0 +trino==0.332.0 # via feast (setup.py) typeguard==4.4.1 # via feast (setup.py) -types-cffi==1.16.0.20240331 +types-cffi==1.16.0.20241221 # via types-pyopenssl types-protobuf==3.19.22 # via @@ -971,15 +971,15 @@ types-python-dateutil==2.9.0.20241206 # via # feast (setup.py) # arrow -types-pytz==2024.2.0.20241003 +types-pytz==2024.2.0.20241221 # via feast (setup.py) -types-pyyaml==6.0.12.20240917 +types-pyyaml==6.0.12.20241230 # via feast (setup.py) types-redis==4.6.0.20241004 # via feast (setup.py) types-requests==2.30.0.0 # via feast (setup.py) -types-setuptools==75.6.0.20241126 +types-setuptools==75.8.0.20250110 # via # feast (setup.py) # types-cffi @@ -1004,11 +1004,12 @@ typing-extensions==4.12.2 # psycopg-pool # pydantic # pydantic-core + # referencing # snowflake-connector-python # sqlalchemy # testcontainers # typeguard -tzdata==2024.2 +tzdata==2025.1 # via pandas tzlocal==5.2 # via @@ -1018,9 +1019,10 @@ ujson==5.10.0 # via pymilvus uri-template==1.3.0 # via jsonschema -urllib3==2.2.3 +urllib3==2.3.0 # via # feast (setup.py) + # aiobotocore # botocore # docker # elastic-transport @@ -1035,7 +1037,7 @@ uvicorn[standard]==0.34.0 # via # feast (setup.py) # uvicorn-worker -uvicorn-worker==0.2.0 +uvicorn-worker==0.3.0 # via feast (setup.py) uvloop==0.21.0 # via uvicorn @@ -1043,7 +1045,7 @@ virtualenv==20.23.0 # via # feast (setup.py) # pre-commit -watchfiles==1.0.3 +watchfiles==1.0.4 # via uvicorn wcwidth==0.2.13 # via prompt-toolkit @@ -1057,7 +1059,7 @@ websocket-client==1.8.0 # via # jupyter-server # kubernetes -websockets==14.1 +websockets==14.2 # via uvicorn werkzeug==3.1.3 # via moto @@ -1067,7 +1069,7 @@ wheel==0.45.1 # singlestoredb widgetsnbextension==4.0.13 # via ipywidgets -wrapt==1.17.0 +wrapt==1.17.2 # via # aiobotocore # testcontainers @@ -1077,3 +1079,5 @@ yarl==1.18.3 # via aiohttp zipp==3.21.0 # via importlib-metadata +zstandard==0.23.0 + # via trino diff --git a/sdk/python/requirements/py3.11-requirements.txt b/sdk/python/requirements/py3.11-requirements.txt index 6919925f32..09d29831c6 100644 --- a/sdk/python/requirements/py3.11-requirements.txt +++ b/sdk/python/requirements/py3.11-requirements.txt @@ -2,38 +2,34 @@ # uv pip compile -p 3.11 --system --no-strip-extras setup.py --output-file sdk/python/requirements/py3.11-requirements.txt annotated-types==0.7.0 # via pydantic -anyio==4.7.0 +anyio==4.8.0 # via # starlette # watchfiles -attrs==24.3.0 +attrs==25.1.0 # via # jsonschema # referencing -bigtree==0.22.3 +bigtree==0.23.1 # via feast (setup.py) certifi==2024.12.14 # via requests -charset-normalizer==3.4.0 +charset-normalizer==3.4.1 # via requests -click==8.1.7 +click==8.1.8 # via # feast (setup.py) # dask # uvicorn -cloudpickle==3.1.0 +cloudpickle==3.1.1 # via dask colorama==0.4.6 # via feast (setup.py) -dask[dataframe]==2024.12.1 - # via - # feast (setup.py) - # dask-expr -dask-expr==1.1.21 - # via dask +dask[dataframe]==2025.1.0 + # via feast (setup.py) dill==0.3.9 # via feast (setup.py) -fastapi==0.115.6 +fastapi==0.115.7 # via feast (setup.py) fsspec==2024.12.0 # via dask @@ -49,7 +45,7 @@ idna==3.10 # via # anyio # requests -importlib-metadata==8.5.0 +importlib-metadata==8.6.1 # via dask jinja2==3.1.5 # via feast (setup.py) @@ -61,9 +57,9 @@ locket==1.0.0 # via partd markupsafe==3.0.2 # via jinja2 -mmh3==5.0.1 +mmh3==5.1.0 # via feast (setup.py) -mypy==1.13.0 +mypy==1.14.1 # via sqlalchemy mypy-extensions==1.0.0 # via mypy @@ -80,26 +76,25 @@ pandas==2.2.3 # via # feast (setup.py) # dask - # dask-expr partd==1.4.2 # via dask prometheus-client==0.21.1 # via feast (setup.py) -protobuf==4.25.5 +protobuf==5.29.3 # via feast (setup.py) psutil==6.1.1 # via feast (setup.py) pyarrow==18.0.0 # via # feast (setup.py) - # dask-expr -pydantic==2.10.4 + # dask +pydantic==2.10.6 # via # feast (setup.py) # fastapi pydantic-core==2.27.2 # via pydantic -pygments==2.18.0 +pygments==2.19.1 # via feast (setup.py) pyjwt==2.10.1 # via feast (setup.py) @@ -114,7 +109,7 @@ pyyaml==6.0.2 # feast (setup.py) # dask # uvicorn -referencing==0.35.1 +referencing==0.36.2 # via # jsonschema # jsonschema-specifications @@ -128,9 +123,9 @@ six==1.17.0 # via python-dateutil sniffio==1.3.1 # via anyio -sqlalchemy[mypy]==2.0.36 +sqlalchemy[mypy]==2.0.37 # via feast (setup.py) -starlette==0.41.3 +starlette==0.45.3 # via fastapi tabulate==0.9.0 # via feast (setup.py) @@ -153,23 +148,24 @@ typing-extensions==4.12.2 # mypy # pydantic # pydantic-core + # referencing # sqlalchemy # typeguard -tzdata==2024.2 +tzdata==2025.1 # via pandas -urllib3==2.2.3 +urllib3==2.3.0 # via requests uvicorn[standard]==0.34.0 # via # feast (setup.py) # uvicorn-worker -uvicorn-worker==0.2.0 +uvicorn-worker==0.3.0 # via feast (setup.py) uvloop==0.21.0 # via uvicorn -watchfiles==1.0.3 +watchfiles==1.0.4 # via uvicorn -websockets==14.1 +websockets==14.2 # via uvicorn zipp==3.21.0 # via importlib-metadata diff --git a/sdk/python/requirements/py3.9-ci-requirements.txt b/sdk/python/requirements/py3.9-ci-requirements.txt index b0e00409f1..46984af106 100644 --- a/sdk/python/requirements/py3.9-ci-requirements.txt +++ b/sdk/python/requirements/py3.9-ci-requirements.txt @@ -1,6 +1,6 @@ # This file was autogenerated by uv via the following command: # uv pip compile -p 3.9 --system --no-strip-extras setup.py --extra ci --output-file sdk/python/requirements/py3.9-ci-requirements.txt -aiobotocore==2.16.0 +aiobotocore==2.19.0 # via feast (setup.py) aiohappyeyeballs==2.4.4 # via aiohttp @@ -16,7 +16,7 @@ altair==4.2.2 # via great-expectations annotated-types==0.7.0 # via pydantic -anyio==4.7.0 +anyio==4.8.0 # via # httpx # jupyter-server @@ -48,7 +48,7 @@ async-timeout==5.0.1 # redis atpublic==4.1.0 # via ibis-framework -attrs==24.3.0 +attrs==25.1.0 # via # aiohttp # jsonschema @@ -59,7 +59,7 @@ azure-core==1.32.0 # azure-storage-blob azure-identity==1.19.0 # via feast (setup.py) -azure-storage-blob==12.24.0 +azure-storage-blob==12.24.1 # via feast (setup.py) babel==2.16.0 # via @@ -69,15 +69,15 @@ beautifulsoup4==4.12.3 # via nbconvert bidict==0.23.1 # via ibis-framework -bigtree==0.22.3 +bigtree==0.23.1 # via feast (setup.py) -bleach==6.2.0 +bleach[css]==6.2.0 # via nbconvert -boto3==1.35.81 +boto3==1.36.3 # via # feast (setup.py) # moto -botocore==1.35.81 +botocore==1.36.3 # via # aiobotocore # boto3 @@ -88,7 +88,7 @@ build==1.2.2.post1 # feast (setup.py) # pip-tools # singlestoredb -cachetools==5.5.0 +cachetools==5.5.1 # via google-auth cassandra-driver==3.29.2 # via feast (setup.py) @@ -108,11 +108,11 @@ cffi==1.17.1 # snowflake-connector-python cfgv==3.4.0 # via pre-commit -charset-normalizer==3.4.0 +charset-normalizer==3.4.1 # via # requests # snowflake-connector-python -click==8.1.7 +click==8.1.8 # via # feast (setup.py) # dask @@ -120,7 +120,7 @@ click==8.1.7 # great-expectations # pip-tools # uvicorn -cloudpickle==3.1.0 +cloudpickle==3.1.1 # via dask colorama==0.4.6 # via @@ -132,7 +132,7 @@ comm==0.2.2 # ipywidgets couchbase==4.3.2 # via feast (setup.py) -coverage[toml]==7.6.9 +coverage[toml]==7.6.10 # via pytest-cov cryptography==43.0.3 # via @@ -156,15 +156,15 @@ dask[dataframe]==2024.8.0 # dask-expr dask-expr==1.1.10 # via dask -db-dtypes==1.3.1 +db-dtypes==1.4.0 # via google-cloud-bigquery -debugpy==1.8.11 +debugpy==1.8.12 # via ipykernel decorator==5.1.1 # via ipython defusedxml==0.7.1 # via nbconvert -deltalake==0.22.3 +deltalake==0.24.0 # via feast (setup.py) deprecation==2.1.0 # via python-keycloak @@ -178,9 +178,9 @@ docutils==0.19 # via sphinx duckdb==0.10.3 # via ibis-framework -elastic-transport==8.15.1 +elastic-transport==8.17.0 # via elasticsearch -elasticsearch==8.17.0 +elasticsearch==8.17.1 # via feast (setup.py) entrypoints==0.4 # via altair @@ -193,15 +193,15 @@ exceptiongroup==1.2.2 # pytest execnet==2.1.1 # via pytest-xdist -executing==2.1.0 +executing==2.2.0 # via stack-data faiss-cpu==1.9.0.post1 # via feast (setup.py) -fastapi==0.115.6 +fastapi==0.115.7 # via feast (setup.py) fastjsonschema==2.21.1 # via nbformat -filelock==3.16.1 +filelock==3.17.0 # via # snowflake-connector-python # virtualenv @@ -217,7 +217,7 @@ fsspec==2024.9.0 # dask geomet==0.2.1.post1 # via cassandra-driver -google-api-core[grpc]==2.24.0 +google-api-core[grpc]==2.24.1 # via # feast (setup.py) # google-cloud-bigquery @@ -226,7 +226,7 @@ google-api-core[grpc]==2.24.0 # google-cloud-core # google-cloud-datastore # google-cloud-storage -google-auth==2.37.0 +google-auth==2.38.0 # via # google-api-core # google-cloud-bigquery @@ -236,11 +236,11 @@ google-auth==2.37.0 # google-cloud-datastore # google-cloud-storage # kubernetes -google-cloud-bigquery[pandas]==3.27.0 +google-cloud-bigquery[pandas]==3.29.0 # via feast (setup.py) google-cloud-bigquery-storage==2.27.0 # via feast (setup.py) -google-cloud-bigtable==2.27.0 +google-cloud-bigtable==2.28.1 # via feast (setup.py) google-cloud-core==2.4.1 # via @@ -268,9 +268,9 @@ googleapis-common-protos[grpc]==1.66.0 # grpcio-status great-expectations==0.18.22 # via feast (setup.py) -grpc-google-iam-v1==0.13.1 +grpc-google-iam-v1==0.14.0 # via google-cloud-bigtable -grpcio==1.68.1 +grpcio==1.70.0 # via # feast (setup.py) # google-api-core @@ -283,15 +283,15 @@ grpcio==1.68.1 # grpcio-tools # pymilvus # qdrant-client -grpcio-health-checking==1.62.3 +grpcio-health-checking==1.70.0 # via feast (setup.py) -grpcio-reflection==1.62.3 +grpcio-reflection==1.70.0 # via feast (setup.py) -grpcio-status==1.62.3 +grpcio-status==1.70.0 # via google-api-core -grpcio-testing==1.62.3 +grpcio-testing==1.70.0 # via feast (setup.py) -grpcio-tools==1.62.3 +grpcio-tools==1.70.0 # via # feast (setup.py) # qdrant-client @@ -311,7 +311,7 @@ hazelcast-python-client==5.5.0 # via feast (setup.py) hiredis==2.4.0 # via feast (setup.py) -hpack==4.0.0 +hpack==4.1.0 # via h2 httpcore==1.0.7 # via httpx @@ -323,7 +323,7 @@ httpx[http2]==0.27.2 # jupyterlab # python-keycloak # qdrant-client -hyperframe==6.0.1 +hyperframe==6.1.0 # via h2 ibis-framework[duckdb]==9.0.0 # via @@ -331,7 +331,7 @@ ibis-framework[duckdb]==9.0.0 # ibis-substrait ibis-substrait==4.0.1 # via feast (setup.py) -identify==2.6.3 +identify==2.6.6 # via pre-commit idna==3.10 # via @@ -343,7 +343,7 @@ idna==3.10 # yarl imagesize==1.4.1 # via sphinx -importlib-metadata==8.5.0 +importlib-metadata==8.6.1 # via # build # dask @@ -384,6 +384,7 @@ jinja2==3.1.5 # sphinx jmespath==1.0.1 # via + # aiobotocore # boto3 # botocore json5==0.10.0 @@ -422,7 +423,7 @@ jupyter-events==0.11.0 # via jupyter-server jupyter-lsp==2.2.5 # via jupyterlab -jupyter-server==2.14.2 +jupyter-server==2.15.0 # via # jupyter-lsp # jupyterlab @@ -447,6 +448,8 @@ kubernetes==20.13.0 # via feast (setup.py) locket==1.0.0 # via partd +lz4==4.4.3 + # via trino makefun==1.15.6 # via great-expectations markdown-it-py==3.0.0 @@ -456,7 +459,7 @@ markupsafe==3.0.2 # jinja2 # nbconvert # werkzeug -marshmallow==3.23.2 +marshmallow==3.26.0 # via # environs # great-expectations @@ -466,15 +469,15 @@ matplotlib-inline==0.1.7 # ipython mdurl==0.1.2 # via markdown-it-py -milvus-lite==2.4.10 +milvus-lite==2.4.11 # via pymilvus minio==7.2.11 # via feast (setup.py) -mistune==3.0.2 +mistune==3.1.0 # via # great-expectations # nbconvert -mmh3==5.0.1 +mmh3==5.1.0 # via feast (setup.py) mock==2.0.0 # via feast (setup.py) @@ -488,6 +491,7 @@ msal-extensions==1.2.0 # via azure-identity multidict==6.1.0 # via + # aiobotocore # aiohttp # yarl mypy==1.11.2 @@ -500,7 +504,7 @@ mypy-protobuf==3.3.0 # via feast (setup.py) nbclient==0.10.2 # via nbconvert -nbconvert==7.16.4 +nbconvert==7.16.5 # via jupyter-server nbformat==5.10.4 # via @@ -512,7 +516,7 @@ nest-asyncio==1.6.0 # via ipykernel nodeenv==1.9.1 # via pre-commit -notebook==7.3.1 +notebook==7.3.2 # via great-expectations notebook-shim==0.2.4 # via @@ -581,7 +585,7 @@ pbr==6.1.0 # via mock pexpect==4.9.0 # via ipython -pip==24.3.1 +pip==25.0 # via pip-tools pip-tools==7.4.1 # via feast (setup.py) @@ -604,19 +608,19 @@ prometheus-client==0.21.1 # via # feast (setup.py) # jupyter-server -prompt-toolkit==3.0.48 +prompt-toolkit==3.0.50 # via ipython propcache==0.2.1 # via # aiohttp # yarl -proto-plus==1.25.0 +proto-plus==1.26.0 # via # google-api-core # google-cloud-bigquery-storage # google-cloud-bigtable # google-cloud-datastore -protobuf==4.25.5 +protobuf==5.29.3 # via # feast (setup.py) # google-api-core @@ -638,9 +642,9 @@ psutil==5.9.0 # via # feast (setup.py) # ipykernel -psycopg[binary, pool]==3.1.18 +psycopg[binary, pool]==3.2.4 # via feast (setup.py) -psycopg-binary==3.1.18 +psycopg-binary==3.2.4 # via psycopg psycopg-pool==3.2.4 # via psycopg @@ -679,7 +683,7 @@ pycparser==2.22 # via cffi pycryptodome==3.21.0 # via minio -pydantic==2.10.4 +pydantic==2.10.6 # via # feast (setup.py) # fastapi @@ -687,7 +691,7 @@ pydantic==2.10.4 # qdrant-client pydantic-core==2.27.2 # via pydantic -pygments==2.18.0 +pygments==2.19.1 # via # feast (setup.py) # ipython @@ -710,13 +714,13 @@ pyodbc==5.2.0 # via feast (setup.py) pyopenssl==24.3.0 # via snowflake-connector-python -pyparsing==3.2.0 +pyparsing==3.2.1 # via great-expectations pyproject-hooks==1.2.0 # via # build # pip-tools -pyspark==3.5.3 +pyspark==3.5.4 # via feast (setup.py) pytest==7.4.4 # via @@ -750,6 +754,7 @@ pytest-xdist==3.6.1 # via feast (setup.py) python-dateutil==2.9.0.post0 # via + # aiobotocore # arrow # botocore # google-cloud-bigquery @@ -790,11 +795,11 @@ pyzmq==26.2.0 # ipykernel # jupyter-client # jupyter-server -qdrant-client==1.12.1 +qdrant-client==1.13.2 # via feast (setup.py) redis==4.6.0 # via feast (setup.py) -referencing==0.35.1 +referencing==0.36.2 # via # jsonschema # jsonschema-specifications @@ -828,7 +833,7 @@ requests-oauthlib==2.0.0 # via kubernetes requests-toolbelt==1.0.0 # via python-keycloak -responses==0.25.3 +responses==0.25.6 # via moto rfc3339-validator==0.1.4 # via @@ -850,15 +855,15 @@ ruamel-yaml==0.17.40 # via great-expectations ruamel-yaml-clib==0.2.12 # via ruamel-yaml -ruff==0.8.4 +ruff==0.9.3 # via feast (setup.py) -s3transfer==0.10.4 +s3transfer==0.11.2 # via boto3 scipy==1.13.1 # via great-expectations send2trash==1.8.3 # via jupyter-server -setuptools==75.6.0 +setuptools==75.8.0 # via # grpcio-tools # jupyterlab @@ -884,7 +889,7 @@ sniffio==1.3.1 # httpx snowballstemmer==2.2.0 # via sphinx -snowflake-connector-python[pandas]==3.12.4 +snowflake-connector-python[pandas]==3.13.0 # via feast (setup.py) sortedcontainers==2.4.0 # via snowflake-connector-python @@ -904,17 +909,17 @@ sphinxcontrib-qthelp==2.0.0 # via sphinx sphinxcontrib-serializinghtml==2.0.0 # via sphinx -sqlalchemy[mypy]==2.0.36 +sqlalchemy[mypy]==2.0.37 # via feast (setup.py) sqlglot==23.12.2 # via ibis-framework -sqlite-vec==0.1.3 +sqlite-vec==0.1.1 # via feast (setup.py) -sqlparams==6.1.0 +sqlparams==6.2.0 # via singlestoredb stack-data==0.6.3 # via ipython -starlette==0.41.3 +starlette==0.45.3 # via fastapi substrait==0.23.0 # via ibis-substrait @@ -931,7 +936,7 @@ testcontainers==4.8.2 thriftpy2==0.5.2 # via happybase tinycss2==1.4.0 - # via nbconvert + # via bleach toml==0.10.2 # via feast (setup.py) tomli==2.2.1 @@ -980,11 +985,11 @@ traitlets==5.14.3 # nbclient # nbconvert # nbformat -trino==0.331.0 +trino==0.332.0 # via feast (setup.py) typeguard==4.4.1 # via feast (setup.py) -types-cffi==1.16.0.20240331 +types-cffi==1.16.0.20241221 # via types-pyopenssl types-protobuf==3.19.22 # via @@ -998,15 +1003,15 @@ types-python-dateutil==2.9.0.20241206 # via # feast (setup.py) # arrow -types-pytz==2024.2.0.20241003 +types-pytz==2024.2.0.20241221 # via feast (setup.py) -types-pyyaml==6.0.12.20240917 +types-pyyaml==6.0.12.20241230 # via feast (setup.py) types-redis==4.6.0.20241004 # via feast (setup.py) types-requests==2.30.0.0 # via feast (setup.py) -types-setuptools==75.6.0.20241126 +types-setuptools==75.8.0.20250110 # via # feast (setup.py) # types-cffi @@ -1028,6 +1033,7 @@ typing-extensions==4.12.2 # ipython # jwcrypto # minio + # mistune # multidict # mypy # psycopg @@ -1035,6 +1041,7 @@ typing-extensions==4.12.2 # pydantic # pydantic-core # python-json-logger + # referencing # rich # snowflake-connector-python # sqlalchemy @@ -1042,7 +1049,7 @@ typing-extensions==4.12.2 # testcontainers # typeguard # uvicorn -tzdata==2024.2 +tzdata==2025.1 # via pandas tzlocal==5.2 # via @@ -1055,6 +1062,7 @@ uri-template==1.3.0 urllib3==1.26.20 # via # feast (setup.py) + # aiobotocore # botocore # docker # elastic-transport @@ -1070,7 +1078,7 @@ uvicorn[standard]==0.34.0 # via # feast (setup.py) # uvicorn-worker -uvicorn-worker==0.2.0 +uvicorn-worker==0.3.0 # via feast (setup.py) uvloop==0.21.0 # via uvicorn @@ -1078,7 +1086,7 @@ virtualenv==20.23.0 # via # feast (setup.py) # pre-commit -watchfiles==1.0.3 +watchfiles==1.0.4 # via uvicorn wcwidth==0.2.13 # via prompt-toolkit @@ -1092,7 +1100,7 @@ websocket-client==1.8.0 # via # jupyter-server # kubernetes -websockets==14.1 +websockets==14.2 # via uvicorn werkzeug==3.1.3 # via moto @@ -1102,7 +1110,7 @@ wheel==0.45.1 # singlestoredb widgetsnbextension==4.0.13 # via ipywidgets -wrapt==1.17.0 +wrapt==1.17.2 # via # aiobotocore # testcontainers @@ -1112,3 +1120,5 @@ yarl==1.18.3 # via aiohttp zipp==3.21.0 # via importlib-metadata +zstandard==0.23.0 + # via trino diff --git a/sdk/python/requirements/py3.9-requirements.txt b/sdk/python/requirements/py3.9-requirements.txt index aab78c8cee..bdef2f69c8 100644 --- a/sdk/python/requirements/py3.9-requirements.txt +++ b/sdk/python/requirements/py3.9-requirements.txt @@ -2,26 +2,26 @@ # uv pip compile -p 3.9 --system --no-strip-extras setup.py --output-file sdk/python/requirements/py3.9-requirements.txt annotated-types==0.7.0 # via pydantic -anyio==4.7.0 +anyio==4.8.0 # via # starlette # watchfiles -attrs==24.3.0 +attrs==25.1.0 # via # jsonschema # referencing -bigtree==0.22.3 +bigtree==0.23.1 # via feast (setup.py) certifi==2024.12.14 # via requests -charset-normalizer==3.4.0 +charset-normalizer==3.4.1 # via requests -click==8.1.7 +click==8.1.8 # via # feast (setup.py) # dask # uvicorn -cloudpickle==3.1.0 +cloudpickle==3.1.1 # via dask colorama==0.4.6 # via feast (setup.py) @@ -35,7 +35,7 @@ dill==0.3.9 # via feast (setup.py) exceptiongroup==1.2.2 # via anyio -fastapi==0.115.6 +fastapi==0.115.7 # via feast (setup.py) fsspec==2024.12.0 # via dask @@ -51,7 +51,7 @@ idna==3.10 # via # anyio # requests -importlib-metadata==8.5.0 +importlib-metadata==8.6.1 # via # dask # typeguard @@ -65,9 +65,9 @@ locket==1.0.0 # via partd markupsafe==3.0.2 # via jinja2 -mmh3==5.0.1 +mmh3==5.1.0 # via feast (setup.py) -mypy==1.13.0 +mypy==1.14.1 # via sqlalchemy mypy-extensions==1.0.0 # via mypy @@ -89,7 +89,7 @@ partd==1.4.2 # via dask prometheus-client==0.21.1 # via feast (setup.py) -protobuf==4.25.5 +protobuf==5.29.3 # via feast (setup.py) psutil==6.1.1 # via feast (setup.py) @@ -97,13 +97,13 @@ pyarrow==18.0.0 # via # feast (setup.py) # dask-expr -pydantic==2.10.4 +pydantic==2.10.6 # via # feast (setup.py) # fastapi pydantic-core==2.27.2 # via pydantic -pygments==2.18.0 +pygments==2.19.1 # via feast (setup.py) pyjwt==2.10.1 # via feast (setup.py) @@ -118,7 +118,7 @@ pyyaml==6.0.2 # feast (setup.py) # dask # uvicorn -referencing==0.35.1 +referencing==0.36.2 # via # jsonschema # jsonschema-specifications @@ -132,9 +132,9 @@ six==1.17.0 # via python-dateutil sniffio==1.3.1 # via anyio -sqlalchemy[mypy]==2.0.36 +sqlalchemy[mypy]==2.0.37 # via feast (setup.py) -starlette==0.41.3 +starlette==0.45.3 # via fastapi tabulate==0.9.0 # via feast (setup.py) @@ -159,25 +159,26 @@ typing-extensions==4.12.2 # mypy # pydantic # pydantic-core + # referencing # sqlalchemy # starlette # typeguard # uvicorn -tzdata==2024.2 +tzdata==2025.1 # via pandas -urllib3==2.2.3 +urllib3==2.3.0 # via requests uvicorn[standard]==0.34.0 # via # feast (setup.py) # uvicorn-worker -uvicorn-worker==0.2.0 +uvicorn-worker==0.3.0 # via feast (setup.py) uvloop==0.21.0 # via uvicorn -watchfiles==1.0.3 +watchfiles==1.0.4 # via uvicorn -websockets==14.1 +websockets==14.2 # via uvicorn zipp==3.21.0 # via importlib-metadata From 82db09709a055231c8efbff2482c1b3b0b04338a Mon Sep 17 00:00:00 2001 From: Erin Boehmer Date: Mon, 27 Jan 2025 20:12:16 -0500 Subject: [PATCH 3/3] Lint files Signed-off-by: Erin Boehmer --- sdk/python/feast/errors.py | 2 +- sdk/python/feast/feature_store.py | 9 ++-- .../kubernetes/k8s_materialization_engine.py | 2 +- .../infra/materialization/snowflake_engine.py | 25 ++++----- .../contrib/athena_offline_store/athena.py | 6 +-- .../postgres_offline_store/postgres.py | 4 +- .../contrib/spark_offline_store/spark.py | 2 +- sdk/python/feast/infra/offline_stores/dask.py | 4 +- .../milvus_online_store/milvus.py | 4 +- .../qdrant_online_store/qdrant.py | 6 +-- .../feast/infra/passthrough_provider.py | 12 ++--- sdk/python/feast/infra/utils/aws_utils.py | 2 +- sdk/python/feast/offline_server.py | 54 +++++++++---------- sdk/python/feast/repo_config.py | 8 +-- .../feast/templates/cassandra/bootstrap.py | 2 +- sdk/python/feast/type_map.py | 15 +++--- sdk/python/feast/types.py | 6 +-- .../materialization/test_snowflake.py | 6 +-- .../registration/test_universal_types.py | 10 ++-- .../infra/offline_stores/test_snowflake.py | 6 +-- .../unit/permissions/test_oidc_auth_client.py | 6 +-- ..._operations_validate_feast_project_name.py | 6 +-- .../tests/utils/auth_permissions_util.py | 6 +-- sdk/python/tests/utils/cli_repo_creator.py | 12 ++--- sdk/python/tests/utils/e2e_test_validation.py | 12 ++--- 25 files changed, 114 insertions(+), 113 deletions(-) diff --git a/sdk/python/feast/errors.py b/sdk/python/feast/errors.py index 84a9f12ec4..8c72422f44 100644 --- a/sdk/python/feast/errors.py +++ b/sdk/python/feast/errors.py @@ -32,7 +32,7 @@ def __str__(self) -> str: def __repr__(self) -> str: if hasattr(self, "__overridden_message__"): - return f"{type(self).__name__}('{getattr(self,'__overridden_message__')}')" + return f"{type(self).__name__}('{getattr(self, '__overridden_message__')}')" return super().__repr__() def to_error_detail(self) -> str: diff --git a/sdk/python/feast/feature_store.py b/sdk/python/feast/feature_store.py index 98db710d7f..d0e6f1124c 100644 --- a/sdk/python/feast/feature_store.py +++ b/sdk/python/feast/feature_store.py @@ -865,8 +865,7 @@ def apply( views_to_update = [ ob for ob in objects - if - ( + if ( # BFVs are not handled separately from FVs right now. (isinstance(ob, FeatureView) or isinstance(ob, BatchFeatureView)) and not isinstance(ob, StreamFeatureView) @@ -2031,9 +2030,9 @@ def write_logged_features( if not isinstance(source, FeatureService): raise ValueError("Only feature service is currently supported as a source") - assert ( - source.logging_config is not None - ), "Feature service must be configured with logging config in order to use this functionality" + assert source.logging_config is not None, ( + "Feature service must be configured with logging config in order to use this functionality" + ) assert isinstance(logs, (pa.Table, Path)) diff --git a/sdk/python/feast/infra/materialization/kubernetes/k8s_materialization_engine.py b/sdk/python/feast/infra/materialization/kubernetes/k8s_materialization_engine.py index a0ccbcd768..9606440945 100644 --- a/sdk/python/feast/infra/materialization/kubernetes/k8s_materialization_engine.py +++ b/sdk/python/feast/infra/materialization/kubernetes/k8s_materialization_engine.py @@ -278,7 +278,7 @@ def _print_pod_logs(self, job_id, feature_view, offset=0): label_selector=f"job-name={job_id}", ).items for i, pod in enumerate(pods_list): - logger.info(f"Logging output for {feature_view.name} pod {offset+i}") + logger.info(f"Logging output for {feature_view.name} pod {offset + i}") try: logger.info( self.v1.read_namespaced_pod_log(pod.metadata.name, self.namespace) diff --git a/sdk/python/feast/infra/materialization/snowflake_engine.py b/sdk/python/feast/infra/materialization/snowflake_engine.py index f4be9dd7da..2b18515ae4 100644 --- a/sdk/python/feast/infra/materialization/snowflake_engine.py +++ b/sdk/python/feast/infra/materialization/snowflake_engine.py @@ -206,9 +206,9 @@ def __init__( online_store: OnlineStore, **kwargs, ): - assert ( - repo_config.offline_store.type == "snowflake.offline" - ), "To use SnowflakeMaterializationEngine, you must use Snowflake as an offline store." + assert repo_config.offline_store.type == "snowflake.offline", ( + "To use SnowflakeMaterializationEngine, you must use Snowflake as an offline store." + ) super().__init__( repo_config=repo_config, @@ -241,10 +241,11 @@ def _materialize_one( project: str, tqdm_builder: Callable[[int], tqdm], ): - assert ( - isinstance(feature_view, BatchFeatureView) - or isinstance(feature_view, FeatureView) - ), "Snowflake can only materialize FeatureView & BatchFeatureView feature view types." + assert isinstance(feature_view, BatchFeatureView) or isinstance( + feature_view, FeatureView + ), ( + "Snowflake can only materialize FeatureView & BatchFeatureView feature view types." + ) entities = [] for entity_name in feature_view.entities: @@ -420,7 +421,7 @@ def generate_snowflake_materialization_query( {serial_func.upper()}({entity_names}, {entity_data}, {entity_types}) AS "entity_key", {features_str}, "{feature_view.batch_source.timestamp_field}" - {fv_created_str if fv_created_str else ''} + {fv_created_str if fv_created_str else ""} FROM ( {fv_latest_mapped_values_sql} ) @@ -460,7 +461,7 @@ def materialize_to_snowflake_online_store( "feature_name", "feature_value" AS "value", "{feature_view.batch_source.timestamp_field}" AS "event_ts" - {fv_created_str + ' AS "created_ts"' if fv_created_str else ''} + {fv_created_str + ' AS "created_ts"' if fv_created_str else ""} FROM ( {materialization_sql} ) @@ -472,16 +473,16 @@ def materialize_to_snowflake_online_store( online_table."feature_name" = latest_values."feature_name", online_table."value" = latest_values."value", online_table."event_ts" = latest_values."event_ts" - {',online_table."created_ts" = latest_values."created_ts"' if fv_created_str else ''} + {',online_table."created_ts" = latest_values."created_ts"' if fv_created_str else ""} WHEN NOT MATCHED THEN - INSERT ("entity_feature_key", "entity_key", "feature_name", "value", "event_ts" {', "created_ts"' if fv_created_str else ''}) + INSERT ("entity_feature_key", "entity_key", "feature_name", "value", "event_ts" {', "created_ts"' if fv_created_str else ""}) VALUES ( latest_values."entity_feature_key", latest_values."entity_key", latest_values."feature_name", latest_values."value", latest_values."event_ts" - {',latest_values."created_ts"' if fv_created_str else ''} + {',latest_values."created_ts"' if fv_created_str else ""} ) """ diff --git a/sdk/python/feast/infra/offline_stores/contrib/athena_offline_store/athena.py b/sdk/python/feast/infra/offline_stores/contrib/athena_offline_store/athena.py index ea0d6386cb..f49bfddb81 100644 --- a/sdk/python/feast/infra/offline_stores/contrib/athena_offline_store/athena.py +++ b/sdk/python/feast/infra/offline_stores/contrib/athena_offline_store/athena.py @@ -110,8 +110,8 @@ def pull_latest_from_table_or_query( SELECT {field_string}, ROW_NUMBER() OVER({partition_by_join_key_string} ORDER BY {timestamp_desc_string}) AS _feast_row FROM {from_expression} - WHERE {timestamp_field} BETWEEN TIMESTAMP '{start_date.strftime('%Y-%m-%d %H:%M:%S')}' AND TIMESTAMP '{end_date.strftime('%Y-%m-%d %H:%M:%S')}' - {"AND "+date_partition_column+" >= '"+start_date.strftime('%Y-%m-%d')+"' AND "+date_partition_column+" <= '"+end_date.strftime('%Y-%m-%d')+"' " if date_partition_column != "" and date_partition_column is not None else ''} + WHERE {timestamp_field} BETWEEN TIMESTAMP '{start_date.strftime("%Y-%m-%d %H:%M:%S")}' AND TIMESTAMP '{end_date.strftime("%Y-%m-%d %H:%M:%S")}' + {"AND " + date_partition_column + " >= '" + start_date.strftime("%Y-%m-%d") + "' AND " + date_partition_column + " <= '" + end_date.strftime("%Y-%m-%d") + "' " if date_partition_column != "" and date_partition_column is not None else ""} ) WHERE _feast_row = 1 """ @@ -151,7 +151,7 @@ def pull_all_from_table_or_query( SELECT {field_string} FROM {from_expression} WHERE {timestamp_field} BETWEEN TIMESTAMP '{start_date.astimezone(tz=timezone.utc).strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]}' AND TIMESTAMP '{end_date.astimezone(tz=timezone.utc).strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]}' - {"AND "+date_partition_column+" >= '"+start_date.strftime('%Y-%m-%d')+"' AND "+date_partition_column+" <= '"+end_date.strftime('%Y-%m-%d')+"' " if date_partition_column != "" and date_partition_column is not None else ''} + {"AND " + date_partition_column + " >= '" + start_date.strftime("%Y-%m-%d") + "' AND " + date_partition_column + " <= '" + end_date.strftime("%Y-%m-%d") + "' " if date_partition_column != "" and date_partition_column is not None else ""} """ return AthenaRetrievalJob( diff --git a/sdk/python/feast/infra/offline_stores/contrib/postgres_offline_store/postgres.py b/sdk/python/feast/infra/offline_stores/contrib/postgres_offline_store/postgres.py index 5239cfb474..ec6b713941 100644 --- a/sdk/python/feast/infra/offline_stores/contrib/postgres_offline_store/postgres.py +++ b/sdk/python/feast/infra/offline_stores/contrib/postgres_offline_store/postgres.py @@ -156,7 +156,7 @@ def query_generator() -> Iterator[str]: # Hack for query_context.entity_selections to support uppercase in columns for context in query_context_dict: context["entity_selections"] = [ - f""""{entity_selection.replace(' AS ', '" AS "')}\"""" + f""""{entity_selection.replace(" AS ", '" AS "')}\"""" for entity_selection in context["entity_selections"] ] @@ -370,7 +370,7 @@ def build_point_in_time_query( final_output_feature_names.extend( [ ( - f'{fv["name"]}__{fv["field_mapping"].get(feature, feature)}' + f"{fv['name']}__{fv['field_mapping'].get(feature, feature)}" if full_feature_names else fv["field_mapping"].get(feature, feature) ) diff --git a/sdk/python/feast/infra/offline_stores/contrib/spark_offline_store/spark.py b/sdk/python/feast/infra/offline_stores/contrib/spark_offline_store/spark.py index 4b50188632..41c180f5c3 100644 --- a/sdk/python/feast/infra/offline_stores/contrib/spark_offline_store/spark.py +++ b/sdk/python/feast/infra/offline_stores/contrib/spark_offline_store/spark.py @@ -111,7 +111,7 @@ def pull_latest_from_table_or_query( SELECT {fields_as_string}, ROW_NUMBER() OVER({partition_by_join_key_string} ORDER BY {timestamp_desc_string}) AS feast_row_ FROM {from_expression} t1 - WHERE {timestamp_field} BETWEEN TIMESTAMP('{start_date_str}') AND TIMESTAMP('{end_date_str}'){" AND "+date_partition_column+" >= '"+start_date.strftime('%Y-%m-%d')+"' AND "+date_partition_column+" <= '"+end_date.strftime('%Y-%m-%d')+"' " if date_partition_column != "" and date_partition_column is not None else ''} + WHERE {timestamp_field} BETWEEN TIMESTAMP('{start_date_str}') AND TIMESTAMP('{end_date_str}'){" AND " + date_partition_column + " >= '" + start_date.strftime("%Y-%m-%d") + "' AND " + date_partition_column + " <= '" + end_date.strftime("%Y-%m-%d") + "' " if date_partition_column != "" and date_partition_column is not None else ""} ) t2 WHERE feast_row_ = 1 """ diff --git a/sdk/python/feast/infra/offline_stores/dask.py b/sdk/python/feast/infra/offline_stores/dask.py index d26e8609ba..51a3debb5e 100644 --- a/sdk/python/feast/infra/offline_stores/dask.py +++ b/sdk/python/feast/infra/offline_stores/dask.py @@ -193,9 +193,7 @@ def evaluate_historical_retrieval(): ): # Make sure all event timestamp fields are tz-aware. We default tz-naive fields to UTC entity_df_with_features[entity_df_event_timestamp_col] = ( - entity_df_with_features[ - entity_df_event_timestamp_col - ].apply( + entity_df_with_features[entity_df_event_timestamp_col].apply( lambda x: x if x.tzinfo is not None else x.replace(tzinfo=timezone.utc) diff --git a/sdk/python/feast/infra/online_stores/milvus_online_store/milvus.py b/sdk/python/feast/infra/online_stores/milvus_online_store/milvus.py index 7e840622a8..ff3cf62b3a 100644 --- a/sdk/python/feast/infra/online_stores/milvus_online_store/milvus.py +++ b/sdk/python/feast/infra/online_stores/milvus_online_store/milvus.py @@ -361,7 +361,9 @@ def retrieve_online_documents( assert all( field in [f["name"] for f in collection["fields"]] for field in output_fields - ), f"field(s) [{[field for field in output_fields if field not in [f['name'] for f in collection['fields']]]}] not found in collection schema" + ), ( + f"field(s) [{[field for field in output_fields if field not in [f['name'] for f in collection['fields']]]}] not found in collection schema" + ) # Note we choose the first vector field as the field to search on. Not ideal but it's something. ann_search_field = None for field in collection["fields"]: diff --git a/sdk/python/feast/infra/online_stores/qdrant_online_store/qdrant.py b/sdk/python/feast/infra/online_stores/qdrant_online_store/qdrant.py index cdbef95348..81652c3e2a 100644 --- a/sdk/python/feast/infra/online_stores/qdrant_online_store/qdrant.py +++ b/sdk/python/feast/infra/online_stores/qdrant_online_store/qdrant.py @@ -69,9 +69,9 @@ def _get_client(self, config: RepoConfig) -> QdrantClient: if self._client: return self._client online_store_config = config.online_store - assert isinstance( - online_store_config, QdrantOnlineStoreConfig - ), "Invalid type for online store config" + assert isinstance(online_store_config, QdrantOnlineStoreConfig), ( + "Invalid type for online store config" + ) assert online_store_config.similarity and ( online_store_config.similarity.lower() in DISTANCE_MAPPING diff --git a/sdk/python/feast/infra/passthrough_provider.py b/sdk/python/feast/infra/passthrough_provider.py index 57aa122ae8..6fe4b6e3a0 100644 --- a/sdk/python/feast/infra/passthrough_provider.py +++ b/sdk/python/feast/infra/passthrough_provider.py @@ -473,9 +473,9 @@ def write_feature_service_logs( config: RepoConfig, registry: BaseRegistry, ): - assert ( - feature_service.logging_config is not None - ), "Logging should be configured for the feature service before calling this function" + assert feature_service.logging_config is not None, ( + "Logging should be configured for the feature service before calling this function" + ) self.offline_store.write_logged_features( config=config, @@ -493,9 +493,9 @@ def retrieve_feature_service_logs( config: RepoConfig, registry: BaseRegistry, ) -> RetrievalJob: - assert ( - feature_service.logging_config is not None - ), "Logging should be configured for the feature service before calling this function" + assert feature_service.logging_config is not None, ( + "Logging should be configured for the feature service before calling this function" + ) logging_source = FeatureServiceLoggingSource(feature_service, config.project) schema = logging_source.get_schema(registry) diff --git a/sdk/python/feast/infra/utils/aws_utils.py b/sdk/python/feast/infra/utils/aws_utils.py index 0526cf8b65..39fa815f7e 100644 --- a/sdk/python/feast/infra/utils/aws_utils.py +++ b/sdk/python/feast/infra/utils/aws_utils.py @@ -1062,7 +1062,7 @@ def upload_arrow_table_to_athena( f"CREATE EXTERNAL TABLE {database}.{table_name} {'IF NOT EXISTS' if not fail_if_exists else ''}" f"({column_query_list}) " f"STORED AS PARQUET " - f"LOCATION '{s3_path[:s3_path.rfind('/')]}' " + f"LOCATION '{s3_path[: s3_path.rfind('/')]}' " f"TBLPROPERTIES('parquet.compress' = 'SNAPPY') " ) diff --git a/sdk/python/feast/offline_server.py b/sdk/python/feast/offline_server.py index 1b714a45c7..f3642e5812 100644 --- a/sdk/python/feast/offline_server.py +++ b/sdk/python/feast/offline_server.py @@ -266,15 +266,15 @@ def do_get(self, context: fl.ServerCallContext, ticket: fl.Ticket): return fl.RecordBatchStream(table) def _validate_offline_write_batch_parameters(self, command: dict): - assert ( - "feature_view_names" in command - ), "feature_view_names is a mandatory parameter" + assert "feature_view_names" in command, ( + "feature_view_names is a mandatory parameter" + ) assert "name_aliases" in command, "name_aliases is a mandatory parameter" feature_view_names = command["feature_view_names"] - assert ( - len(feature_view_names) == 1 - ), "feature_view_names list should only have one item" + assert len(feature_view_names) == 1, ( + "feature_view_names list should only have one item" + ) name_aliases = command["name_aliases"] assert len(name_aliases) == 1, "name_aliases list should only have one item" @@ -316,9 +316,9 @@ def write_logged_features(self, command: dict, key: str): command["feature_service_name"] ) - assert ( - feature_service.logging_config is not None - ), "feature service must have logging_config set" + assert feature_service.logging_config is not None, ( + "feature service must have logging_config set" + ) assert_permissions( resource=feature_service, @@ -335,15 +335,15 @@ def write_logged_features(self, command: dict, key: str): ) def _validate_pull_all_from_table_or_query_parameters(self, command: dict): - assert ( - "data_source_name" in command - ), "data_source_name is a mandatory parameter" - assert ( - "join_key_columns" in command - ), "join_key_columns is a mandatory parameter" - assert ( - "feature_name_columns" in command - ), "feature_name_columns is a mandatory parameter" + assert "data_source_name" in command, ( + "data_source_name is a mandatory parameter" + ) + assert "join_key_columns" in command, ( + "join_key_columns is a mandatory parameter" + ) + assert "feature_name_columns" in command, ( + "feature_name_columns is a mandatory parameter" + ) assert "timestamp_field" in command, "timestamp_field is a mandatory parameter" assert "start_date" in command, "start_date is a mandatory parameter" assert "end_date" in command, "end_date is a mandatory parameter" @@ -364,15 +364,15 @@ def pull_all_from_table_or_query(self, command: dict): ) def _validate_pull_latest_from_table_or_query_parameters(self, command: dict): - assert ( - "data_source_name" in command - ), "data_source_name is a mandatory parameter" - assert ( - "join_key_columns" in command - ), "join_key_columns is a mandatory parameter" - assert ( - "feature_name_columns" in command - ), "feature_name_columns is a mandatory parameter" + assert "data_source_name" in command, ( + "data_source_name is a mandatory parameter" + ) + assert "join_key_columns" in command, ( + "join_key_columns is a mandatory parameter" + ) + assert "feature_name_columns" in command, ( + "feature_name_columns is a mandatory parameter" + ) assert "timestamp_field" in command, "timestamp_field is a mandatory parameter" assert "start_date" in command, "start_date is a mandatory parameter" assert "end_date" in command, "end_date is a mandatory parameter" diff --git a/sdk/python/feast/repo_config.py b/sdk/python/feast/repo_config.py index 2b8d5174e1..d943caa4c1 100644 --- a/sdk/python/feast/repo_config.py +++ b/sdk/python/feast/repo_config.py @@ -369,14 +369,14 @@ def _validate_auth_config(cls, values: Any) -> Any: ) elif values["auth"]["type"] not in ALLOWED_AUTH_TYPES: raise ValueError( - f'auth configuration has invalid authentication type={values["auth"]["type"]}. Possible ' - f'values={ALLOWED_AUTH_TYPES}' + f"auth configuration has invalid authentication type={values['auth']['type']}. Possible " + f"values={ALLOWED_AUTH_TYPES}" ) elif isinstance(values["auth"], AuthConfig): if values["auth"].type not in ALLOWED_AUTH_TYPES: raise ValueError( - f'auth configuration has invalid authentication type={values["auth"].type}. Possible ' - f'values={ALLOWED_AUTH_TYPES}' + f"auth configuration has invalid authentication type={values['auth'].type}. Possible " + f"values={ALLOWED_AUTH_TYPES}" ) return values diff --git a/sdk/python/feast/templates/cassandra/bootstrap.py b/sdk/python/feast/templates/cassandra/bootstrap.py index 3338514114..16c8231625 100644 --- a/sdk/python/feast/templates/cassandra/bootstrap.py +++ b/sdk/python/feast/templates/cassandra/bootstrap.py @@ -57,7 +57,7 @@ def collect_cassandra_store_settings(): # it's regular Cassandra c_secure_bundle_path = None hosts_string = click.prompt( - ("Enter the seed hosts of your cluster " "(comma-separated IP addresses)"), + ("Enter the seed hosts of your cluster (comma-separated IP addresses)"), default="127.0.0.1", ) c_hosts = [ diff --git a/sdk/python/feast/type_map.py b/sdk/python/feast/type_map.py index d47a4221f6..ba86198432 100644 --- a/sdk/python/feast/type_map.py +++ b/sdk/python/feast/type_map.py @@ -212,8 +212,7 @@ def python_type_to_feast_value_type( return ValueType[common_item_value_type.name + "_LIST"] raise ValueError( - f"Value with native type {type_name} " - f"cannot be converted into Feast value type" + f"Value with native type {type_name} cannot be converted into Feast value type" ) @@ -459,13 +458,13 @@ def _python_value_to_proto_value( # Numpy convert 0 to int. However, in the feature view definition, the type of column may be a float. # So, if value is 0, type validation must pass if scalar_types are either int or float. allowed_types = {np.int64, int, np.float64, float} - assert ( - type(sample) in allowed_types - ), f"Type `{type(sample)}` not in {allowed_types}" + assert type(sample) in allowed_types, ( + f"Type `{type(sample)}` not in {allowed_types}" + ) else: - assert ( - type(sample) in valid_scalar_types - ), f"Type `{type(sample)}` not in {valid_scalar_types}" + assert type(sample) in valid_scalar_types, ( + f"Type `{type(sample)}` not in {valid_scalar_types}" + ) if feast_value_type == ValueType.BOOL: # ProtoValue does not support conversion of np.bool_ so we need to convert it to support np.bool_. return [ diff --git a/sdk/python/feast/types.py b/sdk/python/feast/types.py index 9fb3207e6d..781317d1a2 100644 --- a/sdk/python/feast/types.py +++ b/sdk/python/feast/types.py @@ -207,9 +207,9 @@ def from_feast_to_pyarrow_type(feast_type: FeastType) -> pyarrow.DataType: Raises: ValueError: The conversion could not be performed. """ - assert isinstance( - feast_type, (ComplexFeastType, PrimitiveFeastType) - ), f"Expected FeastType, got {type(feast_type)}" + assert isinstance(feast_type, (ComplexFeastType, PrimitiveFeastType)), ( + f"Expected FeastType, got {type(feast_type)}" + ) if isinstance(feast_type, PrimitiveFeastType): if feast_type in FEAST_TYPES_TO_PYARROW_TYPES: return FEAST_TYPES_TO_PYARROW_TYPES[feast_type] diff --git a/sdk/python/tests/integration/materialization/test_snowflake.py b/sdk/python/tests/integration/materialization/test_snowflake.py index 5f01641c3b..a783eac038 100644 --- a/sdk/python/tests/integration/materialization/test_snowflake.py +++ b/sdk/python/tests/integration/materialization/test_snowflake.py @@ -178,9 +178,9 @@ def test_snowflake_materialization_consistency_internal_with_lists( assert actual_value is not None, f"Response: {response_dict}" if feature_dtype == "float": for actual_num, expected_num in zip(actual_value, expected_value): - assert ( - abs(actual_num - expected_num) < 1e-6 - ), f"Response: {response_dict}, Expected: {expected_value}" + assert abs(actual_num - expected_num) < 1e-6, ( + f"Response: {response_dict}, Expected: {expected_value}" + ) else: assert actual_value == expected_value diff --git a/sdk/python/tests/integration/registration/test_universal_types.py b/sdk/python/tests/integration/registration/test_universal_types.py index 928d05ad31..9d0b620c08 100644 --- a/sdk/python/tests/integration/registration/test_universal_types.py +++ b/sdk/python/tests/integration/registration/test_universal_types.py @@ -171,9 +171,9 @@ def test_feature_get_online_features_types_match( if config.feature_is_list: for feature in online_features["value"]: assert isinstance(feature, list), "Feature value should be a list" - assert ( - config.has_empty_list or len(feature) > 0 - ), "List of values should not be empty" + assert config.has_empty_list or len(feature) > 0, ( + "List of values should not be empty" + ) for element in feature: assert isinstance(element, expected_dtype) else: @@ -224,7 +224,9 @@ def assert_expected_historical_feature_types( dtype_checkers = feature_dtype_to_expected_historical_feature_dtype[feature_dtype] assert any( check(historical_features_df.dtypes["value"]) for check in dtype_checkers - ), f"Failed to match feature type {historical_features_df.dtypes['value']} with checkers {dtype_checkers}" + ), ( + f"Failed to match feature type {historical_features_df.dtypes['value']} with checkers {dtype_checkers}" + ) def assert_feature_list_types( diff --git a/sdk/python/tests/unit/infra/offline_stores/test_snowflake.py b/sdk/python/tests/unit/infra/offline_stores/test_snowflake.py index 59caaf0b5f..d692d0f957 100644 --- a/sdk/python/tests/unit/infra/offline_stores/test_snowflake.py +++ b/sdk/python/tests/unit/infra/offline_stores/test_snowflake.py @@ -56,9 +56,9 @@ def test_to_remote_storage(retrieval_job): retrieval_job, "_get_file_names_from_copy_into", return_value=stored_files ) as mock_get_file_names_from_copy, ): - assert ( - retrieval_job.to_remote_storage() == stored_files - ), "should return the list of files" + assert retrieval_job.to_remote_storage() == stored_files, ( + "should return the list of files" + ) mock_to_snowflake.assert_called_once() mock_get_file_names_from_copy.assert_called_once_with(ANY, ANY) native_path = mock_get_file_names_from_copy.call_args[0][1] diff --git a/sdk/python/tests/unit/permissions/test_oidc_auth_client.py b/sdk/python/tests/unit/permissions/test_oidc_auth_client.py index 68aec70fc7..3d74eb2a55 100644 --- a/sdk/python/tests/unit/permissions/test_oidc_auth_client.py +++ b/sdk/python/tests/unit/permissions/test_oidc_auth_client.py @@ -58,6 +58,6 @@ def _assert_auth_requests_session( "Authorization header is missing in object of class: " "AuthenticatedRequestsSession " ) - assert ( - auth_req_session.headers["Authorization"] == f"Bearer {expected_token}" - ), "Authorization token is incorrect" + assert auth_req_session.headers["Authorization"] == f"Bearer {expected_token}", ( + "Authorization token is incorrect" + ) diff --git a/sdk/python/tests/unit/test_repo_operations_validate_feast_project_name.py b/sdk/python/tests/unit/test_repo_operations_validate_feast_project_name.py index 0dc4b2651b..33d1d5307d 100644 --- a/sdk/python/tests/unit/test_repo_operations_validate_feast_project_name.py +++ b/sdk/python/tests/unit/test_repo_operations_validate_feast_project_name.py @@ -21,6 +21,6 @@ def test_is_valid_name(): ] for name, expected in test_cases: - assert ( - is_valid_name(name) == expected - ), f"Failed for project invalid name: {name}" + assert is_valid_name(name) == expected, ( + f"Failed for project invalid name: {name}" + ) diff --git a/sdk/python/tests/utils/auth_permissions_util.py b/sdk/python/tests/utils/auth_permissions_util.py index 8a1e7b7c4d..dcc456e1d8 100644 --- a/sdk/python/tests/utils/auth_permissions_util.py +++ b/sdk/python/tests/utils/auth_permissions_util.py @@ -101,9 +101,9 @@ def start_feature_server( timeout_msg="Unable to start the Prometheus server in 60 seconds.", ) else: - assert not check_port_open( - "localhost", 8000 - ), "Prometheus server is running when it should be disabled." + assert not check_port_open("localhost", 8000), ( + "Prometheus server is running when it should be disabled." + ) online_server_url = ( f"https://localhost:{server_port}" diff --git a/sdk/python/tests/utils/cli_repo_creator.py b/sdk/python/tests/utils/cli_repo_creator.py index 8bb696f7d4..46df563eaf 100644 --- a/sdk/python/tests/utils/cli_repo_creator.py +++ b/sdk/python/tests/utils/cli_repo_creator.py @@ -117,9 +117,9 @@ def local_repo( stderr = result.stderr.decode("utf-8") print(f"Apply stdout:\n{stdout}") print(f"Apply stderr:\n{stderr}") - assert ( - result.returncode == 0 - ), f"stdout: {result.stdout}\nstderr: {result.stderr}" + assert result.returncode == 0, ( + f"stdout: {result.stdout}\nstderr: {result.stderr}" + ) yield FeatureStore(repo_path=str(repo_path), config=None) @@ -129,6 +129,6 @@ def local_repo( stderr = result.stderr.decode("utf-8") print(f"Apply stdout:\n{stdout}") print(f"Apply stderr:\n{stderr}") - assert ( - result.returncode == 0 - ), f"stdout: {result.stdout}\nstderr: {result.stderr}" + assert result.returncode == 0, ( + f"stdout: {result.stdout}\nstderr: {result.stderr}" + ) diff --git a/sdk/python/tests/utils/e2e_test_validation.py b/sdk/python/tests/utils/e2e_test_validation.py index a08e8fef42..ed66aead87 100644 --- a/sdk/python/tests/utils/e2e_test_validation.py +++ b/sdk/python/tests/utils/e2e_test_validation.py @@ -131,17 +131,17 @@ def _check_offline_and_online_features( if full_feature_names: if expected_value: assert response_dict[f"{fv.name}__value"][0], f"Response: {response_dict}" - assert ( - abs(response_dict[f"{fv.name}__value"][0] - expected_value) < 1e-6 - ), f"Response: {response_dict}, Expected: {expected_value}" + assert abs(response_dict[f"{fv.name}__value"][0] - expected_value) < 1e-6, ( + f"Response: {response_dict}, Expected: {expected_value}" + ) else: assert response_dict[f"{fv.name}__value"][0] is None else: if expected_value: assert response_dict["value"][0], f"Response: {response_dict}" - assert ( - abs(response_dict["value"][0] - expected_value) < 1e-6 - ), f"Response: {response_dict}, Expected: {expected_value}" + assert abs(response_dict["value"][0] - expected_value) < 1e-6, ( + f"Response: {response_dict}, Expected: {expected_value}" + ) else: assert response_dict["value"][0] is None