diff --git a/.github/fork_workflows/fork_pr_integration_tests_aws.yml b/.github/fork_workflows/fork_pr_integration_tests_aws.yml index 7261833ae6b..4a2dba6c2dc 100644 --- a/.github/fork_workflows/fork_pr_integration_tests_aws.yml +++ b/.github/fork_workflows/fork_pr_integration_tests_aws.yml @@ -33,21 +33,21 @@ jobs: id: image-tag run: echo "::set-output name=DOCKER_IMAGE_TAG::`git rev-parse HEAD`" - name: Cache Public ECR Image - id: lambda_python_3_9 + id: lambda_python_3_11 uses: actions/cache@v2 with: path: ~/cache - key: lambda_python_3_9 + key: lambda_python_3_11 - name: Handle Cache Miss (pull public ECR image & save it to tar file) if: steps.cache-primes.outputs.cache-hit != 'true' run: | mkdir -p ~/cache - docker pull public.ecr.aws/lambda/python:3.9 - docker save public.ecr.aws/lambda/python:3.9 -o ~/cache/lambda_python_3_9.tar + docker pull public.ecr.aws/lambda/python:3.11 + docker save public.ecr.aws/lambda/python:3.11 -o ~/cache/lambda_python_3_11.tar - name: Handle Cache Hit (load docker image from tar file) if: steps.cache-primes.outputs.cache-hit == 'true' run: | - docker load -i ~/cache/lambda_python_3_9.tar + docker load -i ~/cache/lambda_python_3_11.tar - name: Build and push env: ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} @@ -67,7 +67,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [ "3.8" ] + python-version: [ "3.11" ] os: [ ubuntu-latest ] env: OS: ${{ matrix.os }} diff --git a/.github/fork_workflows/fork_pr_integration_tests_gcp.yml b/.github/fork_workflows/fork_pr_integration_tests_gcp.yml index 1a05c068b50..3b448765043 100644 --- a/.github/fork_workflows/fork_pr_integration_tests_gcp.yml +++ b/.github/fork_workflows/fork_pr_integration_tests_gcp.yml @@ -9,7 +9,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [ "3.8" ] + python-version: [ "3.11" ] os: [ ubuntu-latest ] env: OS: ${{ matrix.os }} diff --git a/.github/fork_workflows/fork_pr_integration_tests_snowflake.yml b/.github/fork_workflows/fork_pr_integration_tests_snowflake.yml index 9327f5c7294..d93df465688 100644 --- a/.github/fork_workflows/fork_pr_integration_tests_snowflake.yml +++ b/.github/fork_workflows/fork_pr_integration_tests_snowflake.yml @@ -9,7 +9,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [ "3.8" ] + python-version: [ "3.11" ] os: [ ubuntu-latest ] env: OS: ${{ matrix.os }} diff --git a/.github/workflows/build_wheels.yml b/.github/workflows/build_wheels.yml index 6e6539cf9e4..f45774bd25f 100644 --- a/.github/workflows/build_wheels.yml +++ b/.github/workflows/build_wheels.yml @@ -59,7 +59,7 @@ jobs: - name: Setup Python uses: actions/setup-python@v3 with: - python-version: "3.8" + python-version: "3.11" architecture: x64 - name: Setup Node uses: actions/setup-node@v3 @@ -86,7 +86,7 @@ jobs: id: setup-python uses: actions/setup-python@v3 with: - python-version: "3.10" + python-version: "3.11" architecture: x64 - name: Setup Node uses: actions/setup-node@v3 @@ -137,7 +137,7 @@ jobs: strategy: matrix: os: [ubuntu-latest, macos-latest ] - python-version: [ "3.8", "3.9", "3.10"] + python-version: [ "3.9", "3.10", "3.11"] from-source: [ True, False ] env: # this script is for testing servers diff --git a/.github/workflows/java_master_only.yml b/.github/workflows/java_master_only.yml index d82f69dd3cb..ba74d993672 100644 --- a/.github/workflows/java_master_only.yml +++ b/.github/workflows/java_master_only.yml @@ -25,7 +25,7 @@ jobs: uses: actions/setup-python@v3 id: setup-python with: - python-version: "3.8" + python-version: "3.11" architecture: x64 - name: Authenticate to Google Cloud uses: 'google-github-actions/auth@v1' @@ -95,7 +95,7 @@ jobs: if: github.repository == 'feast-dev/feast' runs-on: ubuntu-latest env: - PYTHON: 3.8 + PYTHON: 3.11 steps: - uses: actions/checkout@v3 with: @@ -110,7 +110,7 @@ jobs: uses: actions/setup-python@v3 id: setup-python with: - python-version: 3.8 + python-version: 3.11 architecture: x64 - name: Get pip cache dir id: pip-cache diff --git a/.github/workflows/java_pr.yml b/.github/workflows/java_pr.yml index d362a6bb540..c243814c202 100644 --- a/.github/workflows/java_pr.yml +++ b/.github/workflows/java_pr.yml @@ -88,7 +88,7 @@ jobs: uses: actions/setup-python@v3 id: setup-python with: - python-version: "3.8" + python-version: "3.11" architecture: x64 - name: Authenticate to Google Cloud uses: 'google-github-actions/auth@v1' @@ -111,7 +111,7 @@ jobs: runs-on: ubuntu-latest needs: unit-test-java env: - PYTHON: 3.8 + PYTHON: 3.11 steps: - uses: actions/checkout@v3 with: @@ -128,7 +128,7 @@ jobs: architecture: x64 - uses: actions/setup-python@v3 with: - python-version: '3.8' + python-version: '3.11' architecture: 'x64' - uses: actions/cache@v2 with: @@ -158,7 +158,7 @@ jobs: uses: actions/setup-python@v3 id: setup-python with: - python-version: 3.8 + python-version: 3.11 architecture: x64 - name: Get pip cache dir id: pip-cache diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index a4a42a11edb..8c1332493c8 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -6,14 +6,14 @@ jobs: lint-python: runs-on: [ubuntu-latest] env: - PYTHON: 3.8 + PYTHON: 3.11 steps: - uses: actions/checkout@v3 - name: Setup Python id: setup-python uses: actions/setup-python@v3 with: - python-version: "3.8" + python-version: "3.11" architecture: x64 - name: Get pip cache dir id: pip-cache diff --git a/.github/workflows/master_only.yml b/.github/workflows/master_only.yml index 580ea3171b3..44ab97bc14f 100644 --- a/.github/workflows/master_only.yml +++ b/.github/workflows/master_only.yml @@ -65,7 +65,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [ "3.8", "3.9", "3.10" ] + python-version: [ "3.9", "3.10", "3.11" ] os: [ ubuntu-latest ] env: OS: ${{ matrix.os }} diff --git a/.github/workflows/nightly-ci.yml b/.github/workflows/nightly-ci.yml index 0e1df81262d..13ba8f2fd93 100644 --- a/.github/workflows/nightly-ci.yml +++ b/.github/workflows/nightly-ci.yml @@ -36,7 +36,7 @@ jobs: uses: actions/setup-python@v3 id: setup-python with: - python-version: "3.8" + python-version: "3.9" architecture: x64 - name: Set up AWS SDK uses: aws-actions/configure-aws-credentials@v1 @@ -124,7 +124,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [ "3.8" ] + python-version: [ "3.11" ] os: [ ubuntu-latest ] env: OS: ${{ matrix.os }} diff --git a/.github/workflows/pr_integration_tests.yml b/.github/workflows/pr_integration_tests.yml index ba4169c2921..3112fe6a850 100644 --- a/.github/workflows/pr_integration_tests.yml +++ b/.github/workflows/pr_integration_tests.yml @@ -47,21 +47,21 @@ jobs: id: image-tag run: echo "::set-output name=DOCKER_IMAGE_TAG::`git rev-parse HEAD`" - name: Cache Public ECR Image - id: lambda_python_3_9 + id: lambda_python_3_11 uses: actions/cache@v2 with: path: ~/cache - key: lambda_python_3_9 + key: lambda_python_3_11 - name: Handle Cache Miss (pull public ECR image & save it to tar file) if: steps.cache-primes.outputs.cache-hit != 'true' run: | mkdir -p ~/cache - docker pull public.ecr.aws/lambda/python:3.9 - docker save public.ecr.aws/lambda/python:3.9 -o ~/cache/lambda_python_3_9.tar + docker pull public.ecr.aws/lambda/python:3.11 + docker save public.ecr.aws/lambda/python:3.11 -o ~/cache/lambda_python_3_11.tar - name: Handle Cache Hit (load docker image from tar file) if: steps.cache-primes.outputs.cache-hit == 'true' run: | - docker load -i ~/cache/lambda_python_3_9.tar + docker load -i ~/cache/lambda_python_3_11.tar - name: Build and push env: ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} @@ -86,7 +86,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [ "3.8", "3.10" ] + python-version: [ "3.9", "3.10", "3.11" ] os: [ ubuntu-latest ] env: OS: ${{ matrix.os }} diff --git a/.github/workflows/pr_local_integration_tests.yml b/.github/workflows/pr_local_integration_tests.yml index 668bcb5e506..d92a6051eea 100644 --- a/.github/workflows/pr_local_integration_tests.yml +++ b/.github/workflows/pr_local_integration_tests.yml @@ -19,7 +19,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [ "3.8", "3.10" ] + python-version: [ "3.9", "3.10", "3.11" ] os: [ ubuntu-latest ] env: OS: ${{ matrix.os }} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 135d1d3a8df..94f72500e90 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -160,7 +160,7 @@ jobs: architecture: x64 - uses: actions/setup-python@v3 with: - python-version: '3.7' + python-version: '3.11' architecture: 'x64' - uses: actions/cache@v2 with: diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml index 7e2e3b577af..9fbf54bb522 100644 --- a/.github/workflows/unit_tests.yml +++ b/.github/workflows/unit_tests.yml @@ -7,7 +7,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [ "3.9", "3.10" ] + python-version: [ "3.9", "3.10", "3.11" ] os: [ ubuntu-latest, macOS-latest ] exclude: - os: macOS-latest diff --git a/edson-setup-environment.md b/edson-setup-environment.md new file mode 100644 index 00000000000..e69de29bb2d diff --git a/sdk/python/feast/infra/materialization/contrib/bytewax/bytewax_materialization_dataflow.py b/sdk/python/feast/infra/materialization/contrib/bytewax/bytewax_materialization_dataflow.py index 6fc53b67f2f..ad2c10aa242 100644 --- a/sdk/python/feast/infra/materialization/contrib/bytewax/bytewax_materialization_dataflow.py +++ b/sdk/python/feast/infra/materialization/contrib/bytewax/bytewax_materialization_dataflow.py @@ -6,8 +6,8 @@ import pyarrow.parquet as pq from bytewax.dataflow import Dataflow # type: ignore from bytewax.execution import cluster_main -from bytewax.inputs import ManualInputConfig -from bytewax.outputs import ManualOutputConfig +from bytewax.inputs import DynamicSource +from bytewax.outputs import DynamicSink from feast import FeatureStore, FeatureView, RepoConfig from feast.utils import _convert_arrow_to_proto, _run_pyarrow_field_mapping @@ -77,7 +77,7 @@ def output_fn(mini_batch): def _run_dataflow(self): flow = Dataflow() - flow.input("inp", ManualInputConfig(self.input_builder)) + flow.input("inp", DynamicSource(self.input_builder)) flow.flat_map(self.process_path) - flow.capture(ManualOutputConfig(self.output_builder)) + flow.output(DynamicSink(self.output_builder)) cluster_main(flow, [], 0) diff --git a/sdk/python/requirements/py3.11-ci-requirements.txt b/sdk/python/requirements/py3.11-ci-requirements.txt new file mode 100644 index 00000000000..11e0581a28f --- /dev/null +++ b/sdk/python/requirements/py3.11-ci-requirements.txt @@ -0,0 +1,1017 @@ +# +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: +# +# pip-compile --extra=ci --output-file=sdk/python/requirements/py3.11-ci-requirements.txt +# +alabaster==0.7.16 + # via sphinx +altair==4.2.2 + # via great-expectations +annotated-types==0.6.0 + # via pydantic +anyio==4.3.0 + # via + # httpx + # jupyter-server + # starlette + # watchfiles +appdirs==1.4.4 + # via fissix +appnope==0.1.4 + # via ipykernel +argon2-cffi==23.1.0 + # via jupyter-server +argon2-cffi-bindings==21.2.0 + # via argon2-cffi +arrow==1.3.0 + # via isoduration +asn1crypto==1.5.1 + # via snowflake-connector-python +assertpy==1.1 + # via feast (setup.py) +asttokens==2.4.1 + # via stack-data +async-lru==2.0.4 + # via jupyterlab +atpublic==4.0 + # via ibis-framework +attrs==23.2.0 + # via + # bowler + # jsonschema + # referencing +avro==1.10.0 + # via feast (setup.py) +azure-core==1.30.1 + # via + # azure-identity + # azure-storage-blob +azure-identity==1.15.0 + # via feast (setup.py) +azure-storage-blob==12.19.0 + # via feast (setup.py) +babel==2.14.0 + # via + # jupyterlab-server + # sphinx +beautifulsoup4==4.12.3 + # via nbconvert +bidict==0.23.1 + # via ibis-framework +black==22.12.0 + # via feast (setup.py) +bleach==6.1.0 + # via nbconvert +boto3==1.34.55 + # via + # feast (setup.py) + # moto +botocore==1.34.55 + # via + # boto3 + # moto + # s3transfer +bowler==0.9.0 + # via feast (setup.py) +build==1.1.1 + # via + # feast (setup.py) + # pip-tools +bytewax==0.18.2 + # via feast (setup.py) +cachecontrol==0.14.0 + # via firebase-admin +cachetools==5.3.3 + # via google-auth +cassandra-driver==3.29.0 + # via feast (setup.py) +certifi==2024.2.2 + # via + # httpcore + # httpx + # kubernetes + # minio + # requests + # snowflake-connector-python +cffi==1.16.0 + # via + # argon2-cffi-bindings + # cryptography + # snowflake-connector-python +cfgv==3.4.0 + # via pre-commit +charset-normalizer==3.3.2 + # via + # requests + # snowflake-connector-python +click==8.1.7 + # via + # black + # bowler + # dask + # feast (setup.py) + # geomet + # great-expectations + # moreorless + # pip-tools + # uvicorn +cloudpickle==3.0.0 + # via dask +colorama==0.4.6 + # via + # feast (setup.py) + # great-expectations +comm==0.2.1 + # via + # ipykernel + # ipywidgets +coverage[toml]==7.4.3 + # via + # coverage + # pytest-cov +cryptography==42.0.5 + # via + # azure-identity + # azure-storage-blob + # feast (setup.py) + # great-expectations + # moto + # msal + # pyjwt + # pyopenssl + # snowflake-connector-python + # types-pyopenssl + # types-redis +dask==2024.2.1 + # via feast (setup.py) +db-dtypes==1.2.0 + # via google-cloud-bigquery +debugpy==1.8.1 + # via ipykernel +decorator==5.1.1 + # via ipython +defusedxml==0.7.1 + # via nbconvert +deprecation==2.1.0 + # via testcontainers +dill==0.3.8 + # via feast (setup.py) +distlib==0.3.8 + # via virtualenv +docker==7.0.0 + # via + # feast (setup.py) + # testcontainers +docutils==0.19 + # via sphinx +entrypoints==0.4 + # via altair +execnet==2.0.2 + # via pytest-xdist +executing==2.0.1 + # via stack-data +fastapi==0.110.0 + # via feast (setup.py) +fastjsonschema==2.19.1 + # via nbformat +filelock==3.13.1 + # via + # snowflake-connector-python + # virtualenv +firebase-admin==5.4.0 + # via feast (setup.py) +fissix==21.11.13 + # via bowler +flake8==6.0.0 + # via feast (setup.py) +fqdn==1.5.1 + # via jsonschema +fsspec==2023.12.2 + # via + # dask + # feast (setup.py) +geojson==2.5.0 + # via rockset +geomet==0.2.1.post1 + # via cassandra-driver +google-api-core[grpc]==2.17.1 + # via + # feast (setup.py) + # firebase-admin + # google-api-python-client + # google-cloud-bigquery + # google-cloud-bigquery-storage + # google-cloud-bigtable + # google-cloud-core + # google-cloud-datastore + # google-cloud-firestore + # google-cloud-storage +google-api-python-client==2.121.0 + # via firebase-admin +google-auth==2.28.1 + # via + # google-api-core + # google-api-python-client + # google-auth-httplib2 + # google-cloud-core + # google-cloud-storage + # kubernetes +google-auth-httplib2==0.2.0 + # via google-api-python-client +google-cloud-bigquery[pandas]==3.12.0 + # via + # feast (setup.py) + # google-cloud-bigquery +google-cloud-bigquery-storage==2.24.0 + # via feast (setup.py) +google-cloud-bigtable==2.23.0 + # via feast (setup.py) +google-cloud-core==2.4.1 + # via + # google-cloud-bigquery + # google-cloud-bigtable + # google-cloud-datastore + # google-cloud-firestore + # google-cloud-storage +google-cloud-datastore==2.19.0 + # via feast (setup.py) +google-cloud-firestore==2.15.0 + # via firebase-admin +google-cloud-storage==2.15.0 + # via + # feast (setup.py) + # firebase-admin +google-crc32c==1.5.0 + # via + # google-cloud-storage + # google-resumable-media +google-resumable-media==2.7.0 + # via + # google-cloud-bigquery + # google-cloud-storage +googleapis-common-protos[grpc]==1.62.0 + # via + # feast (setup.py) + # google-api-core + # grpc-google-iam-v1 + # grpcio-status +great-expectations==0.18.10 + # via feast (setup.py) +greenlet==3.0.3 + # via sqlalchemy +grpc-google-iam-v1==0.13.0 + # via google-cloud-bigtable +grpcio==1.62.0 + # via + # feast (setup.py) + # google-api-core + # google-cloud-bigquery + # googleapis-common-protos + # grpc-google-iam-v1 + # grpcio-health-checking + # grpcio-reflection + # grpcio-status + # grpcio-testing + # grpcio-tools +grpcio-health-checking==1.62.0 + # via feast (setup.py) +grpcio-reflection==1.62.0 + # via feast (setup.py) +grpcio-status==1.62.0 + # via google-api-core +grpcio-testing==1.62.0 + # via feast (setup.py) +grpcio-tools==1.62.0 + # via feast (setup.py) +gunicorn==21.2.0 + # via feast (setup.py) +h11==0.14.0 + # via + # httpcore + # uvicorn +happybase==1.2.0 + # via feast (setup.py) +hazelcast-python-client==5.3.0 + # via feast (setup.py) +hiredis==2.3.2 + # via feast (setup.py) +httpcore==1.0.4 + # via httpx +httplib2==0.22.0 + # via + # google-api-python-client + # google-auth-httplib2 +httptools==0.6.1 + # via uvicorn +httpx==0.27.0 + # via + # feast (setup.py) + # jupyterlab +ibis-framework==8.0.0 + # via + # feast (setup.py) + # ibis-substrait +ibis-substrait==3.2.0 + # via feast (setup.py) +identify==2.5.35 + # via pre-commit +idna==3.6 + # via + # anyio + # httpx + # jsonschema + # requests + # snowflake-connector-python +imagesize==1.4.1 + # via sphinx +importlib-metadata==6.11.0 + # via + # dask + # feast (setup.py) +importlib-resources==6.1.2 + # via feast (setup.py) +iniconfig==2.0.0 + # via pytest +ipykernel==6.29.3 + # via jupyterlab +ipython==8.22.2 + # via + # great-expectations + # ipykernel + # ipywidgets +ipywidgets==8.1.2 + # via great-expectations +isodate==0.6.1 + # via azure-storage-blob +isoduration==20.11.0 + # via jsonschema +isort==5.13.2 + # via feast (setup.py) +jedi==0.19.1 + # via ipython +jinja2==3.1.3 + # via + # altair + # feast (setup.py) + # great-expectations + # jupyter-server + # jupyterlab + # jupyterlab-server + # moto + # nbconvert + # sphinx +jmespath==1.0.1 + # via + # boto3 + # botocore +json5==0.9.20 + # via jupyterlab-server +jsonpatch==1.33 + # via great-expectations +jsonpickle==3.0.3 + # via bytewax +jsonpointer==2.4 + # via + # jsonpatch + # jsonschema +jsonschema[format-nongpl]==4.21.1 + # via + # altair + # feast (setup.py) + # great-expectations + # jupyter-events + # jupyterlab-server + # nbformat +jsonschema-specifications==2023.12.1 + # via jsonschema +jupyter-client==8.6.0 + # via + # ipykernel + # jupyter-server + # nbclient +jupyter-core==5.7.1 + # via + # ipykernel + # jupyter-client + # jupyter-server + # jupyterlab + # nbclient + # nbconvert + # nbformat +jupyter-events==0.9.0 + # via jupyter-server +jupyter-lsp==2.2.4 + # via jupyterlab +jupyter-server==2.13.0 + # via + # jupyter-lsp + # jupyterlab + # jupyterlab-server + # notebook + # notebook-shim +jupyter-server-terminals==0.5.2 + # via jupyter-server +jupyterlab==4.1.3 + # via notebook +jupyterlab-pygments==0.3.0 + # via nbconvert +jupyterlab-server==2.25.3 + # via + # jupyterlab + # notebook +jupyterlab-widgets==3.0.10 + # via ipywidgets +kubernetes==20.13.0 + # via feast (setup.py) +locket==1.0.0 + # via partd +makefun==1.15.2 + # via great-expectations +markdown-it-py==3.0.0 + # via rich +markupsafe==2.1.5 + # via + # jinja2 + # nbconvert + # werkzeug +marshmallow==3.21.1 + # via great-expectations +matplotlib-inline==0.1.6 + # via + # ipykernel + # ipython +mccabe==0.7.0 + # via flake8 +mdurl==0.1.2 + # via markdown-it-py +minio==7.1.0 + # via feast (setup.py) +mistune==3.0.2 + # via + # great-expectations + # nbconvert +mmh3==4.1.0 + # via feast (setup.py) +mock==2.0.0 + # via feast (setup.py) +moreorless==0.4.0 + # via bowler +moto==4.2.14 + # via feast (setup.py) +msal==1.27.0 + # via + # azure-identity + # msal-extensions +msal-extensions==1.1.0 + # via azure-identity +msgpack==1.0.8 + # via cachecontrol +multipledispatch==1.0.0 + # via ibis-framework +mypy==1.8.0 + # via + # feast (setup.py) + # sqlalchemy +mypy-extensions==1.0.0 + # via + # black + # mypy +mypy-protobuf==3.1.0 + # via feast (setup.py) +nbclient==0.9.0 + # via nbconvert +nbconvert==7.16.2 + # via jupyter-server +nbformat==5.9.2 + # via + # great-expectations + # jupyter-server + # nbclient + # nbconvert +nest-asyncio==1.6.0 + # via ipykernel +nodeenv==1.8.0 + # via pre-commit +notebook==7.1.1 + # via great-expectations +notebook-shim==0.2.4 + # via + # jupyterlab + # notebook +numpy==1.24.4 + # via + # altair + # db-dtypes + # feast (setup.py) + # great-expectations + # ibis-framework + # pandas + # pyarrow + # scipy +oauthlib==3.2.2 + # via requests-oauthlib +overrides==7.7.0 + # via jupyter-server +packaging==23.2 + # via + # build + # dask + # db-dtypes + # deprecation + # docker + # google-cloud-bigquery + # great-expectations + # gunicorn + # ibis-substrait + # ipykernel + # jupyter-server + # jupyterlab + # jupyterlab-server + # marshmallow + # msal-extensions + # nbconvert + # pytest + # snowflake-connector-python + # sphinx +pandas==1.5.3 ; python_version <= "3.11" + # via + # altair + # db-dtypes + # feast (setup.py) + # google-cloud-bigquery + # great-expectations + # ibis-framework + # snowflake-connector-python +pandocfilters==1.5.1 + # via nbconvert +parso==0.8.3 + # via jedi +parsy==2.1 + # via ibis-framework +partd==1.4.1 + # via dask +pathspec==0.12.1 + # via black +pbr==6.0.0 + # via mock +pexpect==4.9.0 + # via ipython +pip-tools==7.4.0 + # via feast (setup.py) +platformdirs==3.11.0 + # via + # black + # jupyter-core + # snowflake-connector-python + # virtualenv +pluggy==1.4.0 + # via pytest +ply==3.11 + # via thriftpy2 +portalocker==2.8.2 + # via msal-extensions +pre-commit==3.3.1 + # via feast (setup.py) +prometheus-client==0.20.0 + # via jupyter-server +prompt-toolkit==3.0.43 + # via ipython +proto-plus==1.23.0 + # via + # feast (setup.py) + # google-cloud-bigquery + # google-cloud-bigquery-storage + # google-cloud-bigtable + # google-cloud-datastore + # google-cloud-firestore +protobuf==4.23.4 + # via + # feast (setup.py) + # google-api-core + # google-cloud-bigquery + # google-cloud-bigquery-storage + # google-cloud-bigtable + # google-cloud-datastore + # google-cloud-firestore + # googleapis-common-protos + # grpc-google-iam-v1 + # grpcio-health-checking + # grpcio-reflection + # grpcio-status + # grpcio-testing + # grpcio-tools + # mypy-protobuf + # proto-plus + # substrait +psutil==5.9.0 + # via + # feast (setup.py) + # ipykernel +psycopg2-binary==2.9.9 + # via feast (setup.py) +ptyprocess==0.7.0 + # via + # pexpect + # terminado +pure-eval==0.2.2 + # via stack-data +py==1.11.0 + # via feast (setup.py) +py-cpuinfo==9.0.0 + # via pytest-benchmark +py4j==0.10.9.7 + # via pyspark +pyarrow==15.0.0 + # via + # db-dtypes + # feast (setup.py) + # google-cloud-bigquery + # ibis-framework + # snowflake-connector-python +pyarrow-hotfix==0.6 + # via ibis-framework +pyasn1==0.5.1 + # via + # pyasn1-modules + # rsa +pyasn1-modules==0.3.0 + # via google-auth +pybindgen==0.22.1 + # via feast (setup.py) +pycodestyle==2.10.0 + # via flake8 +pycparser==2.21 + # via cffi +pydantic==2.6.3 + # via + # fastapi + # feast (setup.py) + # great-expectations +pydantic-core==2.16.3 + # via pydantic +pyflakes==3.0.1 + # via flake8 +pygments==2.17.2 + # via + # feast (setup.py) + # ipython + # nbconvert + # rich + # sphinx +pyjwt[crypto]==2.8.0 + # via + # msal + # snowflake-connector-python +pymssql==2.2.11 + # via feast (setup.py) +pymysql==1.1.0 + # via feast (setup.py) +pyodbc==5.1.0 + # via feast (setup.py) +pyopenssl==24.0.0 + # via snowflake-connector-python +pyparsing==3.1.1 + # via + # great-expectations + # httplib2 +pyproject-hooks==1.0.0 + # via + # build + # pip-tools +pyspark==3.5.1 + # via feast (setup.py) +pytest==7.4.4 + # via + # feast (setup.py) + # pytest-benchmark + # pytest-cov + # pytest-lazy-fixture + # pytest-mock + # pytest-ordering + # pytest-timeout + # pytest-xdist +pytest-benchmark==3.4.1 + # via feast (setup.py) +pytest-cov==4.1.0 + # via feast (setup.py) +pytest-lazy-fixture==0.6.3 + # via feast (setup.py) +pytest-mock==1.10.4 + # via feast (setup.py) +pytest-ordering==0.6 + # via feast (setup.py) +pytest-timeout==1.4.2 + # via feast (setup.py) +pytest-xdist==3.5.0 + # via feast (setup.py) +python-dateutil==2.9.0.post0 + # via + # arrow + # botocore + # google-cloud-bigquery + # great-expectations + # ibis-framework + # jupyter-client + # kubernetes + # moto + # pandas + # rockset + # trino +python-dotenv==1.0.1 + # via uvicorn +python-json-logger==2.0.7 + # via jupyter-events +pytz==2024.1 + # via + # great-expectations + # ibis-framework + # pandas + # snowflake-connector-python + # trino +pyyaml==6.0.1 + # via + # dask + # feast (setup.py) + # ibis-substrait + # jupyter-events + # kubernetes + # pre-commit + # responses + # uvicorn +pyzmq==25.1.2 + # via + # ipykernel + # jupyter-client + # jupyter-server +redis==4.6.0 + # via feast (setup.py) +referencing==0.33.0 + # via + # jsonschema + # jsonschema-specifications + # jupyter-events +regex==2023.12.25 + # via feast (setup.py) +requests==2.31.0 + # via + # azure-core + # cachecontrol + # docker + # feast (setup.py) + # google-api-core + # google-cloud-bigquery + # google-cloud-storage + # great-expectations + # jupyterlab-server + # kubernetes + # moto + # msal + # requests-oauthlib + # responses + # snowflake-connector-python + # sphinx + # trino +requests-oauthlib==1.3.1 + # via kubernetes +responses==0.25.0 + # via moto +rfc3339-validator==0.1.4 + # via + # jsonschema + # jupyter-events +rfc3986-validator==0.1.1 + # via + # jsonschema + # jupyter-events +rich==13.7.1 + # via ibis-framework +rockset==2.1.1 + # via feast (setup.py) +rpds-py==0.18.0 + # via + # jsonschema + # referencing +rsa==4.9 + # via google-auth +ruamel-yaml==0.17.17 + # via great-expectations +s3transfer==0.10.0 + # via boto3 +scipy==1.12.0 + # via great-expectations +send2trash==1.8.2 + # via jupyter-server +six==1.16.0 + # via + # asttokens + # azure-core + # bleach + # geomet + # happybase + # isodate + # kubernetes + # mock + # python-dateutil + # rfc3339-validator + # thriftpy2 +sniffio==1.3.1 + # via + # anyio + # httpx +snowballstemmer==2.2.0 + # via sphinx +snowflake-connector-python[pandas]==3.7.1 + # via + # feast (setup.py) + # snowflake-connector-python +sortedcontainers==2.4.0 + # via snowflake-connector-python +soupsieve==2.5 + # via beautifulsoup4 +sphinx==6.2.1 + # via feast (setup.py) +sphinxcontrib-applehelp==1.0.8 + # via sphinx +sphinxcontrib-devhelp==1.0.6 + # via sphinx +sphinxcontrib-htmlhelp==2.0.5 + # via sphinx +sphinxcontrib-jsmath==1.0.1 + # via sphinx +sphinxcontrib-qthelp==1.0.7 + # via sphinx +sphinxcontrib-serializinghtml==1.1.10 + # via sphinx +sqlalchemy[mypy]==1.4.52 + # via + # feast (setup.py) + # sqlalchemy +sqlalchemy2-stubs==0.0.2a38 + # via sqlalchemy +sqlglot==20.11.0 + # via ibis-framework +stack-data==0.6.3 + # via ipython +starlette==0.36.3 + # via fastapi +substrait==0.13.0 + # via ibis-substrait +tabulate==0.9.0 + # via feast (setup.py) +tenacity==8.2.3 + # via feast (setup.py) +terminado==0.18.0 + # via + # jupyter-server + # jupyter-server-terminals +testcontainers==3.7.1 + # via feast (setup.py) +thriftpy2==0.4.20 + # via happybase +tinycss2==1.2.1 + # via nbconvert +toml==0.10.2 + # via feast (setup.py) +tomlkit==0.12.4 + # via snowflake-connector-python +toolz==0.12.1 + # via + # altair + # dask + # ibis-framework + # partd +tornado==6.4 + # via + # ipykernel + # jupyter-client + # jupyter-server + # jupyterlab + # notebook + # terminado +tqdm==4.66.2 + # via + # feast (setup.py) + # great-expectations +traitlets==5.14.1 + # via + # comm + # ipykernel + # ipython + # ipywidgets + # jupyter-client + # jupyter-core + # jupyter-events + # jupyter-server + # jupyterlab + # matplotlib-inline + # nbclient + # nbconvert + # nbformat +trino==0.328.0 + # via feast (setup.py) +typeguard==4.1.5 + # via feast (setup.py) +types-protobuf==3.19.22 + # via + # feast (setup.py) + # mypy-protobuf +types-pymysql==1.1.0.1 + # via feast (setup.py) +types-pyopenssl==24.0.0.20240228 + # via types-redis +types-python-dateutil==2.8.19.20240106 + # via + # arrow + # feast (setup.py) +types-pytz==2024.1.0.20240203 + # via feast (setup.py) +types-pyyaml==6.0.12.12 + # via feast (setup.py) +types-redis==4.6.0.20240218 + # via feast (setup.py) +types-requests==2.30.0.0 + # via feast (setup.py) +types-setuptools==69.1.0.20240302 + # via feast (setup.py) +types-tabulate==0.9.0.20240106 + # via feast (setup.py) +types-urllib3==1.26.25.14 + # via types-requests +typing-extensions==4.10.0 + # via + # azure-core + # azure-storage-blob + # bytewax + # fastapi + # great-expectations + # ibis-framework + # mypy + # pydantic + # pydantic-core + # snowflake-connector-python + # sqlalchemy2-stubs + # typeguard +tzlocal==5.2 + # via + # great-expectations + # trino +uri-template==1.3.0 + # via jsonschema +uritemplate==4.1.1 + # via google-api-python-client +urllib3==1.26.18 + # via + # botocore + # docker + # feast (setup.py) + # great-expectations + # kubernetes + # minio + # requests + # responses + # rockset +uvicorn[standard]==0.27.1 + # via + # feast (setup.py) + # uvicorn +uvloop==0.19.0 + # via uvicorn +virtualenv==20.23.0 + # via + # feast (setup.py) + # pre-commit +volatile==2.1.0 + # via bowler +watchfiles==0.21.0 + # via uvicorn +wcwidth==0.2.13 + # via prompt-toolkit +webcolors==1.13 + # via jsonschema +webencodings==0.5.1 + # via + # bleach + # tinycss2 +websocket-client==1.7.0 + # via + # jupyter-server + # kubernetes +websockets==12.0 + # via uvicorn +werkzeug==3.0.1 + # via moto +wheel==0.42.0 + # via pip-tools +widgetsnbextension==4.0.10 + # via ipywidgets +wrapt==1.16.0 + # via testcontainers +xmltodict==0.13.0 + # via moto +zipp==3.17.0 + # via importlib-metadata + +# The following packages are considered to be unsafe in a requirements file: +# pip +# setuptools diff --git a/sdk/python/requirements/py3.11-requirements.txt b/sdk/python/requirements/py3.11-requirements.txt new file mode 100644 index 00000000000..b4091b71291 --- /dev/null +++ b/sdk/python/requirements/py3.11-requirements.txt @@ -0,0 +1,220 @@ +# +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: +# +# pip-compile --output-file=sdk/python/requirements/py3.11-requirements.txt +# +annotated-types==0.6.0 + # via pydantic +anyio==4.3.0 + # via + # httpx + # starlette + # watchfiles +appdirs==1.4.4 + # via fissix +attrs==23.2.0 + # via + # bowler + # jsonschema + # referencing +bowler==0.9.0 + # via feast (setup.py) +certifi==2024.2.2 + # via + # httpcore + # httpx + # requests +charset-normalizer==3.3.2 + # via requests +click==8.1.7 + # via + # bowler + # dask + # feast (setup.py) + # moreorless + # uvicorn +cloudpickle==3.0.0 + # via dask +colorama==0.4.6 + # via feast (setup.py) +dask==2024.2.1 + # via feast (setup.py) +dill==0.3.8 + # via feast (setup.py) +fastapi==0.110.0 + # via feast (setup.py) +fissix==21.11.13 + # via bowler +fsspec==2024.2.0 + # via dask +greenlet==3.0.3 + # via sqlalchemy +grpcio==1.62.0 + # via + # feast (setup.py) + # grpcio-health-checking + # grpcio-reflection + # grpcio-tools +grpcio-health-checking==1.62.0 + # via feast (setup.py) +grpcio-reflection==1.62.0 + # via feast (setup.py) +grpcio-tools==1.62.0 + # via feast (setup.py) +gunicorn==21.2.0 + # via feast (setup.py) +h11==0.14.0 + # via + # httpcore + # uvicorn +httpcore==1.0.4 + # via httpx +httptools==0.6.1 + # via uvicorn +httpx==0.27.0 + # via feast (setup.py) +idna==3.6 + # via + # anyio + # httpx + # requests +importlib-metadata==6.11.0 + # via + # dask + # feast (setup.py) +importlib-resources==6.1.2 + # via feast (setup.py) +jinja2==3.1.3 + # via feast (setup.py) +jsonschema==4.21.1 + # via feast (setup.py) +jsonschema-specifications==2023.12.1 + # via jsonschema +locket==1.0.0 + # via partd +markupsafe==2.1.5 + # via jinja2 +mmh3==4.1.0 + # via feast (setup.py) +moreorless==0.4.0 + # via bowler +mypy==1.8.0 + # via sqlalchemy +mypy-extensions==1.0.0 + # via mypy +mypy-protobuf==3.1.0 + # via feast (setup.py) +numpy==1.24.4 + # via + # feast (setup.py) + # pandas + # pyarrow +packaging==23.2 + # via + # dask + # gunicorn +pandas==2.2.1 + # via feast (setup.py) +partd==1.4.1 + # via dask +proto-plus==1.23.0 + # via feast (setup.py) +protobuf==4.23.4 + # via + # feast (setup.py) + # grpcio-health-checking + # grpcio-reflection + # grpcio-tools + # mypy-protobuf + # proto-plus +pyarrow==15.0.0 + # via feast (setup.py) +pydantic==2.6.3 + # via + # fastapi + # feast (setup.py) +pydantic-core==2.16.3 + # via pydantic +pygments==2.17.2 + # via feast (setup.py) +python-dateutil==2.9.0.post0 + # via pandas +python-dotenv==1.0.1 + # via uvicorn +pytz==2024.1 + # via pandas +pyyaml==6.0.1 + # via + # dask + # feast (setup.py) + # uvicorn +referencing==0.33.0 + # via + # jsonschema + # jsonschema-specifications +requests==2.31.0 + # via feast (setup.py) +rpds-py==0.18.0 + # via + # jsonschema + # referencing +six==1.16.0 + # via python-dateutil +sniffio==1.3.1 + # via + # anyio + # httpx +sqlalchemy[mypy]==1.4.52 + # via + # feast (setup.py) + # sqlalchemy +sqlalchemy2-stubs==0.0.2a38 + # via sqlalchemy +starlette==0.36.3 + # via fastapi +tabulate==0.9.0 + # via feast (setup.py) +tenacity==8.2.3 + # via feast (setup.py) +toml==0.10.2 + # via feast (setup.py) +toolz==0.12.1 + # via + # dask + # partd +tqdm==4.66.2 + # via feast (setup.py) +typeguard==4.1.5 + # via feast (setup.py) +types-protobuf==4.24.0.20240302 + # via mypy-protobuf +typing-extensions==4.10.0 + # via + # fastapi + # mypy + # pydantic + # pydantic-core + # sqlalchemy2-stubs + # typeguard +tzdata==2024.1 + # via pandas +urllib3==2.2.1 + # via requests +uvicorn[standard]==0.27.1 + # via + # feast (setup.py) + # uvicorn +uvloop==0.19.0 + # via uvicorn +volatile==2.1.0 + # via bowler +watchfiles==0.21.0 + # via uvicorn +websockets==12.0 + # via uvicorn +zipp==3.17.0 + # via importlib-metadata + +# The following packages are considered to be unsafe in a requirements file: +# setuptools diff --git a/setup.py b/setup.py index b601c901462..f49afd87113 100644 --- a/setup.py +++ b/setup.py @@ -38,7 +38,7 @@ DESCRIPTION = "Python SDK for Feast" URL = "https://github.com/feast-dev/feast" AUTHOR = "Feast" -REQUIRES_PYTHON = ">=3.8.0" +REQUIRES_PYTHON = ">=3.9.0" REQUIRED = [ "click>=7.0.0,<9.0.0", @@ -51,7 +51,7 @@ "numpy>=1.22,<1.25", "pandas>=1.4.3,<3", # Higher than 4.23.4 seems to cause a seg fault - "protobuf<4.23.4,>3.20", + "protobuf<=4.23.4,>3.20", "proto-plus>=1.20.0,<2", "pyarrow>=4", "pydantic>=2.0.0", @@ -93,7 +93,7 @@ AWS_REQUIRED = ["boto3>=1.17.0,<2", "docker>=5.0.2", "fsspec<=2024.1.0"] -BYTEWAX_REQUIRED = ["bytewax==0.15.1", "docker>=5.0.2", "kubernetes<=20.13.0"] +BYTEWAX_REQUIRED = ["bytewax==0.18.2", "docker>=5.0.2", "kubernetes<=20.13.0"] SNOWFLAKE_REQUIRED = [ "snowflake-connector-python[pandas]>=3,<4", @@ -194,7 +194,7 @@ "types-setuptools", "types-tabulate", "virtualenv<20.24.2", - "pandas>=1.4.3,<2; python_version < '3.9'", + "pandas>=1.4.3,<2", ] + GCP_REQUIRED + REDIS_REQUIRED @@ -392,7 +392,7 @@ def run(self): "License :: OSI Approved :: Apache Software License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.9", ], entry_points={"console_scripts": ["feast=feast.cli:cli"]}, use_scm_version=use_scm_version,