From c24f49dc2fb82a1d77d463f3455d17a1b5a27c7b Mon Sep 17 00:00:00 2001 From: lokeshrangineni Date: Tue, 30 Apr 2024 15:16:10 -0400 Subject: [PATCH] feat: Upgrading python version to 3.11, adding support for 3.11 as well. (#4159) * Upgrading python version to 3.11, adding support for 3.11 as well. Signed-off-by: Lokesh Rangineni * Upgrading python version to 3.11, adding support for 3.11 as well. Signed-off-by: Lokesh Rangineni * chore: Bump macOS runners to macos-13 (#4152) bump macos runner to 13 Signed-off-by: tokoko Signed-off-by: Lokesh Rangineni * chore: Use pixi to lock python dependencies in a single command (#4114) use pixi to lock python dependencies in a single command Signed-off-by: tokoko Signed-off-by: Lokesh Rangineni * Trying to fix the lint error after python upgrade. - error: Call to abstract method "__init__" of "Provider" with trivial body via super() is unsafe [safe-super] Signed-off-by: Lokesh Rangineni * Adding only the integration tests to run on 3.11 Signed-off-by: Lokesh Rangineni --------- Signed-off-by: Lokesh Rangineni Co-authored-by: Tornike Gurgenidze Signed-off-by: Theodor Mihalache --- .../fork_pr_integration_tests_aws.yml | 12 +- .../fork_pr_integration_tests_gcp.yml | 2 +- .../fork_pr_integration_tests_snowflake.yml | 2 +- .github/workflows/build_wheels.yml | 6 +- .github/workflows/java_master_only.yml | 6 +- .github/workflows/java_pr.yml | 8 +- .github/workflows/linter.yml | 4 +- .github/workflows/master_only.yml | 12 +- .github/workflows/nightly-ci.yml | 18 +- .github/workflows/pr_integration_tests.yml | 12 +- .../workflows/pr_local_integration_tests.yml | 2 +- .github/workflows/publish.yml | 2 +- .github/workflows/unit_tests.yml | 2 +- Makefile | 2 +- docs/SUMMARY.md | 3 +- .../running-feast-in-production.md | 21 +- .../batch-materialization/bytewax.md | 99 -- .../docker-compose/feast10/Dockerfile | 2 +- .../feature_servers/gcp_cloudrun/Dockerfile | 2 +- .../feature_servers/multicloud/Dockerfile | 2 +- .../feature_servers/multicloud/Dockerfile.dev | 2 +- .../materialization/kubernetes/Dockerfile | 2 +- .../feast/infra/passthrough_provider.py | 2 - .../infra/transformation_servers/Dockerfile | 2 +- .../requirements/py3.11-ci-requirements.txt | 1047 +++++++++++++++++ .../requirements/py3.11-requirements.txt | 197 ++++ setup.py | 2 +- 27 files changed, 1298 insertions(+), 175 deletions(-) delete mode 100644 docs/reference/batch-materialization/bytewax.md create mode 100644 sdk/python/requirements/py3.11-ci-requirements.txt create mode 100644 sdk/python/requirements/py3.11-requirements.txt diff --git a/.github/fork_workflows/fork_pr_integration_tests_aws.yml b/.github/fork_workflows/fork_pr_integration_tests_aws.yml index 4e418e6b22e..4d6583abcf9 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.9" ] + 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 a6fc2110c55..29a053a119f 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.9" ] + 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 ee0e256eca6..736b066abee 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.9" ] + 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 59d274c4941..4c7caa6929c 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.9" + 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-13 ] - python-version: ["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 cb58b240fb2..d7f8cddfb61 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.9" + 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.9 + PYTHON: 3.11 steps: - uses: actions/checkout@v4 with: @@ -110,7 +110,7 @@ jobs: uses: actions/setup-python@v3 id: setup-python with: - python-version: 3.9 + 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 8c7a03d2e50..5e94e0ace9f 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.9" + 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.9 + PYTHON: 3.11 steps: - uses: actions/checkout@v4 with: @@ -128,7 +128,7 @@ jobs: architecture: x64 - uses: actions/setup-python@v3 with: - python-version: '3.9' + 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.9 + 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 2968a9d6e0d..d2ee734d685 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.9 + PYTHON: 3.11 steps: - uses: actions/checkout@v4 - name: Setup Python id: setup-python uses: actions/setup-python@v5 with: - python-version: "3.9" + python-version: "3.11" architecture: x64 - name: Upgrade pip version run: | diff --git a/.github/workflows/master_only.yml b/.github/workflows/master_only.yml index dd666d5588c..02bd46ab482 100644 --- a/.github/workflows/master_only.yml +++ b/.github/workflows/master_only.yml @@ -30,21 +30,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 }} @@ -65,7 +65,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["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 9afea5cb6f1..89e4f1f0b90 100644 --- a/.github/workflows/nightly-ci.yml +++ b/.github/workflows/nightly-ci.yml @@ -36,7 +36,7 @@ jobs: uses: actions/setup-python@v5 id: setup-python with: - python-version: "3.9" + python-version: "3.11" architecture: x64 - name: Set up AWS SDK uses: aws-actions/configure-aws-credentials@v1 @@ -89,21 +89,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@v4 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.lambda_python_3_9.outputs.cache-hit != 'true' + if: steps.lambda_python_3_11.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.lambda_python_3_9.outputs.cache-hit == 'true' + if: steps.lambda_python_3_11.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 }} @@ -124,7 +124,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [ "3.9" ] + 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 5b59429bc71..32eebd5cafa 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.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 258f4e42403..cedec5915e7 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.10" ] + python-version: [ "3.11" ] os: [ ubuntu-latest ] env: OS: ${{ matrix.os }} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 872a54a80ae..dc3dd1c0e48 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.9' + 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 576da4e8f53..b76a6490d4a 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-13 ] exclude: - os: macos-13 diff --git a/Makefile b/Makefile index f2ea2cb4d0c..d231da8be10 100644 --- a/Makefile +++ b/Makefile @@ -357,7 +357,7 @@ kill-trino-locally: cd ${ROOT_DIR}; docker stop trino install-protoc-dependencies: - pip install --ignore-installed protobuf==4.23.4 "grpcio-tools>=1.56.2,<2" mypy-protobuf==3.1.0 + pip install --ignore-installed protobuf==4.24.0 "grpcio-tools>=1.56.2,<2" mypy-protobuf==3.1.0 install-feast-ci-locally: pip install -e ".[ci]" diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index b211730d0ef..ec9ce90b2e0 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -106,8 +106,7 @@ * [Google Cloud Platform](reference/providers/google-cloud-platform.md) * [Amazon Web Services](reference/providers/amazon-web-services.md) * [Azure](reference/providers/azure.md) -* [Batch Materialization Engines](reference/batch-materialization/README.md) - * [Bytewax](reference/batch-materialization/bytewax.md) +* [Batch Materialization Engines](reference/batch-materialization/README.md) * [Snowflake](reference/batch-materialization/snowflake.md) * [AWS Lambda (alpha)](reference/batch-materialization/lambda.md) * [Spark (contrib)](reference/batch-materialization/spark.md) diff --git a/docs/how-to-guides/running-feast-in-production.md b/docs/how-to-guides/running-feast-in-production.md index 4663c928c6e..adfb41dab68 100644 --- a/docs/how-to-guides/running-feast-in-production.md +++ b/docs/how-to-guides/running-feast-in-production.md @@ -57,28 +57,9 @@ To keep your online store up to date, you need to run a job that loads feature d Out of the box, Feast's materialization process uses an in-process materialization engine. This engine loads all the data being materialized into memory from the offline store, and writes it into the online store. This approach may not scale to large amounts of data, which users of Feast may be dealing with in production. -In this case, we recommend using one of the more [scalable materialization engines](./scaling-feast.md#scaling-materialization), such as the [Bytewax Materialization Engine](../reference/batch-materialization/bytewax.md), or the [Snowflake Materialization Engine](../reference/batch-materialization/snowflake.md). +In this case, we recommend using one of the more [scalable materialization engines](./scaling-feast.md#scaling-materialization), such as [Snowflake Materialization Engine](../reference/batch-materialization/snowflake.md). Users may also need to [write a custom materialization engine](../how-to-guides/customizing-feast/creating-a-custom-materialization-engine.md) to work on their existing infrastructure. -The Bytewax materialization engine can run materialization on an existing Kubernetes cluster. An example configuration of this in a `feature_store.yaml` is as follows: - -```yaml -batch_engine: - type: bytewax - namespace: bytewax - image: bytewax/bytewax-feast:latest - env: - - name: AWS_ACCESS_KEY_ID - valueFrom: - secretKeyRef: - name: aws-credentials - key: aws-access-key-id - - name: AWS_SECRET_ACCESS_KEY - valueFrom: - secretKeyRef: - name: aws-credentials - key: aws-secret-access-key -``` ### 2.2 Scheduled materialization with Airflow diff --git a/docs/reference/batch-materialization/bytewax.md b/docs/reference/batch-materialization/bytewax.md deleted file mode 100644 index 6a97bd391db..00000000000 --- a/docs/reference/batch-materialization/bytewax.md +++ /dev/null @@ -1,99 +0,0 @@ -# Bytewax - -## Description - -The [Bytewax](https://bytewax.io) batch materialization engine provides an execution -engine for batch materializing operations (`materialize` and `materialize-incremental`). - -### Guide - -In order to use the Bytewax materialization engine, you will need a [Kubernetes](https://kubernetes.io/) cluster running version 1.22.10 or greater. - -#### Kubernetes Authentication - -The Bytewax materialization engine loads authentication and cluster information from the [kubeconfig file](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/). By default, kubectl looks for a file named `config` in the `$HOME/.kube directory`. You can specify other kubeconfig files by setting the `KUBECONFIG` environment variable. - -#### Resource Authentication - -Bytewax jobs can be configured to access [Kubernetes secrets](https://kubernetes.io/docs/concepts/configuration/secret/) as environment variables to access online and offline stores during job runs. - -To configure secrets, first create them using `kubectl`: - -``` shell -kubectl create secret generic -n bytewax aws-credentials --from-literal=aws-access-key-id='' --from-literal=aws-secret-access-key='' -``` - -If your Docker registry requires authentication to store/pull containers, you can use this same approach to store your repository access credential and use when running the materialization engine. - -Then configure them in the batch_engine section of `feature_store.yaml`: - -``` yaml -batch_engine: - type: bytewax - namespace: bytewax - env: - - name: AWS_ACCESS_KEY_ID - valueFrom: - secretKeyRef: - name: aws-credentials - key: aws-access-key-id - - name: AWS_SECRET_ACCESS_KEY - valueFrom: - secretKeyRef: - name: aws-credentials - key: aws-secret-access-key - image_pull_secrets: - - docker-repository-access-secret -``` - -#### Configuration - -The Bytewax materialization engine is configured through the The `feature_store.yaml` configuration file: - -``` yaml -batch_engine: - type: bytewax - namespace: bytewax - image: bytewax/bytewax-feast:latest - image_pull_secrets: - - my_container_secret - service_account_name: my-k8s-service-account - include_security_context_capabilities: false - annotations: - # example annotation you might include if running on AWS EKS - iam.amazonaws.com/role: arn:aws:iam:::role/MyBytewaxPlatformRole - resources: - limits: - cpu: 1000m - memory: 2048Mi - requests: - cpu: 500m - memory: 1024Mi -``` - -**Notes:** - -* The `namespace` configuration directive specifies which Kubernetes [namespace](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/) jobs, services and configuration maps will be created in. -* The `image_pull_secrets` configuration directive specifies the pre-configured secret to use when pulling the image container from your registry. -* The `service_account_name` specifies which Kubernetes service account to run the job under. -* The `include_security_context_capabilities` flag indicates whether or not `"add": ["NET_BIND_SERVICE"]` and `"drop": ["ALL"]` are included in the job & pod security context capabilities. -* `annotations` allows you to include additional Kubernetes annotations to the job. This is particularly useful for IAM roles which grant the running pod access to cloud platform resources (for example). -* The `resources` configuration directive sets the standard Kubernetes [resource requests](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) for the job containers to utilise when materializing data. - -#### Building a custom Bytewax Docker image - -The `image` configuration directive specifies which container image to use when running the materialization job. To create a custom image based on this container, run the following command: - -``` shell -DOCKER_BUILDKIT=1 docker build . -f ./sdk/python/feast/infra/materialization/contrib/bytewax/Dockerfile -t -``` - -Once that image is built and pushed to a registry, it can be specified as a part of the batch engine configuration: - -``` shell -batch_engine: - type: bytewax - namespace: bytewax - image: -``` - diff --git a/java/serving/src/test/resources/docker-compose/feast10/Dockerfile b/java/serving/src/test/resources/docker-compose/feast10/Dockerfile index 8b3c5b3d3d4..94b3e708ddf 100644 --- a/java/serving/src/test/resources/docker-compose/feast10/Dockerfile +++ b/java/serving/src/test/resources/docker-compose/feast10/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.9 +FROM python:3.11 WORKDIR /app COPY java/serving/src/test/resources/docker-compose/feast10/ . diff --git a/sdk/python/feast/infra/feature_servers/gcp_cloudrun/Dockerfile b/sdk/python/feast/infra/feature_servers/gcp_cloudrun/Dockerfile index 6e3ff424eab..6b89d4f73c1 100644 --- a/sdk/python/feast/infra/feature_servers/gcp_cloudrun/Dockerfile +++ b/sdk/python/feast/infra/feature_servers/gcp_cloudrun/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.9-slim +FROM python:3.11-slim RUN apt-get update && apt-get install -y git diff --git a/sdk/python/feast/infra/feature_servers/multicloud/Dockerfile b/sdk/python/feast/infra/feature_servers/multicloud/Dockerfile index 5100a2f822c..8a441479184 100644 --- a/sdk/python/feast/infra/feature_servers/multicloud/Dockerfile +++ b/sdk/python/feast/infra/feature_servers/multicloud/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.9 +FROM python:3.11 RUN apt update && \ apt install -y \ diff --git a/sdk/python/feast/infra/feature_servers/multicloud/Dockerfile.dev b/sdk/python/feast/infra/feature_servers/multicloud/Dockerfile.dev index f92d3622a76..948e3569a64 100644 --- a/sdk/python/feast/infra/feature_servers/multicloud/Dockerfile.dev +++ b/sdk/python/feast/infra/feature_servers/multicloud/Dockerfile.dev @@ -1,4 +1,4 @@ -FROM python:3.9 +FROM python:3.11 RUN apt update && \ apt install -y \ diff --git a/sdk/python/feast/infra/materialization/kubernetes/Dockerfile b/sdk/python/feast/infra/materialization/kubernetes/Dockerfile index 956287a1d6a..510bb722851 100644 --- a/sdk/python/feast/infra/materialization/kubernetes/Dockerfile +++ b/sdk/python/feast/infra/materialization/kubernetes/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.9-slim-bullseye AS build +FROM python:3.11-slim-bullseye AS build RUN apt-get update && \ apt-get install --no-install-suggests --no-install-recommends --yes git diff --git a/sdk/python/feast/infra/passthrough_provider.py b/sdk/python/feast/infra/passthrough_provider.py index ec4df66d43a..6476acbcb93 100644 --- a/sdk/python/feast/infra/passthrough_provider.py +++ b/sdk/python/feast/infra/passthrough_provider.py @@ -42,8 +42,6 @@ class PassthroughProvider(Provider): """ def __init__(self, config: RepoConfig): - super().__init__(config) - self.repo_config = config self._offline_store = None self._online_store = None diff --git a/sdk/python/feast/infra/transformation_servers/Dockerfile b/sdk/python/feast/infra/transformation_servers/Dockerfile index 41f272c757c..cd46b0baa90 100644 --- a/sdk/python/feast/infra/transformation_servers/Dockerfile +++ b/sdk/python/feast/infra/transformation_servers/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.9-slim +FROM python:3.11-slim RUN apt-get update && apt-get install -y git 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..71f61964be6 --- /dev/null +++ b/sdk/python/requirements/py3.11-ci-requirements.txt @@ -0,0 +1,1047 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# 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 +async-timeout==4.0.3 + # via redis +atpublic==4.1.0 + # via ibis-framework +attrs==23.2.0 + # via + # bowler + # jsonschema + # referencing +azure-core==1.30.1 + # via + # azure-identity + # azure-storage-blob +azure-identity==1.16.0 + # via feast (setup.py) +azure-storage-blob==12.19.1 + # 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 +bleach==6.1.0 + # via nbconvert +boto3==1.34.93 + # via + # feast (setup.py) + # moto +botocore==1.34.93 + # via + # boto3 + # moto + # s3transfer +bowler==0.9.0 + # via feast (setup.py) +build==1.2.1 + # via + # feast (setup.py) + # pip-tools +cachecontrol==0.14.0 + # via firebase-admin +cachetools==5.3.3 + # via google-auth +cassandra-driver==3.29.1 + # 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 + # 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.2 + # via + # ipykernel + # ipywidgets +coverage[toml]==7.5.0 + # via 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[array,dataframe]==2024.4.2 + # via + # dask-expr + # feast (setup.py) +dask-expr==1.0.13 + # via dask +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 +deltalake==0.17.2 + # via feast (setup.py) +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 +duckdb==0.10.2 + # via + # duckdb-engine + # ibis-framework +duckdb-engine==0.12.0 + # via ibis-framework +entrypoints==0.4 + # via altair +exceptiongroup==1.2.1 + # via + # anyio + # ipython + # pytest +execnet==2.1.1 + # via pytest-xdist +executing==2.0.1 + # via stack-data +fastapi==0.110.2 + # via feast (setup.py) +fastjsonschema==2.19.1 + # via nbformat +filelock==3.14.0 + # via + # snowflake-connector-python + # virtualenv +firebase-admin==5.4.0 + # via feast (setup.py) +fissix==24.4.24 + # via bowler +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.18.0 + # 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.127.0 + # via firebase-admin +google-auth==2.29.0 + # via + # google-api-core + # google-api-python-client + # google-auth-httplib2 + # google-cloud-core + # google-cloud-firestore + # 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-storage==2.24.0 + # via feast (setup.py) +google-cloud-bigtable==2.23.1 + # 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.16.0 + # via firebase-admin +google-cloud-storage==2.16.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.63.0 + # via + # feast (setup.py) + # google-api-core + # grpc-google-iam-v1 + # grpcio-status +great-expectations==0.18.12 + # via feast (setup.py) +greenlet==3.0.3 + # via sqlalchemy +grpc-google-iam-v1==0.13.0 + # via google-cloud-bigtable +grpcio==1.62.2 + # 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.2 + # via feast (setup.py) +grpcio-reflection==1.62.2 + # via feast (setup.py) +grpcio-status==1.62.2 + # via google-api-core +grpcio-testing==1.62.2 + # via feast (setup.py) +grpcio-tools==1.62.2 + # via feast (setup.py) +gunicorn==22.0.0 ; platform_system != "Windows" + # 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.5 + # 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[duckdb]==8.0.0 + # via + # feast (setup.py) + # ibis-substrait +ibis-substrait==3.2.0 + # via feast (setup.py) +identify==2.5.36 + # via pre-commit +idna==3.7 + # via + # anyio + # httpx + # jsonschema + # requests + # snowflake-connector-python +imagesize==1.4.1 + # via sphinx +importlib-metadata==7.1.0 + # via + # build + # dask + # jupyter-client + # jupyter-lsp + # jupyterlab + # jupyterlab-server + # nbconvert + # sphinx + # typeguard +iniconfig==2.0.0 + # via pytest +ipykernel==6.29.4 + # via jupyterlab +ipython==8.18.1 + # 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 +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.25 + # via jupyterlab-server +jsonpatch==1.33 + # via great-expectations +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.1 + # via + # ipykernel + # jupyter-server + # nbclient +jupyter-core==5.7.2 + # via + # ipykernel + # jupyter-client + # jupyter-server + # jupyterlab + # nbclient + # nbconvert + # nbformat +jupyter-events==0.10.0 + # via jupyter-server +jupyter-lsp==2.2.5 + # via jupyterlab +jupyter-server==2.14.0 + # via + # jupyter-lsp + # jupyterlab + # jupyterlab-server + # notebook + # notebook-shim +jupyter-server-terminals==0.5.3 + # via jupyter-server +jupyterlab==4.1.8 + # via notebook +jupyterlab-pygments==0.3.0 + # via nbconvert +jupyterlab-server==2.27.1 + # 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.7 + # via + # ipykernel + # ipython +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.28.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.10.0 + # via + # feast (setup.py) + # sqlalchemy +mypy-extensions==1.0.0 + # via mypy +mypy-protobuf==3.3.0 + # via feast (setup.py) +nbclient==0.10.0 + # via nbconvert +nbconvert==7.16.4 + # via jupyter-server +nbformat==5.10.4 + # via + # great-expectations + # jupyter-server + # nbclient + # nbconvert +nest-asyncio==1.6.0 + # via ipykernel +nodeenv==1.8.0 + # via pre-commit +notebook==7.1.3 + # via great-expectations +notebook-shim==0.2.4 + # via + # jupyterlab + # notebook +numpy==1.26.4 + # via + # altair + # dask + # 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==24.0 + # via + # build + # dask + # db-dtypes + # docker + # duckdb-engine + # google-cloud-bigquery + # great-expectations + # gunicorn + # ibis-substrait + # ipykernel + # jupyter-server + # jupyterlab + # jupyterlab-server + # marshmallow + # msal-extensions + # nbconvert + # pytest + # snowflake-connector-python + # sphinx +pandas==2.2.2 + # via + # altair + # dask + # dask-expr + # db-dtypes + # feast (setup.py) + # google-cloud-bigquery + # great-expectations + # ibis-framework + # snowflake-connector-python +pandocfilters==1.5.1 + # via nbconvert +parso==0.8.4 + # via jedi +parsy==2.1 + # via ibis-framework +partd==1.4.1 + # via dask +pbr==6.0.0 + # via mock +pexpect==4.9.0 + # via ipython +pip-tools==7.4.1 + # via feast (setup.py) +platformdirs==3.11.0 + # via + # jupyter-core + # snowflake-connector-python + # virtualenv +pluggy==1.5.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 + # google-api-core + # google-cloud-bigquery + # google-cloud-bigquery-storage + # google-cloud-bigtable + # google-cloud-datastore + # google-cloud-firestore +protobuf==4.25.3 + # 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.2 + # via + # dask-expr + # db-dtypes + # deltalake + # feast (setup.py) + # google-cloud-bigquery + # ibis-framework + # snowflake-connector-python +pyarrow-hotfix==0.6 + # via + # deltalake + # ibis-framework +pyasn1==0.6.0 + # via + # pyasn1-modules + # rsa +pyasn1-modules==0.4.0 + # via google-auth +pybindgen==0.22.1 + # via feast (setup.py) +pycparser==2.22 + # via cffi +pydantic==2.7.1 + # via + # fastapi + # feast (setup.py) + # great-expectations +pydantic-core==2.18.2 + # via pydantic +pygments==2.17.2 + # via + # feast (setup.py) + # ipython + # nbconvert + # rich + # sphinx +pyjwt[crypto]==2.8.0 + # via + # msal + # snowflake-connector-python +pymssql==2.3.0 + # via feast (setup.py) +pymysql==1.1.0 + # via feast (setup.py) +pyodbc==5.1.0 + # via feast (setup.py) +pyopenssl==24.1.0 + # via snowflake-connector-python +pyparsing==3.1.2 + # via + # great-expectations + # httplib2 +pyproject-hooks==1.1.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-env + # pytest-lazy-fixture + # pytest-mock + # pytest-ordering + # pytest-timeout + # pytest-xdist +pytest-benchmark==3.4.1 + # via feast (setup.py) +pytest-cov==5.0.0 + # via feast (setup.py) +pytest-env==1.1.3 + # 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.6.1 + # 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==26.0.2 + # via + # ipykernel + # jupyter-client + # jupyter-server +redis==4.6.0 + # via feast (setup.py) +referencing==0.35.0 + # via + # jsonschema + # jsonschema-specifications + # jupyter-events +regex==2024.4.28 + # 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==2.0.0 + # 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 +ruamel-yaml-clib==0.2.8 + # via ruamel-yaml +ruff==0.4.2 + # via feast (setup.py) +s3transfer==0.10.1 + # via boto3 +scipy==1.13.0 + # via great-expectations +send2trash==1.8.3 + # 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.9.1 + # via feast (setup.py) +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]==2.0.29 + # via + # duckdb-engine + # feast (setup.py) + # ibis-framework + # sqlalchemy + # sqlalchemy-views +sqlalchemy-views==0.3.2 + # via ibis-framework +sqlglot==20.11.0 + # via ibis-framework +stack-data==0.6.3 + # via ipython +starlette==0.37.2 + # via fastapi +substrait==0.17.0 + # via ibis-substrait +tabulate==0.9.0 + # via feast (setup.py) +tenacity==8.2.3 + # via feast (setup.py) +terminado==0.18.1 + # via + # jupyter-server + # jupyter-server-terminals +testcontainers==4.4.0 + # via feast (setup.py) +thriftpy2==0.4.20 + # via happybase +tinycss2==1.3.0 + # via nbconvert +toml==0.10.2 + # via feast (setup.py) +tomli==2.0.1 + # via + # build + # coverage + # jupyterlab + # mypy + # pip-tools + # pytest + # pytest-env +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.3 + # 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.2.1 + # via feast (setup.py) +types-cffi==1.16.0.20240331 + # via types-pyopenssl +types-protobuf==3.19.22 + # via + # feast (setup.py) + # mypy-protobuf +types-pymysql==1.1.0.20240425 + # via feast (setup.py) +types-pyopenssl==24.1.0.20240425 + # via types-redis +types-python-dateutil==2.9.0.20240316 + # via + # arrow + # feast (setup.py) +types-pytz==2024.1.0.20240417 + # via feast (setup.py) +types-pyyaml==6.0.12.20240311 + # via feast (setup.py) +types-redis==4.6.0.20240425 + # via feast (setup.py) +types-requests==2.30.0.0 + # via feast (setup.py) +types-setuptools==69.5.0.20240423 + # via + # feast (setup.py) + # types-cffi +types-tabulate==0.9.0.20240106 + # via feast (setup.py) +types-urllib3==1.26.25.14 + # via types-requests +typing-extensions==4.11.0 + # via + # anyio + # async-lru + # azure-core + # azure-storage-blob + # fastapi + # great-expectations + # ibis-framework + # ipython + # mypy + # pydantic + # pydantic-core + # snowflake-connector-python + # sqlalchemy + # starlette + # testcontainers + # typeguard + # uvicorn +tzdata==2024.1 + # via pandas +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 + # snowflake-connector-python + # testcontainers +uvicorn[standard]==0.29.0 + # via feast (setup.py) +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.8.0 + # via + # jupyter-server + # kubernetes +websockets==12.0 + # via uvicorn +werkzeug==3.0.2 + # via moto +wheel==0.43.0 + # via pip-tools +widgetsnbextension==4.0.10 + # via ipywidgets +wrapt==1.16.0 + # via testcontainers +xmltodict==0.13.0 + # via moto +zipp==3.18.1 + # 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..161e435b54e --- /dev/null +++ b/sdk/python/requirements/py3.11-requirements.txt @@ -0,0 +1,197 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# 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 + # 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 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[array,dataframe]==2024.4.2 + # via + # dask-expr + # feast (setup.py) +dask-expr==1.0.13 + # via dask +dill==0.3.8 + # via feast (setup.py) +exceptiongroup==1.2.1 + # via anyio +fastapi==0.110.2 + # via feast (setup.py) +fissix==24.4.24 + # via bowler +fsspec==2024.3.1 + # via dask +greenlet==3.0.3 + # via sqlalchemy +gunicorn==22.0.0 ; platform_system != "Windows" + # via feast (setup.py) +h11==0.14.0 + # via uvicorn +httptools==0.6.1 + # via uvicorn +idna==3.7 + # via + # anyio + # requests +importlib-metadata==7.1.0 + # via + # dask + # typeguard +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.10.0 + # via sqlalchemy +mypy-extensions==1.0.0 + # via mypy +mypy-protobuf==3.6.0 + # via feast (setup.py) +numpy==1.26.4 + # via + # dask + # feast (setup.py) + # pandas + # pyarrow +packaging==24.0 + # via + # dask + # gunicorn +pandas==2.2.2 + # via + # dask + # dask-expr + # feast (setup.py) +partd==1.4.1 + # via dask +protobuf==4.25.3 + # via + # feast (setup.py) + # mypy-protobuf +pyarrow==16.0.0 + # via + # dask-expr + # feast (setup.py) +pydantic==2.7.1 + # via + # fastapi + # feast (setup.py) +pydantic-core==2.18.2 + # 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.35.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 +sqlalchemy[mypy]==2.0.29 + # via + # feast (setup.py) + # sqlalchemy +starlette==0.37.2 + # 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) +tomli==2.0.1 + # via mypy +toolz==0.12.1 + # via + # dask + # partd +tqdm==4.66.2 + # via feast (setup.py) +typeguard==4.2.1 + # via feast (setup.py) +types-protobuf==5.26.0.20240422 + # via mypy-protobuf +typing-extensions==4.11.0 + # via + # anyio + # fastapi + # mypy + # pydantic + # pydantic-core + # sqlalchemy + # starlette + # typeguard + # uvicorn +tzdata==2024.1 + # via pandas +urllib3==2.2.1 + # via requests +uvicorn[standard]==0.29.0 + # via feast (setup.py) +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.18.1 + # via importlib-metadata diff --git a/setup.py b/setup.py index 7cd2c302aef..65d8ee27b5c 100644 --- a/setup.py +++ b/setup.py @@ -65,7 +65,7 @@ "fastapi>=0.68.0", "uvicorn[standard]>=0.14.0,<1", "gunicorn; platform_system != 'Windows'", - "dask[dataframe]>=2021.1.0", + "dask[dataframe]>=2024.4.2", "bowler", # Needed for automatic repo upgrades ]