diff --git a/.github/workflows/master_only.yml b/.github/workflows/master_only.yml index 2042987617b..4b23635a182 100644 --- a/.github/workflows/master_only.yml +++ b/.github/workflows/master_only.yml @@ -13,7 +13,9 @@ jobs: - name: Set up QEMU uses: docker/setup-qemu-action@v1 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v2 + with: + install: true - name: Set up AWS SDK uses: aws-actions/configure-aws-credentials@v1 with: @@ -50,6 +52,7 @@ jobs: docker build \ --file sdk/python/feast/infra/feature_servers/aws_lambda/Dockerfile \ --tag $ECR_REGISTRY/$ECR_REPOSITORY:${{ steps.image-tag.outputs.DOCKER_IMAGE_TAG }} \ + --load \ . docker push $ECR_REGISTRY/$ECR_REPOSITORY:${{ steps.image-tag.outputs.DOCKER_IMAGE_TAG }} outputs: @@ -177,7 +180,9 @@ jobs: - name: Set up QEMU uses: docker/setup-qemu-action@v1 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v2 + with: + install: true - name: Login to DockerHub uses: docker/login-action@v1 with: diff --git a/.github/workflows/pr_integration_tests.yml b/.github/workflows/pr_integration_tests.yml index 089d9f47336..a720865ed42 100644 --- a/.github/workflows/pr_integration_tests.yml +++ b/.github/workflows/pr_integration_tests.yml @@ -20,7 +20,7 @@ jobs: (github.event.action != 'labeled' && (contains(github.event.pull_request.labels.*.name, 'ok-to-test') || contains(github.event.pull_request.labels.*.name, 'approved') || contains(github.event.pull_request.labels.*.name, 'lgtm'))) runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: # pull_request_target runs the workflow in the context of the base repo # as such actions/checkout needs to be explicit configured to retrieve @@ -30,7 +30,9 @@ jobs: - name: Set up QEMU uses: docker/setup-qemu-action@v1 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v2 + with: + install: true - name: Set up AWS SDK uses: aws-actions/configure-aws-credentials@v1 with: @@ -67,6 +69,7 @@ jobs: docker build \ --file sdk/python/feast/infra/feature_servers/aws_lambda/Dockerfile \ --tag $ECR_REGISTRY/$ECR_REPOSITORY:${{ steps.image-tag.outputs.DOCKER_IMAGE_TAG }} \ + --load \ . docker push $ECR_REGISTRY/$ECR_REPOSITORY:${{ steps.image-tag.outputs.DOCKER_IMAGE_TAG }} outputs: diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ef9d0ec369..dcf60282d83 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Changelog +## [0.21.1](https://github.com/feast-dev/feast/compare/v0.21.0...v0.21.1) (2022-05-17) + + +### Bug Fixes + +* Add S3FS dependency (which Dask depends on for S3 files) ([#2701](https://github.com/feast-dev/feast/issues/2701)) ([1f893f1](https://github.com/feast-dev/feast/commit/1f893f1f6c60927616f2edc9687059a1254562ab)) +* Fix broken roadmap links ([#2690](https://github.com/feast-dev/feast/issues/2690)) ([079395a](https://github.com/feast-dev/feast/commit/079395ab09e9ed6e8546a24b88815d6aa22c9ac7)) +* Fix issue when user specifies a port for feast ui ([#2692](https://github.com/feast-dev/feast/issues/2692)) ([00a9de9](https://github.com/feast-dev/feast/commit/00a9de92b818723acaf843f2d1e433d194949ad8)) +* Python server is not correctly starting in integration tests ([#2706](https://github.com/feast-dev/feast/issues/2706)) ([4525336](https://github.com/feast-dev/feast/commit/45253366d09a69385d0e688b6cb017119d31883e)) +* Support push sources in stream feature views ([#2704](https://github.com/feast-dev/feast/issues/2704)) ([6531685](https://github.com/feast-dev/feast/commit/65316859662fbb857d5158c491ed9bfbb717a141)) + # [0.21.0](https://github.com/feast-dev/feast/compare/v0.20.0...v0.21.0) (2022-05-13) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9cce520d346..4bd14d762a5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -75,7 +75,8 @@ Note that this means if you are midway through working through a PR and rebase, ## Feast Python SDK / CLI ### Environment Setup Setting up your development environment for Feast Python SDK / CLI: -1. Ensure that you have Docker installed in your environment. Docker is used to provision service dependencies during testing. +1. Ensure that you have Docker installed in your environment. Docker is used to provision service dependencies during testing, and build images for feature servers and other components. + 1. Please note that we use [Docker with BuiltKit](https://docs.docker.com/develop/develop-images/build_enhancements/). 2. Ensure that you have `make`, Python (3.7 and above) with `pip`, installed. 3. _Recommended:_ Create a virtual environment to isolate development dependencies to be installed ```sh diff --git a/Makefile b/Makefile index e208ab3c451..5dfbaba53bd 100644 --- a/Makefile +++ b/Makefile @@ -206,31 +206,31 @@ push-ci-docker: # TODO(adchia): consider removing. This doesn't run successfully right now build-ci-docker: - docker build -t $(REGISTRY)/feast-ci:$(VERSION) -f infra/docker/ci/Dockerfile . + docker buildx build -t $(REGISTRY)/feast-ci:$(VERSION) -f infra/docker/ci/Dockerfile --load . push-feature-server-python-aws-docker: docker push $(REGISTRY)/feature-server-python-aws:$$VERSION build-feature-server-python-aws-docker: - docker build --build-arg VERSION=$$VERSION \ + docker buildx build --build-arg VERSION=$$VERSION \ -t $(REGISTRY)/feature-server-python-aws:$$VERSION \ - -f sdk/python/feast/infra/feature_servers/aws_lambda/Dockerfile . + -f sdk/python/feast/infra/feature_servers/aws_lambda/Dockerfile --load . push-feature-transformation-server-docker: docker push $(REGISTRY)/feature-transformation-server:$(VERSION) build-feature-transformation-server-docker: - docker build --build-arg VERSION=$(VERSION) \ + docker buildx build --build-arg VERSION=$(VERSION) \ -t $(REGISTRY)/feature-transformation-server:$(VERSION) \ - -f sdk/python/feast/infra/transformation_servers/Dockerfile . + -f sdk/python/feast/infra/transformation_servers/Dockerfile --load . push-feature-server-java-docker: docker push $(REGISTRY)/feature-server-java:$(VERSION) build-feature-server-java-docker: - docker build --build-arg VERSION=$(VERSION) \ + docker buildx build --build-arg VERSION=$(VERSION) \ -t $(REGISTRY)/feature-server-java:$(VERSION) \ - -f java/infra/docker/feature-server/Dockerfile . + -f java/infra/docker/feature-server/Dockerfile --load . # Documentation diff --git a/README.md b/README.md index 5905bbd647f..01776b048ad 100644 --- a/README.md +++ b/README.md @@ -176,7 +176,7 @@ The list below contains the functionality that contributors are planning to deve * [ ] Cassandra * **Streaming** * [x] [Custom streaming ingestion job support](https://docs.feast.dev/how-to-guides/creating-a-custom-provider) - * [x] [Push based streaming data ingestion](https://docs.feast.dev/reference/data-sources/push.md) + * [x] [Push based streaming data ingestion](https://docs.feast.dev/reference/data-sources/push) * [ ] Streaming ingestion on AWS * [ ] Streaming ingestion on GCP * **Feature Engineering** @@ -207,7 +207,7 @@ The list below contains the functionality that contributors are planning to deve * [x] CLI for browsing feature registry * [x] Model-centric feature tracking (feature services) * [x] Amundsen integration (see [Feast extractor](https://github.com/amundsen-io/amundsen/blob/main/databuilder/databuilder/extractor/feast_extractor.py)) - * [x] Feast Web UI (Alpha release. See [documentation](https://docs.feast.dev/reference/alpha-web-ui.md)) + * [x] Feast Web UI (Alpha release. See [documentation](https://docs.feast.dev/reference/alpha-web-ui)) * [ ] REST API for browsing feature registry * [ ] Feature versioning diff --git a/docs/getting-started/architecture-and-components/online-store.md b/docs/getting-started/architecture-and-components/online-store.md index 4f2e44c92ce..21b4dbcb9c7 100644 --- a/docs/getting-started/architecture-and-components/online-store.md +++ b/docs/getting-started/architecture-and-components/online-store.md @@ -12,4 +12,4 @@ Once the above data source is materialized into Feast \(using `feast materialize ![](../../.gitbook/assets/image%20%285%29.png) -Features can also be written to the online store via [push sources](https://docs.feast.dev/reference/data-sources/push) \ No newline at end of file +Features can also be written to the online store via [push sources](../../reference/data-sources/push.md) \ No newline at end of file diff --git a/docs/getting-started/architecture-and-components/overview.md b/docs/getting-started/architecture-and-components/overview.md index bf5c12dcc20..0c47fb2753d 100644 --- a/docs/getting-started/architecture-and-components/overview.md +++ b/docs/getting-started/architecture-and-components/overview.md @@ -23,7 +23,7 @@ A complete Feast deployment contains the following components: * Materialize (load) feature values into the online store. * Build and retrieve training datasets from the offline store. * Retrieve online features. -* **Online Store:** The online store is a database that stores only the latest feature values for each entity. The online store is populated by materialization jobs and from [stream ingestion](../../reference/alpha-stream-ingestion.md). +* **Online Store:** The online store is a database that stores only the latest feature values for each entity. The online store is populated by materialization jobs and from [stream ingestion](../../reference/data-sources/push.md). * **Offline Store:** The offline store persists batch data that has been ingested into Feast. This data is used for producing training datasets. Feast does not manage the offline store directly, but runs queries against it. {% hint style="info" %} diff --git a/docs/getting-started/quickstart.md b/docs/getting-started/quickstart.md index 41449b77e39..1684c720632 100644 --- a/docs/getting-started/quickstart.md +++ b/docs/getting-started/quickstart.md @@ -367,7 +367,7 @@ pprint(feature_vector) ## Step 7: Using a feature service to fetch online features instead. -You can also use feature services to manage multiple features, and decouple feature view definitions and the features needed by end applications. The feature store can also be used to fetch either online or historical features using the same api below. More information can be found [here](https://docs.feast.dev/getting-started/concepts/feature-service). +You can also use feature services to manage multiple features, and decouple feature view definitions and the features needed by end applications. The feature store can also be used to fetch either online or historical features using the same api below. More information can be found [here](https://docs.feast.dev/getting-started/concepts/feature-retrieval). {% tabs %} {% tab title="Python" %} diff --git a/docs/roadmap.md b/docs/roadmap.md index c2f5511f1ed..d893814aafd 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -41,7 +41,7 @@ The list below contains the functionality that contributors are planning to deve * [ ] Cassandra * **Streaming** * [x] [Custom streaming ingestion job support](https://docs.feast.dev/how-to-guides/creating-a-custom-provider) - * [x] [Push based streaming data ingestion](https://docs.feast.dev/reference/data-sources/push.md) + * [x] [Push based streaming data ingestion](https://docs.feast.dev/reference/data-sources/push) * [ ] Streaming ingestion on AWS * [ ] Streaming ingestion on GCP * **Feature Engineering** @@ -72,6 +72,6 @@ The list below contains the functionality that contributors are planning to deve * [x] CLI for browsing feature registry * [x] Model-centric feature tracking (feature services) * [x] Amundsen integration (see [Feast extractor](https://github.com/amundsen-io/amundsen/blob/main/databuilder/databuilder/extractor/feast_extractor.py)) - * [x] Feast Web UI (Alpha release. See [documentation](https://docs.feast.dev/reference/alpha-web-ui.md)) + * [x] Feast Web UI (Alpha release. See [documentation](https://docs.feast.dev/reference/alpha-web-ui)) * [ ] REST API for browsing feature registry * [ ] Feature versioning diff --git a/infra/charts/feast-python-server/Chart.yaml b/infra/charts/feast-python-server/Chart.yaml index bd0140485c4..60b2e06d2c7 100644 --- a/infra/charts/feast-python-server/Chart.yaml +++ b/infra/charts/feast-python-server/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: feast-python-server description: Feast Feature Server in Python type: application -version: 0.21.0 +version: 0.21.1 keywords: - machine learning - big data diff --git a/infra/charts/feast-python-server/README.md b/infra/charts/feast-python-server/README.md index af844bf7d35..21487a9658d 100644 --- a/infra/charts/feast-python-server/README.md +++ b/infra/charts/feast-python-server/README.md @@ -1,6 +1,6 @@ # feast-python-server -![Version: 0.21.0](https://img.shields.io/badge/Version-0.21.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) +![Version: 0.21.1](https://img.shields.io/badge/Version-0.21.1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) Feast Feature Server in Python diff --git a/infra/charts/feast/Chart.yaml b/infra/charts/feast/Chart.yaml index bf1020ffa28..cb235b2ad0a 100644 --- a/infra/charts/feast/Chart.yaml +++ b/infra/charts/feast/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v1 description: Feature store for machine learning name: feast -version: 0.21.0 +version: 0.21.1 keywords: - machine learning - big data diff --git a/infra/charts/feast/README.md b/infra/charts/feast/README.md index 8d2865f9e09..98625344e0b 100644 --- a/infra/charts/feast/README.md +++ b/infra/charts/feast/README.md @@ -8,7 +8,7 @@ This repo contains Helm charts for Feast components that are being installed on ## Chart: Feast -Feature store for machine learning Current chart version is `0.21.0` +Feature store for machine learning Current chart version is `0.21.1` ## Installation @@ -55,8 +55,8 @@ For more details, please see: https://docs.feast.dev/how-to-guides/running-feast | Repository | Name | Version | |------------|------|---------| | https://charts.helm.sh/stable | redis | 10.5.6 | -| https://feast-helm-charts.storage.googleapis.com | feature-server(feature-server) | 0.21.0 | -| https://feast-helm-charts.storage.googleapis.com | transformation-service(transformation-service) | 0.21.0 | +| https://feast-helm-charts.storage.googleapis.com | feature-server(feature-server) | 0.21.1 | +| https://feast-helm-charts.storage.googleapis.com | transformation-service(transformation-service) | 0.21.1 | ## Values diff --git a/infra/charts/feast/charts/feature-server/Chart.yaml b/infra/charts/feast/charts/feature-server/Chart.yaml index 812719b5f09..5ee50905ead 100644 --- a/infra/charts/feast/charts/feature-server/Chart.yaml +++ b/infra/charts/feast/charts/feature-server/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v1 description: "Feast Feature Server: Online feature serving service for Feast" name: feature-server -version: 0.21.0 -appVersion: v0.21.0 +version: 0.21.1 +appVersion: v0.21.1 keywords: - machine learning - big data diff --git a/infra/charts/feast/charts/feature-server/README.md b/infra/charts/feast/charts/feature-server/README.md index 5577b94dcf1..3ee88859916 100644 --- a/infra/charts/feast/charts/feature-server/README.md +++ b/infra/charts/feast/charts/feature-server/README.md @@ -1,6 +1,6 @@ # feature-server -![Version: 0.21.0](https://img.shields.io/badge/Version-0.21.0-informational?style=flat-square) ![AppVersion: v0.21.0](https://img.shields.io/badge/AppVersion-v0.21.0-informational?style=flat-square) +![Version: 0.21.1](https://img.shields.io/badge/Version-0.21.1-informational?style=flat-square) ![AppVersion: v0.21.1](https://img.shields.io/badge/AppVersion-v0.21.1-informational?style=flat-square) Feast Feature Server: Online feature serving service for Feast @@ -17,7 +17,7 @@ Feast Feature Server: Online feature serving service for Feast | envOverrides | object | `{}` | Extra environment variables to set | | image.pullPolicy | string | `"IfNotPresent"` | Image pull policy | | image.repository | string | `"feastdev/feature-server-java"` | Docker image for Feature Server repository | -| image.tag | string | `"0.21.0"` | Image tag | +| image.tag | string | `"0.21.1"` | Image tag | | ingress.grpc.annotations | object | `{}` | Extra annotations for the ingress | | ingress.grpc.auth.enabled | bool | `false` | Flag to enable auth | | ingress.grpc.class | string | `"nginx"` | Which ingress controller to use | diff --git a/infra/charts/feast/charts/feature-server/values.yaml b/infra/charts/feast/charts/feature-server/values.yaml index 457e83875af..85393a1d240 100644 --- a/infra/charts/feast/charts/feature-server/values.yaml +++ b/infra/charts/feast/charts/feature-server/values.yaml @@ -5,7 +5,7 @@ image: # image.repository -- Docker image for Feature Server repository repository: feastdev/feature-server-java # image.tag -- Image tag - tag: 0.21.0 + tag: 0.21.1 # image.pullPolicy -- Image pull policy pullPolicy: IfNotPresent diff --git a/infra/charts/feast/charts/transformation-service/Chart.yaml b/infra/charts/feast/charts/transformation-service/Chart.yaml index 7922a648c85..45d5d85b763 100644 --- a/infra/charts/feast/charts/transformation-service/Chart.yaml +++ b/infra/charts/feast/charts/transformation-service/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v1 description: "Transformation service: to compute on-demand features" name: transformation-service -version: 0.21.0 -appVersion: v0.21.0 +version: 0.21.1 +appVersion: v0.21.1 keywords: - machine learning - big data diff --git a/infra/charts/feast/charts/transformation-service/README.md b/infra/charts/feast/charts/transformation-service/README.md index 73a738f1ed6..c904c10dddd 100644 --- a/infra/charts/feast/charts/transformation-service/README.md +++ b/infra/charts/feast/charts/transformation-service/README.md @@ -1,6 +1,6 @@ # transformation-service -![Version: 0.21.0](https://img.shields.io/badge/Version-0.21.0-informational?style=flat-square) ![AppVersion: v0.21.0](https://img.shields.io/badge/AppVersion-v0.21.0-informational?style=flat-square) +![Version: 0.21.1](https://img.shields.io/badge/Version-0.21.1-informational?style=flat-square) ![AppVersion: v0.21.1](https://img.shields.io/badge/AppVersion-v0.21.1-informational?style=flat-square) Transformation service: to compute on-demand features @@ -13,7 +13,7 @@ Transformation service: to compute on-demand features | envOverrides | object | `{}` | Extra environment variables to set | | image.pullPolicy | string | `"IfNotPresent"` | Image pull policy | | image.repository | string | `"feastdev/feature-transformation-server"` | Docker image for Transformation Server repository | -| image.tag | string | `"0.21.0"` | Image tag | +| image.tag | string | `"0.21.1"` | Image tag | | nodeSelector | object | `{}` | Node labels for pod assignment | | podLabels | object | `{}` | Labels to be added to Feast Serving pods | | replicaCount | int | `1` | Number of pods that will be created | diff --git a/infra/charts/feast/charts/transformation-service/values.yaml b/infra/charts/feast/charts/transformation-service/values.yaml index 3d111984e51..a2296ae3c98 100644 --- a/infra/charts/feast/charts/transformation-service/values.yaml +++ b/infra/charts/feast/charts/transformation-service/values.yaml @@ -5,7 +5,7 @@ image: # image.repository -- Docker image for Transformation Server repository repository: feastdev/feature-transformation-server # image.tag -- Image tag - tag: 0.21.0 + tag: 0.21.1 # image.pullPolicy -- Image pull policy pullPolicy: IfNotPresent diff --git a/infra/charts/feast/requirements.yaml b/infra/charts/feast/requirements.yaml index ad0cb850bb3..78c62eb12cc 100644 --- a/infra/charts/feast/requirements.yaml +++ b/infra/charts/feast/requirements.yaml @@ -1,12 +1,12 @@ dependencies: - name: feature-server alias: feature-server - version: 0.21.0 + version: 0.21.1 condition: feature-server.enabled repository: https://feast-helm-charts.storage.googleapis.com - name: transformation-service alias: transformation-service - version: 0.21.0 + version: 0.21.1 condition: transformation-service.enabled repository: https://feast-helm-charts.storage.googleapis.com - name: redis diff --git a/infra/scripts/release/bump_file_versions.py b/infra/scripts/release/bump_file_versions.py index b706c2c141b..e17463c2c7b 100644 --- a/infra/scripts/release/bump_file_versions.py +++ b/infra/scripts/release/bump_file_versions.py @@ -33,46 +33,22 @@ def main() -> None: with open(path_to_file_list, "r") as f: files_to_bump = f.read().splitlines() - # The current version should be 0.18.0 or 0.19.0 or 0.20.0 etc, but we should also make sure to support the - # occasional patch release on the master branch like 0.18.1 or 0.18.2 - versions_in_files = 0 - if current_version[-2:] != ".0": - print(current_version[-2:]) - versions_in_files = count_version(current_version, files_to_bump, repo_root) - if versions_in_files != VERSIONS_TO_BUMP: - raise SystemExit(f"Found {versions_in_files} occurrences of {current_version} in files to bump, but " - f"expected {VERSIONS_TO_BUMP}") - else: - found = False - - # Lets make sure the files don't contain a patch version (e.g, 0.x.0 -> 0.x.20) - for patch_version in range(0, 20): - current_version_patch = current_version[:-1] + str(patch_version) - versions_in_files = count_version(current_version_patch, files_to_bump, repo_root) - - # We are using a patch version, let's change our version number - if versions_in_files == VERSIONS_TO_BUMP: - print(f"Found {versions_in_files} occurrences of {current_version_patch}, changing current version to " - f"{current_version_patch}") - current_version = current_version_patch - found = True - break - else: - print(f"Found {versions_in_files} occurrences of {current_version_patch}, instead of {VERSIONS_TO_BUMP}") - if not found: - raise SystemExit(f"Could not find {VERSIONS_TO_BUMP} versions of {current_version} in {path_to_file_list}") - - print(f"Found {versions_in_files} occurrences of {current_version} in files to bump {path_to_file_list}") + # The current version should be 0.18.0 or 0.19.0 or 0.20.0 etc + validate_files_to_bump(current_version, files_to_bump, repo_root) # Bump the version in the files updated_count = 0 for file in files_to_bump: - with open(repo_root.joinpath(file), "r") as f: - file_contents = f.read() - file_contents = file_contents.replace(current_version, new_version) - - with open(repo_root.joinpath(file), "w") as f: - f.write(file_contents) + components = file.split(" ") + file_path = components[0] + lines = components[1:] + with open(repo_root.joinpath(file_path), "r") as f: + file_contents = f.readlines() + for line in lines: + file_contents[int(line) - 1] = file_contents[int(line) - 1].replace(current_version, new_version) + + with open(repo_root.joinpath(file_path), "w") as f: + f.write(''.join(file_contents)) updated_count += 1 print(f"Updated {updated_count} files with new version {new_version}") @@ -88,14 +64,19 @@ def is_semantic_version(version: str) -> bool: return True -def count_version(current_version, files_to_bump, repo_root): - # Count how many of the existing versions we find - total = 0 +def validate_files_to_bump(current_version, files_to_bump, repo_root): for file in files_to_bump: - with open(repo_root.joinpath(file), "r") as f: - file_contents = f.read() - total += file_contents.count(current_version) - return total + components = file.split(" ") + assert len(components) > 1, f"Entry {file} should have a file name, and a list of line numbers with versions" + file_path = components[0] + lines = components[1:] + with open(repo_root.joinpath(file_path), "r") as f: + file_contents = f.readlines() + for line in lines: + assert current_version in file_contents[int(line) - 1], ( + f"File `{file_path}` line `{line}` didn't contain version {current_version}. " + f"Contents: {file_contents[int(line) - 1]}" + ) if __name__ == "__main__": diff --git a/infra/scripts/release/files_to_bump.txt b/infra/scripts/release/files_to_bump.txt index 2c3eece6bef..a1e2d29623a 100644 --- a/infra/scripts/release/files_to_bump.txt +++ b/infra/scripts/release/files_to_bump.txt @@ -1,13 +1,12 @@ -infra/charts/feast/requirements.yaml -infra/charts/feast/Chart.yaml -infra/charts/feast/charts/transformation-service/Chart.yaml -infra/charts/feast/charts/transformation-service/README.md -infra/charts/feast/charts/transformation-service/values.yaml -infra/charts/feast/charts/feature-server/Chart.yaml -infra/charts/feast/charts/feature-server/README.md -infra/charts/feast/charts/feature-server/values.yaml -infra/charts/feast/README.md -infra/charts/feast-python-server/Chart.yaml -infra/charts/feast-python-server/README.md -java/pom.xml -ui/package.json \ No newline at end of file +infra/charts/feast/requirements.yaml 4 9 +infra/charts/feast/Chart.yaml 4 +infra/charts/feast/charts/transformation-service/Chart.yaml 4 5 +infra/charts/feast/charts/transformation-service/README.md 3 16 +infra/charts/feast/charts/transformation-service/values.yaml 8 +infra/charts/feast/charts/feature-server/Chart.yaml 4 5 +infra/charts/feast/charts/feature-server/README.md 3 20 +infra/charts/feast/charts/feature-server/values.yaml 8 +infra/charts/feast/README.md 11 58 59 +infra/charts/feast-python-server/Chart.yaml 5 +infra/charts/feast-python-server/README.md 3 +java/pom.xml 41 diff --git a/java/pom.xml b/java/pom.xml index 3b794d97ed0..5609751a926 100644 --- a/java/pom.xml +++ b/java/pom.xml @@ -38,7 +38,7 @@ - 0.21.0 + 0.21.1 https://github.com/feast-dev/feast UTF-8 diff --git a/sdk/python/feast/infra/feature_servers/aws_lambda/Dockerfile b/sdk/python/feast/infra/feature_servers/aws_lambda/Dockerfile index fe997afcae4..929227a8106 100644 --- a/sdk/python/feast/infra/feature_servers/aws_lambda/Dockerfile +++ b/sdk/python/feast/infra/feature_servers/aws_lambda/Dockerfile @@ -1,5 +1,8 @@ FROM public.ecr.aws/lambda/python:3.9 +RUN yum install -y git + + # Copy app handler code COPY sdk/python/feast/infra/feature_servers/aws_lambda/app.py ${LAMBDA_TASK_ROOT} @@ -16,7 +19,7 @@ COPY README.md README.md # git dir to infer the version of feast we're installing. # https://github.com/pypa/setuptools_scm#usage-from-docker # I think it also assumes that this dockerfile is being built from the root of the directory. -RUN SETUPTOOLS_SCM_PRETEND_VERSION=1 pip3 install --no-cache-dir -e '.[aws,redis]' +RUN --mount=source=.git,target=.git,type=bind pip3 install --no-cache-dir -e '.[aws,redis]' RUN pip3 install -r sdk/python/feast/infra/feature_servers/aws_lambda/requirements.txt --target "${LAMBDA_TASK_ROOT}" # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) diff --git a/sdk/python/feast/infra/feature_servers/gcp_cloudrun/Dockerfile b/sdk/python/feast/infra/feature_servers/gcp_cloudrun/Dockerfile index e0e16f6a14f..6e3ff424eab 100644 --- a/sdk/python/feast/infra/feature_servers/gcp_cloudrun/Dockerfile +++ b/sdk/python/feast/infra/feature_servers/gcp_cloudrun/Dockerfile @@ -1,5 +1,7 @@ FROM python:3.9-slim +RUN apt-get update && apt-get install -y git + # Allow statements and log messages to immediately appear in the Knative logs ENV PYTHONUNBUFFERED True @@ -18,7 +20,7 @@ COPY pyproject.toml pyproject.toml COPY README.md ./README.md # Install production dependencies. -RUN pip install --no-cache-dir \ +RUN --mount=source=.git,target=.git,type=bind pip install --no-cache-dir \ -e '.[gcp,redis]' \ -r ./sdk/python/feast/infra/feature_servers/gcp_cloudrun/requirements.txt diff --git a/sdk/python/feast/infra/transformation_servers/Dockerfile b/sdk/python/feast/infra/transformation_servers/Dockerfile index ff276c7a70d..5e77144757a 100644 --- a/sdk/python/feast/infra/transformation_servers/Dockerfile +++ b/sdk/python/feast/infra/transformation_servers/Dockerfile @@ -1,4 +1,6 @@ -FROM python:3.7-slim +FROM python:3.9-slim + +RUN apt-get update && apt-get install -y git # Copy app handler code COPY sdk/python/feast/infra/transformation_servers/app.py app.py @@ -13,7 +15,7 @@ COPY README.md README.md # Install dependencies -RUN pip3 install -e '.' +RUN --mount=source=.git,target=.git,type=bind pip3 install --no-cache-dir -e '.' # Start feature transformation server CMD [ "python", "app.py" ] diff --git a/sdk/python/feast/stream_feature_view.py b/sdk/python/feast/stream_feature_view.py index 1c51b94a7cf..cfb3f63d7df 100644 --- a/sdk/python/feast/stream_feature_view.py +++ b/sdk/python/feast/stream_feature_view.py @@ -7,10 +7,7 @@ from feast.field import Field from feast.protos.feast.core.DataSource_pb2 import DataSource as DataSourceProto -SUPPORTED_STREAM_SOURCES = { - "KafkaSource", - "KinesisSource", -} +SUPPORTED_STREAM_SOURCES = {"KafkaSource", "KinesisSource", "PushSource"} class StreamFeatureView(FeatureView): diff --git a/sdk/python/feast/ui/README.md b/sdk/python/feast/ui/README.md index ea5243ca4c6..0c11dcf134c 100644 --- a/sdk/python/feast/ui/README.md +++ b/sdk/python/feast/ui/README.md @@ -1,6 +1,6 @@ # Example Feast UI App -This is an example React App that imports the Feast UI module and relies on a "/projects-list" endpoint to get projects. +This is an example React App that imports the Feast UI module. See the module import in `src/index.js`. The main change this implements on top of a vanilla create-react-app is adding: @@ -11,23 +11,15 @@ import "@feast-dev/feast-ui/dist/feast-ui.css"; ReactDOM.render( - { - return res.json(); - }) - }} - /> + , document.getElementById("root") ); ``` -It is used by the `feast ui` command to scaffold a local UI server. The feast python package bundles in resources produced from `npm run build --omit=dev +It is used by the `feast ui` command to scaffold a local UI server. The feast python package bundles in resources produced from `npm run build --omit=dev.` + +The `feast ui` command will generate the necessary `projects-list.json` file and initialize it for the UI to read. **Note**: yarn start will not work on this because of the above dependency. diff --git a/sdk/python/feast/ui/public/projects-list.json b/sdk/python/feast/ui/public/projects-list.json new file mode 100644 index 00000000000..b6e79bda5b8 --- /dev/null +++ b/sdk/python/feast/ui/public/projects-list.json @@ -0,0 +1,11 @@ +{ + "projects": [ + { + "name": "Project", + "description": "Test project", + "id": "project_id", + "registryPath": "http://0.0.0.0:8888/registry" + } + ] + } + \ No newline at end of file diff --git a/sdk/python/feast/ui/src/index.tsx b/sdk/python/feast/ui/src/index.tsx index 4191de17a06..9ddacc9b48a 100644 --- a/sdk/python/feast/ui/src/index.tsx +++ b/sdk/python/feast/ui/src/index.tsx @@ -1,22 +1,12 @@ -import React from 'react'; +import React from "react"; import ReactDOM from "react-dom"; -import './index.css'; +import "./index.css"; import FeastUI from "@feast-dev/feast-ui"; import "@feast-dev/feast-ui/dist/feast-ui.css"; ReactDOM.render( - { - return res.json(); - }) - }} - /> + , document.getElementById("root") -); \ No newline at end of file +); diff --git a/sdk/python/feast/ui_server.py b/sdk/python/feast/ui_server.py index cc546f53716..5206dd5161e 100644 --- a/sdk/python/feast/ui_server.py +++ b/sdk/python/feast/ui_server.py @@ -16,9 +16,9 @@ def get_app( get_registry_dump: Callable, project_id: str, registry_ttl_secs: int, + host: str, + port: int, ): - ui_dir = pkg_resources.resource_filename(__name__, "ui/build/") - app = FastAPI() app.add_middleware( @@ -53,25 +53,24 @@ def shutdown_event(): async_refresh() - @app.get("/registry") - def read_registry(): - return json.loads(registry_json) - - # Generate projects-list json that points to the current repo's project - # TODO(adchia): Enable users to also add project name + description fields in feature_store.yaml - @app.get("/projects-list") - def projects_list(): - projects = { + ui_dir = pkg_resources.resource_filename(__name__, "ui/build/") + # Initialize with the projects-list.json file + with open(ui_dir + "projects-list.json", mode="w") as f: + projects_dict = { "projects": [ { "name": "Project", "description": "Test project", "id": project_id, - "registryPath": "http://0.0.0.0:8888/registry", + "registryPath": f"http://{host}:{port}/registry", } ] } - return projects + f.write(json.dumps(projects_dict)) + + @app.get("/registry") + def read_registry(): + return json.loads(registry_json) # For all other paths (such as paths that would otherwise be handled by react router), pass to React @app.api_route("/p/{path_name:path}", methods=["GET"]) @@ -98,5 +97,5 @@ def start_server( project_id: str, registry_ttl_sec: int, ): - app = get_app(store, get_registry_dump, project_id, registry_ttl_sec) + app = get_app(store, get_registry_dump, project_id, registry_ttl_sec, host, port) uvicorn.run(app, host=host, port=port) diff --git a/sdk/python/requirements/py3.10-ci-requirements.txt b/sdk/python/requirements/py3.10-ci-requirements.txt index 0655eb9c769..120f0d1158e 100644 --- a/sdk/python/requirements/py3.10-ci-requirements.txt +++ b/sdk/python/requirements/py3.10-ci-requirements.txt @@ -12,17 +12,23 @@ adal==1.2.7 # msrestazure adlfs==0.5.9 # via feast (setup.py) +aiobotocore==2.1.2 + # via s3fs aiohttp==3.8.1 # via # adlfs + # aiobotocore # gcsfs + # s3fs +aioitertools==0.10.0 + # via aiobotocore aiosignal==1.2.0 # via aiohttp alabaster==0.7.12 # via sphinx altair==4.2.0 # via great-expectations -anyio==3.5.0 +anyio==3.6.1 # via # starlette # watchgod @@ -52,7 +58,7 @@ attrs==21.4.0 # pytest avro==1.10.0 # via feast (setup.py) -azure-core==1.23.1 +azure-core==1.24.0 # via # adlfs # azure-identity @@ -61,7 +67,7 @@ azure-datalake-store==0.0.52 # via adlfs azure-identity==1.10.0 # via adlfs -azure-storage-blob==12.11.0 +azure-storage-blob==12.12.0 # via adlfs babel==2.10.1 # via sphinx @@ -69,12 +75,13 @@ backcall==0.2.0 # via ipython black==19.10b0 # via feast (setup.py) -boto3==1.22.8 +boto3==1.20.23 # via # feast (setup.py) # moto -botocore==1.25.8 +botocore==1.23.24 # via + # aiobotocore # boto3 # moto # s3transfer @@ -115,7 +122,7 @@ colorama==0.4.4 # via # feast (setup.py) # great-expectations -coverage[toml]==6.3.2 +coverage[toml]==6.3.3 # via pytest-cov cryptography==3.4.8 # via @@ -158,7 +165,7 @@ execnet==1.9.0 # via pytest-xdist executing==0.8.3 # via stack-data -fastapi==0.76.0 +fastapi==0.78.0 # via feast (setup.py) fastavro==1.4.11 # via @@ -166,7 +173,7 @@ fastavro==1.4.11 # pandavro fastjsonschema==2.15.3 # via nbformat -filelock==3.6.0 +filelock==3.7.0 # via virtualenv firebase-admin==4.5.2 # via feast (setup.py) @@ -176,12 +183,13 @@ frozenlist==1.3.0 # via # aiohttp # aiosignal -fsspec==2022.3.0 +fsspec==2022.1.0 # via # adlfs # dask # gcsfs -gcsfs==2022.3.0 + # s3fs +gcsfs==0.8.0 # via feast (setup.py) google-api-core[grpc]==1.31.5 # via @@ -227,7 +235,6 @@ google-cloud-storage==1.40.0 # via # feast (setup.py) # firebase-admin - # gcsfs google-crc32c==1.3.0 # via google-resumable-media google-resumable-media==1.3.3 @@ -241,7 +248,7 @@ googleapis-common-protos==1.52.0 # tensorflow-metadata great-expectations==0.14.13 # via feast (setup.py) -grpcio==1.46.0 +grpcio==1.46.1 # via # feast (setup.py) # google-api-core @@ -249,7 +256,7 @@ grpcio==1.46.0 # grpcio-reflection # grpcio-testing # grpcio-tools -grpcio-reflection==1.46.0 +grpcio-reflection==1.46.1 # via feast (setup.py) grpcio-testing==1.44.0 # via feast (setup.py) @@ -296,7 +303,7 @@ jinja2==3.0.3 # great-expectations # moto # sphinx -jmespath==1.0.0 +jmespath==0.10.0 # via # boto3 # botocore @@ -330,7 +337,7 @@ mmh3==3.0.0 # via feast (setup.py) mock==2.0.0 # via feast (setup.py) -moto==3.1.7 +moto==3.1.9 # via feast (setup.py) msal==1.17.0 # via @@ -409,7 +416,7 @@ pexpect==4.8.0 # via ipython pickleshare==0.7.5 # via ipython -pip-tools==6.6.0 +pip-tools==6.6.1 # via feast (setup.py) platformdirs==2.5.2 # via virtualenv @@ -486,7 +493,7 @@ pygments==2.12.0 # via # ipython # sphinx -pyjwt[crypto]==2.3.0 +pyjwt[crypto]==2.4.0 # via # adal # msal @@ -591,6 +598,8 @@ rsa==4.8 # via google-auth ruamel-yaml==0.17.17 # via great-expectations +s3fs==2022.1.0 + # via feast (setup.py) s3transfer==0.5.2 # via boto3 scipy==1.8.0 @@ -639,17 +648,17 @@ sphinxcontrib-serializinghtml==1.1.5 # via sphinx stack-data==0.2.0 # via ipython -starlette==0.18.0 +starlette==0.19.1 # via fastapi tabulate==0.8.9 # via feast (setup.py) tenacity==8.0.1 # via feast (setup.py) -tensorflow-metadata==1.7.0 +tensorflow-metadata==1.8.0 # via feast (setup.py) termcolor==1.1.0 # via great-expectations -testcontainers==3.5.3 +testcontainers==3.5.4 # via feast (setup.py) thriftpy2==0.4.14 # via happybase @@ -674,7 +683,7 @@ tqdm==4.64.0 # via # feast (setup.py) # great-expectations -traitlets==5.1.1 +traitlets==5.2.1.post0 # via # ipython # jupyter-core @@ -684,23 +693,23 @@ trino==0.313.0 # via feast (setup.py) typed-ast==1.5.3 # via black -types-protobuf==3.19.18 +types-protobuf==3.19.20 # via # feast (setup.py) # mypy-protobuf -types-python-dateutil==2.8.14 +types-python-dateutil==2.8.15 # via feast (setup.py) -types-pytz==2021.3.7 +types-pytz==2021.3.8 # via feast (setup.py) types-pyyaml==6.0.7 # via feast (setup.py) -types-redis==4.2.1 +types-redis==4.2.3 # via feast (setup.py) types-requests==2.27.25 # via feast (setup.py) types-setuptools==57.4.14 # via feast (setup.py) -types-tabulate==0.8.8 +types-tabulate==0.8.9 # via feast (setup.py) types-urllib3==1.26.14 # via types-requests @@ -714,12 +723,13 @@ tzdata==2022.1 # via pytz-deprecation-shim tzlocal==4.2 # via great-expectations +ujson==5.2.0 + # via gcsfs uritemplate==4.1.1 # via google-api-python-client urllib3==1.26.9 # via # botocore - # feast (setup.py) # great-expectations # minio # requests @@ -744,9 +754,10 @@ wheel==0.37.1 # via pip-tools wrapt==1.14.1 # via + # aiobotocore # deprecated # testcontainers -xmltodict==0.12.0 +xmltodict==0.13.0 # via moto yarl==1.7.2 # via aiohttp diff --git a/sdk/python/requirements/py3.10-requirements.txt b/sdk/python/requirements/py3.10-requirements.txt index 369c3b8e60b..725b17f8caf 100644 --- a/sdk/python/requirements/py3.10-requirements.txt +++ b/sdk/python/requirements/py3.10-requirements.txt @@ -6,7 +6,7 @@ # absl-py==1.0.0 # via tensorflow-metadata -anyio==3.5.0 +anyio==3.6.1 # via # starlette # watchgod @@ -14,7 +14,7 @@ asgiref==3.5.1 # via uvicorn attrs==21.4.0 # via jsonschema -cachetools==4.2.4 +cachetools==5.1.0 # via google-auth certifi==2021.10.8 # via requests @@ -32,7 +32,7 @@ dask==2022.1.1 # via feast (setup.py) dill==0.3.4 # via feast (setup.py) -fastapi==0.76.0 +fastapi==0.78.0 # via feast (setup.py) fastavro==1.4.11 # via @@ -40,20 +40,20 @@ fastavro==1.4.11 # pandavro fsspec==2022.3.0 # via dask -google-api-core==1.31.5 +google-api-core==2.7.3 # via feast (setup.py) -google-auth==1.35.0 +google-auth==2.6.6 # via google-api-core googleapis-common-protos==1.52.0 # via # feast (setup.py) # google-api-core # tensorflow-metadata -grpcio==1.46.0 +grpcio==1.46.1 # via # feast (setup.py) # grpcio-reflection -grpcio-reflection==1.46.0 +grpcio-reflection==1.46.1 # via feast (setup.py) h11==0.13.0 # via uvicorn @@ -80,9 +80,7 @@ numpy==1.21.6 # pandavro # pyarrow packaging==21.3 - # via - # dask - # google-api-core + # via dask pandas==1.4.2 # via # feast (setup.py) @@ -113,7 +111,7 @@ pydantic==1.9.0 # via # fastapi # feast (setup.py) -pyparsing==3.0.8 +pyparsing==3.0.9 # via packaging pyrsistent==0.18.1 # via jsonschema @@ -122,9 +120,7 @@ python-dateutil==2.8.2 python-dotenv==0.20.0 # via uvicorn pytz==2022.1 - # via - # google-api-core - # pandas + # via pandas pyyaml==6.0 # via # dask @@ -137,20 +133,19 @@ rsa==4.8 six==1.16.0 # via # absl-py - # google-api-core # google-auth # grpcio # pandavro # python-dateutil sniffio==1.2.0 # via anyio -starlette==0.18.0 +starlette==0.19.1 # via fastapi tabulate==0.8.9 # via feast (setup.py) tenacity==8.0.1 # via feast (setup.py) -tensorflow-metadata==1.7.0 +tensorflow-metadata==1.8.0 # via feast (setup.py) toml==0.10.2 # via feast (setup.py) @@ -172,6 +167,3 @@ watchgod==0.8.2 # via uvicorn websockets==10.3 # via uvicorn - -# The following packages are considered to be unsafe in a requirements file: -# setuptools diff --git a/sdk/python/requirements/py3.7-ci-requirements.txt b/sdk/python/requirements/py3.7-ci-requirements.txt index 4232f5b2941..b445f86ea06 100644 --- a/sdk/python/requirements/py3.7-ci-requirements.txt +++ b/sdk/python/requirements/py3.7-ci-requirements.txt @@ -12,17 +12,23 @@ adal==1.2.7 # msrestazure adlfs==0.5.9 # via feast (setup.py) +aiobotocore==2.1.2 + # via s3fs aiohttp==3.8.1 # via # adlfs + # aiobotocore # gcsfs + # s3fs +aioitertools==0.10.0 + # via aiobotocore aiosignal==1.2.0 # via aiohttp alabaster==0.7.12 # via sphinx altair==4.2.0 # via great-expectations -anyio==3.5.0 +anyio==3.6.1 # via # starlette # watchgod @@ -52,7 +58,7 @@ attrs==21.4.0 # pytest avro==1.10.0 # via feast (setup.py) -azure-core==1.23.1 +azure-core==1.24.0 # via # adlfs # azure-identity @@ -61,7 +67,7 @@ azure-datalake-store==0.0.52 # via adlfs azure-identity==1.10.0 # via adlfs -azure-storage-blob==12.11.0 +azure-storage-blob==12.12.0 # via adlfs babel==2.10.1 # via sphinx @@ -73,12 +79,13 @@ backports-zoneinfo==0.2.1 # tzlocal black==19.10b0 # via feast (setup.py) -boto3==1.22.8 +boto3==1.20.23 # via # feast (setup.py) # moto -botocore==1.25.8 +botocore==1.23.24 # via + # aiobotocore # boto3 # moto # s3transfer @@ -119,7 +126,7 @@ colorama==0.4.4 # via # feast (setup.py) # great-expectations -coverage[toml]==6.3.2 +coverage[toml]==6.3.3 # via pytest-cov cryptography==3.4.8 # via @@ -160,7 +167,7 @@ entrypoints==0.4 # via altair execnet==1.9.0 # via pytest-xdist -fastapi==0.76.0 +fastapi==0.78.0 # via feast (setup.py) fastavro==1.4.11 # via @@ -168,7 +175,7 @@ fastavro==1.4.11 # pandavro fastjsonschema==2.15.3 # via nbformat -filelock==3.6.0 +filelock==3.7.0 # via virtualenv firebase-admin==4.5.2 # via feast (setup.py) @@ -178,12 +185,13 @@ frozenlist==1.3.0 # via # aiohttp # aiosignal -fsspec==2022.3.0 +fsspec==2022.1.0 # via # adlfs # dask # gcsfs -gcsfs==2022.3.0 + # s3fs +gcsfs==0.8.0 # via feast (setup.py) google-api-core[grpc]==1.31.5 # via @@ -229,7 +237,6 @@ google-cloud-storage==1.40.0 # via # feast (setup.py) # firebase-admin - # gcsfs google-crc32c==1.3.0 # via google-resumable-media google-resumable-media==1.3.3 @@ -243,7 +250,7 @@ googleapis-common-protos==1.52.0 # tensorflow-metadata great-expectations==0.14.13 # via feast (setup.py) -grpcio==1.46.0 +grpcio==1.46.1 # via # feast (setup.py) # google-api-core @@ -251,7 +258,7 @@ grpcio==1.46.0 # grpcio-reflection # grpcio-testing # grpcio-tools -grpcio-reflection==1.46.0 +grpcio-reflection==1.46.1 # via feast (setup.py) grpcio-testing==1.44.0 # via feast (setup.py) @@ -312,7 +319,7 @@ jinja2==3.0.3 # great-expectations # moto # sphinx -jmespath==1.0.0 +jmespath==0.10.0 # via # boto3 # botocore @@ -346,7 +353,7 @@ mmh3==3.0.0 # via feast (setup.py) mock==2.0.0 # via feast (setup.py) -moto==3.1.7 +moto==3.1.9 # via feast (setup.py) msal==1.17.0 # via @@ -425,7 +432,7 @@ pexpect==4.8.0 # via ipython pickleshare==0.7.5 # via ipython -pip-tools==6.6.0 +pip-tools==6.6.1 # via feast (setup.py) platformdirs==2.5.2 # via virtualenv @@ -500,7 +507,7 @@ pygments==2.12.0 # via # ipython # sphinx -pyjwt[crypto]==2.3.0 +pyjwt[crypto]==2.4.0 # via # adal # msal @@ -607,6 +614,8 @@ ruamel-yaml==0.17.17 # via great-expectations ruamel-yaml-clib==0.2.6 # via ruamel-yaml +s3fs==2022.1.0 + # via feast (setup.py) s3transfer==0.5.2 # via boto3 scipy==1.7.3 @@ -653,17 +662,17 @@ sphinxcontrib-qthelp==1.0.3 # via sphinx sphinxcontrib-serializinghtml==1.1.5 # via sphinx -starlette==0.18.0 +starlette==0.19.1 # via fastapi tabulate==0.8.9 # via feast (setup.py) tenacity==8.0.1 # via feast (setup.py) -tensorflow-metadata==1.7.0 +tensorflow-metadata==1.8.0 # via feast (setup.py) termcolor==1.1.0 # via great-expectations -testcontainers==3.5.3 +testcontainers==3.5.4 # via feast (setup.py) thriftpy2==0.4.14 # via happybase @@ -688,7 +697,7 @@ tqdm==4.64.0 # via # feast (setup.py) # great-expectations -traitlets==5.1.1 +traitlets==5.2.1.post0 # via # ipython # jupyter-core @@ -700,29 +709,30 @@ typed-ast==1.5.3 # via # black # mypy -types-protobuf==3.19.18 +types-protobuf==3.19.20 # via # feast (setup.py) # mypy-protobuf -types-python-dateutil==2.8.14 +types-python-dateutil==2.8.15 # via feast (setup.py) -types-pytz==2021.3.7 +types-pytz==2021.3.8 # via feast (setup.py) types-pyyaml==6.0.7 # via feast (setup.py) -types-redis==4.2.1 +types-redis==4.2.3 # via feast (setup.py) types-requests==2.27.25 # via feast (setup.py) types-setuptools==57.4.14 # via feast (setup.py) -types-tabulate==0.8.8 +types-tabulate==0.8.9 # via feast (setup.py) types-urllib3==1.26.14 # via types-requests typing-extensions==4.2.0 # via # aiohttp + # aioitertools # anyio # asgiref # async-timeout @@ -741,12 +751,13 @@ tzdata==2022.1 # via pytz-deprecation-shim tzlocal==4.2 # via great-expectations +ujson==5.2.0 + # via gcsfs uritemplate==4.1.1 # via google-api-python-client urllib3==1.26.9 # via # botocore - # feast (setup.py) # great-expectations # minio # requests @@ -771,9 +782,10 @@ wheel==0.37.1 # via pip-tools wrapt==1.14.1 # via + # aiobotocore # deprecated # testcontainers -xmltodict==0.12.0 +xmltodict==0.13.0 # via moto yarl==1.7.2 # via aiohttp diff --git a/sdk/python/requirements/py3.7-requirements.txt b/sdk/python/requirements/py3.7-requirements.txt index dfdd86e39a1..b0e1511d9c6 100644 --- a/sdk/python/requirements/py3.7-requirements.txt +++ b/sdk/python/requirements/py3.7-requirements.txt @@ -6,7 +6,7 @@ # absl-py==1.0.0 # via tensorflow-metadata -anyio==3.5.0 +anyio==3.6.1 # via # starlette # watchgod @@ -14,7 +14,7 @@ asgiref==3.5.1 # via uvicorn attrs==21.4.0 # via jsonschema -cachetools==4.2.4 +cachetools==5.1.0 # via google-auth certifi==2021.10.8 # via requests @@ -32,7 +32,7 @@ dask==2022.1.1 # via feast (setup.py) dill==0.3.4 # via feast (setup.py) -fastapi==0.76.0 +fastapi==0.78.0 # via feast (setup.py) fastavro==1.4.11 # via @@ -40,20 +40,20 @@ fastavro==1.4.11 # pandavro fsspec==2022.3.0 # via dask -google-api-core==1.31.5 +google-api-core==2.7.3 # via feast (setup.py) -google-auth==1.35.0 +google-auth==2.6.6 # via google-api-core googleapis-common-protos==1.52.0 # via # feast (setup.py) # google-api-core # tensorflow-metadata -grpcio==1.46.0 +grpcio==1.46.1 # via # feast (setup.py) # grpcio-reflection -grpcio-reflection==1.46.0 +grpcio-reflection==1.46.1 # via feast (setup.py) h11==0.13.0 # via uvicorn @@ -86,9 +86,7 @@ numpy==1.21.6 # pandavro # pyarrow packaging==21.3 - # via - # dask - # google-api-core + # via dask pandas==1.3.5 # via # feast (setup.py) @@ -119,7 +117,7 @@ pydantic==1.9.0 # via # fastapi # feast (setup.py) -pyparsing==3.0.8 +pyparsing==3.0.9 # via packaging pyrsistent==0.18.1 # via jsonschema @@ -128,9 +126,7 @@ python-dateutil==2.8.2 python-dotenv==0.20.0 # via uvicorn pytz==2022.1 - # via - # google-api-core - # pandas + # via pandas pyyaml==6.0 # via # dask @@ -143,20 +139,19 @@ rsa==4.8 six==1.16.0 # via # absl-py - # google-api-core # google-auth # grpcio # pandavro # python-dateutil sniffio==1.2.0 # via anyio -starlette==0.18.0 +starlette==0.19.1 # via fastapi tabulate==0.8.9 # via feast (setup.py) tenacity==8.0.1 # via feast (setup.py) -tensorflow-metadata==1.7.0 +tensorflow-metadata==1.8.0 # via feast (setup.py) toml==0.10.2 # via feast (setup.py) @@ -190,6 +185,3 @@ zipp==3.8.0 # via # importlib-metadata # importlib-resources - -# The following packages are considered to be unsafe in a requirements file: -# setuptools diff --git a/sdk/python/requirements/py3.8-ci-requirements.txt b/sdk/python/requirements/py3.8-ci-requirements.txt index db3eca4b538..202f3ac2c71 100644 --- a/sdk/python/requirements/py3.8-ci-requirements.txt +++ b/sdk/python/requirements/py3.8-ci-requirements.txt @@ -12,17 +12,23 @@ adal==1.2.7 # msrestazure adlfs==0.5.9 # via feast (setup.py) +aiobotocore==2.1.2 + # via s3fs aiohttp==3.8.1 # via # adlfs + # aiobotocore # gcsfs + # s3fs +aioitertools==0.10.0 + # via aiobotocore aiosignal==1.2.0 # via aiohttp alabaster==0.7.12 # via sphinx altair==4.2.0 # via great-expectations -anyio==3.5.0 +anyio==3.6.1 # via # starlette # watchgod @@ -52,7 +58,7 @@ attrs==21.4.0 # pytest avro==1.10.0 # via feast (setup.py) -azure-core==1.23.1 +azure-core==1.24.0 # via # adlfs # azure-identity @@ -61,7 +67,7 @@ azure-datalake-store==0.0.52 # via adlfs azure-identity==1.10.0 # via adlfs -azure-storage-blob==12.11.0 +azure-storage-blob==12.12.0 # via adlfs babel==2.10.1 # via sphinx @@ -73,12 +79,13 @@ backports-zoneinfo==0.2.1 # tzlocal black==19.10b0 # via feast (setup.py) -boto3==1.22.8 +boto3==1.20.23 # via # feast (setup.py) # moto -botocore==1.25.8 +botocore==1.23.24 # via + # aiobotocore # boto3 # moto # s3transfer @@ -119,7 +126,7 @@ colorama==0.4.4 # via # feast (setup.py) # great-expectations -coverage[toml]==6.3.2 +coverage[toml]==6.3.3 # via pytest-cov cryptography==3.4.8 # via @@ -162,7 +169,7 @@ execnet==1.9.0 # via pytest-xdist executing==0.8.3 # via stack-data -fastapi==0.76.0 +fastapi==0.78.0 # via feast (setup.py) fastavro==1.4.11 # via @@ -170,7 +177,7 @@ fastavro==1.4.11 # pandavro fastjsonschema==2.15.3 # via nbformat -filelock==3.6.0 +filelock==3.7.0 # via virtualenv firebase-admin==4.5.2 # via feast (setup.py) @@ -180,12 +187,13 @@ frozenlist==1.3.0 # via # aiohttp # aiosignal -fsspec==2022.3.0 +fsspec==2022.1.0 # via # adlfs # dask # gcsfs -gcsfs==2022.3.0 + # s3fs +gcsfs==0.8.0 # via feast (setup.py) google-api-core[grpc]==1.31.5 # via @@ -231,7 +239,6 @@ google-cloud-storage==1.40.0 # via # feast (setup.py) # firebase-admin - # gcsfs google-crc32c==1.3.0 # via google-resumable-media google-resumable-media==1.3.3 @@ -245,7 +252,7 @@ googleapis-common-protos==1.52.0 # tensorflow-metadata great-expectations==0.14.13 # via feast (setup.py) -grpcio==1.46.0 +grpcio==1.46.1 # via # feast (setup.py) # google-api-core @@ -253,7 +260,7 @@ grpcio==1.46.0 # grpcio-reflection # grpcio-testing # grpcio-tools -grpcio-reflection==1.46.0 +grpcio-reflection==1.46.1 # via feast (setup.py) grpcio-testing==1.44.0 # via feast (setup.py) @@ -302,7 +309,7 @@ jinja2==3.0.3 # great-expectations # moto # sphinx -jmespath==1.0.0 +jmespath==0.10.0 # via # boto3 # botocore @@ -336,7 +343,7 @@ mmh3==3.0.0 # via feast (setup.py) mock==2.0.0 # via feast (setup.py) -moto==3.1.7 +moto==3.1.9 # via feast (setup.py) msal==1.17.0 # via @@ -415,7 +422,7 @@ pexpect==4.8.0 # via ipython pickleshare==0.7.5 # via ipython -pip-tools==6.6.0 +pip-tools==6.6.1 # via feast (setup.py) platformdirs==2.5.2 # via virtualenv @@ -492,7 +499,7 @@ pygments==2.12.0 # via # ipython # sphinx -pyjwt[crypto]==2.3.0 +pyjwt[crypto]==2.4.0 # via # adal # msal @@ -599,6 +606,8 @@ ruamel-yaml==0.17.17 # via great-expectations ruamel-yaml-clib==0.2.6 # via ruamel-yaml +s3fs==2022.1.0 + # via feast (setup.py) s3transfer==0.5.2 # via boto3 scipy==1.8.0 @@ -647,17 +656,17 @@ sphinxcontrib-serializinghtml==1.1.5 # via sphinx stack-data==0.2.0 # via ipython -starlette==0.18.0 +starlette==0.19.1 # via fastapi tabulate==0.8.9 # via feast (setup.py) tenacity==8.0.1 # via feast (setup.py) -tensorflow-metadata==1.7.0 +tensorflow-metadata==1.8.0 # via feast (setup.py) termcolor==1.1.0 # via great-expectations -testcontainers==3.5.3 +testcontainers==3.5.4 # via feast (setup.py) thriftpy2==0.4.14 # via happybase @@ -682,7 +691,7 @@ tqdm==4.64.0 # via # feast (setup.py) # great-expectations -traitlets==5.1.1 +traitlets==5.2.1.post0 # via # ipython # jupyter-core @@ -692,28 +701,29 @@ trino==0.313.0 # via feast (setup.py) typed-ast==1.5.3 # via black -types-protobuf==3.19.18 +types-protobuf==3.19.20 # via # feast (setup.py) # mypy-protobuf -types-python-dateutil==2.8.14 +types-python-dateutil==2.8.15 # via feast (setup.py) -types-pytz==2021.3.7 +types-pytz==2021.3.8 # via feast (setup.py) types-pyyaml==6.0.7 # via feast (setup.py) -types-redis==4.2.1 +types-redis==4.2.3 # via feast (setup.py) types-requests==2.27.25 # via feast (setup.py) types-setuptools==57.4.14 # via feast (setup.py) -types-tabulate==0.8.8 +types-tabulate==0.8.9 # via feast (setup.py) types-urllib3==1.26.14 # via types-requests typing-extensions==4.2.0 # via + # aioitertools # azure-core # great-expectations # mypy @@ -723,12 +733,13 @@ tzdata==2022.1 # via pytz-deprecation-shim tzlocal==4.2 # via great-expectations +ujson==5.2.0 + # via gcsfs uritemplate==4.1.1 # via google-api-python-client urllib3==1.26.9 # via # botocore - # feast (setup.py) # great-expectations # minio # requests @@ -753,9 +764,10 @@ wheel==0.37.1 # via pip-tools wrapt==1.14.1 # via + # aiobotocore # deprecated # testcontainers -xmltodict==0.12.0 +xmltodict==0.13.0 # via moto yarl==1.7.2 # via aiohttp diff --git a/sdk/python/requirements/py3.8-requirements.txt b/sdk/python/requirements/py3.8-requirements.txt index 9e47d0e831d..98e1c6a76a9 100644 --- a/sdk/python/requirements/py3.8-requirements.txt +++ b/sdk/python/requirements/py3.8-requirements.txt @@ -6,7 +6,7 @@ # absl-py==1.0.0 # via tensorflow-metadata -anyio==3.5.0 +anyio==3.6.1 # via # starlette # watchgod @@ -14,7 +14,7 @@ asgiref==3.5.1 # via uvicorn attrs==21.4.0 # via jsonschema -cachetools==4.2.4 +cachetools==5.1.0 # via google-auth certifi==2021.10.8 # via requests @@ -32,7 +32,7 @@ dask==2022.1.1 # via feast (setup.py) dill==0.3.4 # via feast (setup.py) -fastapi==0.76.0 +fastapi==0.78.0 # via feast (setup.py) fastavro==1.4.11 # via @@ -40,20 +40,20 @@ fastavro==1.4.11 # pandavro fsspec==2022.3.0 # via dask -google-api-core==1.31.5 +google-api-core==2.7.3 # via feast (setup.py) -google-auth==1.35.0 +google-auth==2.6.6 # via google-api-core googleapis-common-protos==1.52.0 # via # feast (setup.py) # google-api-core # tensorflow-metadata -grpcio==1.46.0 +grpcio==1.46.1 # via # feast (setup.py) # grpcio-reflection -grpcio-reflection==1.46.0 +grpcio-reflection==1.46.1 # via feast (setup.py) h11==0.13.0 # via uvicorn @@ -82,9 +82,7 @@ numpy==1.21.6 # pandavro # pyarrow packaging==21.3 - # via - # dask - # google-api-core + # via dask pandas==1.4.2 # via # feast (setup.py) @@ -115,7 +113,7 @@ pydantic==1.9.0 # via # fastapi # feast (setup.py) -pyparsing==3.0.8 +pyparsing==3.0.9 # via packaging pyrsistent==0.18.1 # via jsonschema @@ -124,9 +122,7 @@ python-dateutil==2.8.2 python-dotenv==0.20.0 # via uvicorn pytz==2022.1 - # via - # google-api-core - # pandas + # via pandas pyyaml==6.0 # via # dask @@ -139,20 +135,19 @@ rsa==4.8 six==1.16.0 # via # absl-py - # google-api-core # google-auth # grpcio # pandavro # python-dateutil sniffio==1.2.0 # via anyio -starlette==0.18.0 +starlette==0.19.1 # via fastapi tabulate==0.8.9 # via feast (setup.py) tenacity==8.0.1 # via feast (setup.py) -tensorflow-metadata==1.7.0 +tensorflow-metadata==1.8.0 # via feast (setup.py) toml==0.10.2 # via feast (setup.py) @@ -178,6 +173,3 @@ websockets==10.3 # via uvicorn zipp==3.8.0 # via importlib-resources - -# The following packages are considered to be unsafe in a requirements file: -# setuptools diff --git a/sdk/python/requirements/py3.9-ci-requirements.txt b/sdk/python/requirements/py3.9-ci-requirements.txt index 4a96dc6fd2c..d3ecdc34bf3 100644 --- a/sdk/python/requirements/py3.9-ci-requirements.txt +++ b/sdk/python/requirements/py3.9-ci-requirements.txt @@ -12,17 +12,23 @@ adal==1.2.7 # msrestazure adlfs==0.5.9 # via feast (setup.py) +aiobotocore==2.1.2 + # via s3fs aiohttp==3.8.1 # via # adlfs + # aiobotocore # gcsfs + # s3fs +aioitertools==0.10.0 + # via aiobotocore aiosignal==1.2.0 # via aiohttp alabaster==0.7.12 # via sphinx altair==4.2.0 # via great-expectations -anyio==3.5.0 +anyio==3.6.1 # via # starlette # watchgod @@ -52,7 +58,7 @@ attrs==21.4.0 # pytest avro==1.10.0 # via feast (setup.py) -azure-core==1.23.1 +azure-core==1.24.0 # via # adlfs # azure-identity @@ -61,7 +67,7 @@ azure-datalake-store==0.0.52 # via adlfs azure-identity==1.10.0 # via adlfs -azure-storage-blob==12.11.0 +azure-storage-blob==12.12.0 # via adlfs babel==2.10.1 # via sphinx @@ -69,12 +75,13 @@ backcall==0.2.0 # via ipython black==19.10b0 # via feast (setup.py) -boto3==1.22.8 +boto3==1.20.23 # via # feast (setup.py) # moto -botocore==1.25.8 +botocore==1.23.24 # via + # aiobotocore # boto3 # moto # s3transfer @@ -115,7 +122,7 @@ colorama==0.4.4 # via # feast (setup.py) # great-expectations -coverage[toml]==6.3.2 +coverage[toml]==6.3.3 # via pytest-cov cryptography==3.4.8 # via @@ -158,7 +165,7 @@ execnet==1.9.0 # via pytest-xdist executing==0.8.3 # via stack-data -fastapi==0.76.0 +fastapi==0.78.0 # via feast (setup.py) fastavro==1.4.11 # via @@ -166,7 +173,7 @@ fastavro==1.4.11 # pandavro fastjsonschema==2.15.3 # via nbformat -filelock==3.6.0 +filelock==3.7.0 # via virtualenv firebase-admin==4.5.2 # via feast (setup.py) @@ -176,12 +183,13 @@ frozenlist==1.3.0 # via # aiohttp # aiosignal -fsspec==2022.3.0 +fsspec==2022.1.0 # via # adlfs # dask # gcsfs -gcsfs==2022.3.0 + # s3fs +gcsfs==0.8.0 # via feast (setup.py) google-api-core[grpc]==1.31.5 # via @@ -227,7 +235,6 @@ google-cloud-storage==1.40.0 # via # feast (setup.py) # firebase-admin - # gcsfs google-crc32c==1.3.0 # via google-resumable-media google-resumable-media==1.3.3 @@ -241,7 +248,7 @@ googleapis-common-protos==1.52.0 # tensorflow-metadata great-expectations==0.14.13 # via feast (setup.py) -grpcio==1.46.0 +grpcio==1.46.1 # via # feast (setup.py) # google-api-core @@ -249,7 +256,7 @@ grpcio==1.46.0 # grpcio-reflection # grpcio-testing # grpcio-tools -grpcio-reflection==1.46.0 +grpcio-reflection==1.46.1 # via feast (setup.py) grpcio-testing==1.44.0 # via feast (setup.py) @@ -296,7 +303,7 @@ jinja2==3.0.3 # great-expectations # moto # sphinx -jmespath==1.0.0 +jmespath==0.10.0 # via # boto3 # botocore @@ -330,7 +337,7 @@ mmh3==3.0.0 # via feast (setup.py) mock==2.0.0 # via feast (setup.py) -moto==3.1.7 +moto==3.1.9 # via feast (setup.py) msal==1.17.0 # via @@ -409,7 +416,7 @@ pexpect==4.8.0 # via ipython pickleshare==0.7.5 # via ipython -pip-tools==6.6.0 +pip-tools==6.6.1 # via feast (setup.py) platformdirs==2.5.2 # via virtualenv @@ -486,7 +493,7 @@ pygments==2.12.0 # via # ipython # sphinx -pyjwt[crypto]==2.3.0 +pyjwt[crypto]==2.4.0 # via # adal # msal @@ -589,10 +596,12 @@ responses==0.20.0 # via moto rsa==4.8 # via google-auth -ruamel-yaml==0.17.17 +ruamel.yaml==0.17.17 # via great-expectations -ruamel-yaml-clib==0.2.6 - # via ruamel-yaml +ruamel.yaml.clib==0.2.6 + # via ruamel.yaml +s3fs==2022.1.0 + # via feast (setup.py) s3transfer==0.5.2 # via boto3 scipy==1.8.0 @@ -641,17 +650,17 @@ sphinxcontrib-serializinghtml==1.1.5 # via sphinx stack-data==0.2.0 # via ipython -starlette==0.18.0 +starlette==0.19.1 # via fastapi tabulate==0.8.9 # via feast (setup.py) tenacity==8.0.1 # via feast (setup.py) -tensorflow-metadata==1.7.0 +tensorflow-metadata==1.8.0 # via feast (setup.py) termcolor==1.1.0 # via great-expectations -testcontainers==3.5.3 +testcontainers==3.5.4 # via feast (setup.py) thriftpy2==0.4.14 # via happybase @@ -676,7 +685,7 @@ tqdm==4.64.0 # via # feast (setup.py) # great-expectations -traitlets==5.1.1 +traitlets==5.2.1.post0 # via # ipython # jupyter-core @@ -686,28 +695,29 @@ trino==0.313.0 # via feast (setup.py) typed-ast==1.5.3 # via black -types-protobuf==3.19.18 +types-protobuf==3.19.20 # via # feast (setup.py) # mypy-protobuf -types-python-dateutil==2.8.14 +types-python-dateutil==2.8.15 # via feast (setup.py) -types-pytz==2021.3.7 +types-pytz==2021.3.8 # via feast (setup.py) types-pyyaml==6.0.7 # via feast (setup.py) -types-redis==4.2.1 +types-redis==4.2.3 # via feast (setup.py) types-requests==2.27.25 # via feast (setup.py) types-setuptools==57.4.14 # via feast (setup.py) -types-tabulate==0.8.8 +types-tabulate==0.8.9 # via feast (setup.py) types-urllib3==1.26.14 # via types-requests typing-extensions==4.2.0 # via + # aioitertools # azure-core # great-expectations # mypy @@ -717,12 +727,13 @@ tzdata==2022.1 # via pytz-deprecation-shim tzlocal==4.2 # via great-expectations +ujson==5.2.0 + # via gcsfs uritemplate==4.1.1 # via google-api-python-client urllib3==1.26.9 # via # botocore - # feast (setup.py) # great-expectations # minio # requests @@ -747,9 +758,10 @@ wheel==0.37.1 # via pip-tools wrapt==1.14.1 # via + # aiobotocore # deprecated # testcontainers -xmltodict==0.12.0 +xmltodict==0.13.0 # via moto yarl==1.7.2 # via aiohttp diff --git a/sdk/python/requirements/py3.9-requirements.txt b/sdk/python/requirements/py3.9-requirements.txt index 0ad985b828e..3eded689a58 100644 --- a/sdk/python/requirements/py3.9-requirements.txt +++ b/sdk/python/requirements/py3.9-requirements.txt @@ -6,7 +6,7 @@ # absl-py==1.0.0 # via tensorflow-metadata -anyio==3.5.0 +anyio==3.6.1 # via # starlette # watchgod @@ -14,7 +14,7 @@ asgiref==3.5.1 # via uvicorn attrs==21.4.0 # via jsonschema -cachetools==4.2.4 +cachetools==5.1.0 # via google-auth certifi==2021.10.8 # via requests @@ -32,7 +32,7 @@ dask==2022.1.1 # via feast (setup.py) dill==0.3.4 # via feast (setup.py) -fastapi==0.76.0 +fastapi==0.78.0 # via feast (setup.py) fastavro==1.4.11 # via @@ -40,20 +40,20 @@ fastavro==1.4.11 # pandavro fsspec==2022.3.0 # via dask -google-api-core==1.31.5 +google-api-core==2.7.3 # via feast (setup.py) -google-auth==1.35.0 +google-auth==2.6.6 # via google-api-core googleapis-common-protos==1.52.0 # via # feast (setup.py) # google-api-core # tensorflow-metadata -grpcio==1.46.0 +grpcio==1.46.1 # via # feast (setup.py) # grpcio-reflection -grpcio-reflection==1.46.0 +grpcio-reflection==1.46.1 # via feast (setup.py) h11==0.13.0 # via uvicorn @@ -80,9 +80,7 @@ numpy==1.21.6 # pandavro # pyarrow packaging==21.3 - # via - # dask - # google-api-core + # via dask pandas==1.4.2 # via # feast (setup.py) @@ -113,7 +111,7 @@ pydantic==1.9.0 # via # fastapi # feast (setup.py) -pyparsing==3.0.8 +pyparsing==3.0.9 # via packaging pyrsistent==0.18.1 # via jsonschema @@ -122,9 +120,7 @@ python-dateutil==2.8.2 python-dotenv==0.20.0 # via uvicorn pytz==2022.1 - # via - # google-api-core - # pandas + # via pandas pyyaml==6.0 # via # dask @@ -137,20 +133,19 @@ rsa==4.8 six==1.16.0 # via # absl-py - # google-api-core # google-auth # grpcio # pandavro # python-dateutil sniffio==1.2.0 # via anyio -starlette==0.18.0 +starlette==0.19.1 # via fastapi tabulate==0.8.9 # via feast (setup.py) tenacity==8.0.1 # via feast (setup.py) -tensorflow-metadata==1.7.0 +tensorflow-metadata==1.8.0 # via feast (setup.py) toml==0.10.2 # via feast (setup.py) @@ -174,6 +169,3 @@ watchgod==0.8.2 # via uvicorn websockets==10.3 # via uvicorn - -# The following packages are considered to be unsafe in a requirements file: -# setuptools diff --git a/sdk/python/tests/conftest.py b/sdk/python/tests/conftest.py index d492c7ba845..092f5a07873 100644 --- a/sdk/python/tests/conftest.py +++ b/sdk/python/tests/conftest.py @@ -274,10 +274,11 @@ def pytest_generate_tests(metafunc: pytest.Metafunc): @pytest.fixture(scope="session") def python_server(environment): + assert not _check_port_open("localhost", environment.get_local_server_port()) + proc = Process( target=start_test_local_server, args=(environment.feature_store.repo_path, environment.get_local_server_port()), - daemon=True, ) if ( environment.python_feature_server @@ -298,6 +299,15 @@ def python_server(environment): if proc.is_alive(): proc.kill() + # wait server to free the port + wait_retry_backoff( + lambda: ( + None, + not _check_port_open("localhost", environment.get_local_server_port()), + ), + timeout_secs=30, + ) + def _check_port_open(host, port) -> bool: with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as sock: diff --git a/sdk/python/tests/unit/test_feature_views.py b/sdk/python/tests/unit/test_feature_views.py index 8708a983c41..f72ae4fe9cb 100644 --- a/sdk/python/tests/unit/test_feature_views.py +++ b/sdk/python/tests/unit/test_feature_views.py @@ -2,6 +2,7 @@ import pytest +from feast import PushSource from feast.batch_feature_view import BatchFeatureView from feast.data_format import AvroFormat from feast.data_source import KafkaSource @@ -50,12 +51,22 @@ def test_create_stream_feature_view(): batch_source=FileSource(path="some path"), ) StreamFeatureView( - name="test batch feature view", + name="test kafka stream feature view", entities=[], ttl=timedelta(days=30), source=stream_source, ) + push_source = PushSource( + name="push source", batch_source=FileSource(path="some path") + ) + StreamFeatureView( + name="test push source feature view", + entities=[], + ttl=timedelta(days=30), + source=push_source, + ) + with pytest.raises(ValueError): StreamFeatureView( name="test batch feature view", entities=[], ttl=timedelta(days=30) diff --git a/setup.py b/setup.py index 2044de008fc..f5f092e3f50 100644 --- a/setup.py +++ b/setup.py @@ -90,8 +90,9 @@ ] AWS_REQUIRED = [ - "boto3>=1.17.0", + "boto3>=1.17.0,<=1.20.23", "docker>=5.0.2", + "s3fs>=0.4.0,<=2022.01.0" ] SNOWFLAKE_REQUIRED = [ @@ -135,7 +136,7 @@ "mypy==0.931", "mypy-protobuf==3.1", "avro==1.10.0", - "gcsfs", + "gcsfs>=0.4.0,<=2022.01.0" "urllib3>=1.25.4,<2", "psutil==5.9.0", "pytest>=6.0.0,<8",