diff --git a/.github/workflows/master_only.yml b/.github/workflows/master_only.yml index 1b401997a7b..7166246da5f 100644 --- a/.github/workflows/master_only.yml +++ b/.github/workflows/master_only.yml @@ -94,7 +94,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - component: [ feature-server-python-aws, feature-server-java, feature-transformation-server ] + component: [ feature-server-java, feature-transformation-server ] env: MAVEN_CACHE: gs://feast-templocation-kf-feast/.m2.2020-08-19.tar REGISTRY: gcr.io/kf-feast diff --git a/Makefile b/Makefile index b44aaf0ee5a..2ad693c7a12 100644 --- a/Makefile +++ b/Makefile @@ -397,14 +397,6 @@ build-feature-server-docker: -t $(REGISTRY)/feature-server:$$VERSION \ -f sdk/python/feast/infra/feature_servers/multicloud/Dockerfile --load . -push-feature-server-python-aws-docker: - docker push $(REGISTRY)/feature-server-python-aws:$$VERSION - -build-feature-server-python-aws-docker: - docker buildx build --build-arg VERSION=$$VERSION \ - -t $(REGISTRY)/feature-server-python-aws:$$VERSION \ - -f sdk/python/feast/infra/feature_servers/aws_lambda/Dockerfile --load . - push-feature-transformation-server-docker: docker push $(REGISTRY)/feature-transformation-server:$(VERSION) diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index 06c5edcc8b0..3f0506cf1ee 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -118,9 +118,7 @@ * [Feature servers](reference/feature-servers/README.md) * [Python feature server](reference/feature-servers/python-feature-server.md) * [\[Alpha\] Go feature server](reference/feature-servers/go-feature-server.md) - * [\[Alpha\] AWS Lambda feature server](reference/feature-servers/alpha-aws-lambda-feature-server.md) * [Offline Feature Server](reference/feature-servers/offline-feature-server) - * [\[Beta\] Web UI](reference/alpha-web-ui.md) * [\[Alpha\] On demand feature view](reference/alpha-on-demand-feature-view.md) * [\[Alpha\] Data quality monitoring](reference/dqm.md) diff --git a/docs/getting-started/faq.md b/docs/getting-started/faq.md index 9b7eb834bf2..a29dd18f2f3 100644 --- a/docs/getting-started/faq.md +++ b/docs/getting-started/faq.md @@ -92,7 +92,7 @@ The list of supported offline and online stores can be found [here](../reference ### Does Feast support using different clouds for offline vs online stores? -Yes. Using a GCP or AWS provider in `feature_store.yaml` primarily sets default offline / online stores and configures where the remote registry file can live (Using the AWS provider also allows for deployment to AWS Lambda). You can override the offline and online stores to be in different clouds if you wish. +Yes. Using a GCP or AWS provider in `feature_store.yaml` primarily sets default offline / online stores and configures where the remote registry file can live. You can override the offline and online stores to be in different clouds if you wish. ### What is the difference between a data source and an offline store? diff --git a/docs/reference/feature-servers/README.md b/docs/reference/feature-servers/README.md index d5a4312f73a..124834f8a73 100644 --- a/docs/reference/feature-servers/README.md +++ b/docs/reference/feature-servers/README.md @@ -8,10 +8,7 @@ Feast users can choose to retrieve features from a feature server, as opposed to {% content-ref url="go-feature-server.md" %} [go-feature-server.md](go-feature-server.md) -{% endcontent-ref %} - -{% content-ref url="alpha-aws-lambda-feature-server.md" %} -[alpha-aws-lambda-feature-server.md](alpha-aws-lambda-feature-server.md) +======= {% endcontent-ref %} {% content-ref url="offline-feature-server.md" %} diff --git a/docs/reference/feature-servers/alpha-aws-lambda-feature-server.md b/docs/reference/feature-servers/alpha-aws-lambda-feature-server.md deleted file mode 100644 index caf5542bdc1..00000000000 --- a/docs/reference/feature-servers/alpha-aws-lambda-feature-server.md +++ /dev/null @@ -1,197 +0,0 @@ -# \[Alpha] AWS Lambda feature server - -**Warning**: This is an _experimental_ feature. It's intended for early testing and feedback, and could change without warnings in future releases. - -## Overview - -The AWS Lambda feature server is an HTTP endpoint that serves features with JSON I/O, deployed as a Docker image through AWS Lambda and AWS API Gateway. This enables users to get features from Feast using any programming language that can make HTTP requests. A [local feature server](python-feature-server.md) is also available. A remote feature server on GCP Cloud Run is currently being developed. - -## Deployment - -The AWS Lambda feature server is only available to projects using the `AwsProvider` with registries on S3. It is disabled by default. To enable it, `feature_store.yaml` must be modified; specifically, the `enable` flag must be on and an `execution_role_name` must be specified. For example, after running `feast init -t aws`, changing the registry to be on S3, and enabling the feature server, the contents of `feature_store.yaml` should look similar to the following: - -``` -project: dev -registry: s3://feast/registries/dev -provider: aws -online_store: - region: us-west-2 -offline_store: - cluster_id: feast - region: us-west-2 - user: admin - database: feast - s3_staging_location: s3://feast/redshift/tests/staging_location - iam_role: arn:aws:iam::{aws_account}:role/redshift_s3_access_role -feature_server: - enabled: True - execution_role_name: arn:aws:iam::{aws_account}:role/lambda_execution_role -``` - -If enabled, the feature server will be deployed during `feast apply`. After it is deployed, the `feast endpoint` CLI command will indicate the server's endpoint. - -## Permissions - -Feast requires the following permissions in order to deploy and teardown AWS Lambda feature server: - -| Permissions | Resources | -| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -|

lambda:CreateFunction

lambda:GetFunction

lambda:DeleteFunction

lambda:AddPermission

lambda:UpdateFunctionConfiguration

| arn:aws:lambda:\:\:function:feast-\* | -|

ecr:CreateRepository

ecr:DescribeRepositories

ecr:DeleteRepository

ecr:PutImage

ecr:DescribeImages

ecr:BatchDeleteImage

ecr:CompleteLayerUpload

ecr:UploadLayerPart

ecr:InitiateLayerUpload

ecr:BatchCheckLayerAvailability

ecr:GetDownloadUrlForLayer

ecr:GetRepositoryPolicy

ecr:SetRepositoryPolicy

ecr:GetAuthorizationToken

| \* | -|

iam:PassRole

| arn:aws:iam::\:role/ | -|

apigateway:*

|

arn:aws:apigateway:*::/apis/*/routes/*/routeresponses

arn:aws:apigateway:*::/apis/*/routes/*/routeresponses/*

arn:aws:apigateway:*::/apis/*/routes/*

arn:aws:apigateway:*::/apis/*/routes

arn:aws:apigateway:*::/apis/*/integrations

arn:aws:apigateway:*::/apis/*/stages/*/routesettings/*

arn:aws:apigateway:*::/apis/*

arn:aws:apigateway:*::/apis

| - -The following inline policy can be used to grant Feast the necessary permissions: - -```javascript -{ - "Statement": [ - { - Action = [ - "lambda:CreateFunction", - "lambda:GetFunction", - "lambda:DeleteFunction", - "lambda:AddPermission", - "lambda:UpdateFunctionConfiguration", - ] - Effect = "Allow" - Resource = "arn:aws:lambda:::function:feast-*" - }, - { - Action = [ - "ecr:CreateRepository", - "ecr:DescribeRepositories", - "ecr:DeleteRepository", - "ecr:PutImage", - "ecr:DescribeImages", - "ecr:BatchDeleteImage", - "ecr:CompleteLayerUpload", - "ecr:UploadLayerPart", - "ecr:InitiateLayerUpload", - "ecr:BatchCheckLayerAvailability", - "ecr:GetDownloadUrlForLayer", - "ecr:GetRepositoryPolicy", - "ecr:SetRepositoryPolicy", - "ecr:GetAuthorizationToken" - ] - Effect = "Allow" - Resource = "*" - }, - { - Action = "iam:PassRole" - Effect = "Allow" - Resource = "arn:aws:iam:::role/" - }, - { - Effect = "Allow" - Action = "apigateway:*" - Resource = [ - "arn:aws:apigateway:*::/apis/*/routes/*/routeresponses", - "arn:aws:apigateway:*::/apis/*/routes/*/routeresponses/*", - "arn:aws:apigateway:*::/apis/*/routes/*", - "arn:aws:apigateway:*::/apis/*/routes", - "arn:aws:apigateway:*::/apis/*/integrations", - "arn:aws:apigateway:*::/apis/*/stages/*/routesettings/*", - "arn:aws:apigateway:*::/apis/*", - "arn:aws:apigateway:*::/apis", - ] - }, - ], - "Version": "2012-10-17" -} -``` - -## Example - -After `feature_store.yaml` has been modified as described in the previous section, it can be deployed as follows: - -```bash -$ feast apply -10/07/2021 03:57:26 PM INFO:Pulling remote image feastdev/feature-server-python-aws:aws: -10/07/2021 03:57:28 PM INFO:Creating remote ECR repository feast-python-server-key_shark-0_13_1_dev23_gb3c08320: -10/07/2021 03:57:29 PM INFO:Pushing local image to remote 402087665549.dkr.ecr.us-west-2.amazonaws.com/feast-python-server-key_shark-0_13_1_dev23_gb3c08320:0_13_1_dev23_gb3c08320: -10/07/2021 03:58:44 PM INFO:Deploying feature server... -10/07/2021 03:58:45 PM INFO: Creating AWS Lambda... -10/07/2021 03:58:46 PM INFO: Creating AWS API Gateway... -Registered entity driver_id -Registered feature view driver_hourly_stats -Deploying infrastructure for driver_hourly_stats - -$ feast endpoint -10/07/2021 03:59:01 PM INFO:Feature server endpoint: https://hkosgmz4m2.execute-api.us-west-2.amazonaws.com - -$ feast materialize-incremental $(date +%Y-%m-%d) -Materializing 1 feature views to 2021-10-06 17:00:00-07:00 into the dynamodb online store. - -driver_hourly_stats from 2020-10-08 23:01:34-07:00 to 2021-10-06 17:00:00-07:00: -100%|█████████████████████████████████████████████████████████████████| 5/5 [00:00<00:00, 16.89it/s] -``` - -After the feature server starts, we can execute cURL commands against it: - -```bash -$ curl -X POST \ - "https://hkosgmz4m2.execute-api.us-west-2.amazonaws.com/get-online-features" \ - -H "Content-type: application/json" \ - -H "Accept: application/json" \ - -d '{ - "features": [ - "driver_hourly_stats:conv_rate", - "driver_hourly_stats:acc_rate", - "driver_hourly_stats:avg_daily_trips" - ], - "entities": { - "driver_id": [1001, 1002, 1003] - }, - "full_feature_names": true - }' | jq - % Total % Received % Xferd Average Speed Time Time Time Current - Dload Upload Total Spent Left Speed -100 1346 100 1055 100 291 3436 947 --:--:-- --:--:-- --:--:-- 4370 -{ - "field_values": [ - { - "fields": { - "driver_id": 1001, - "driver_hourly_stats__conv_rate": 0.025330161675810814, - "driver_hourly_stats__avg_daily_trips": 785, - "driver_hourly_stats__acc_rate": 0.835975170135498 - }, - "statuses": { - "driver_hourly_stats__avg_daily_trips": "PRESENT", - "driver_id": "PRESENT", - "driver_hourly_stats__conv_rate": "PRESENT", - "driver_hourly_stats__acc_rate": "PRESENT" - } - }, - { - "fields": { - "driver_hourly_stats__conv_rate": 0.7595187425613403, - "driver_hourly_stats__acc_rate": 0.1740121990442276, - "driver_id": 1002, - "driver_hourly_stats__avg_daily_trips": 875 - }, - "statuses": { - "driver_hourly_stats__acc_rate": "PRESENT", - "driver_id": "PRESENT", - "driver_hourly_stats__avg_daily_trips": "PRESENT", - "driver_hourly_stats__conv_rate": "PRESENT" - } - }, - { - "fields": { - "driver_hourly_stats__acc_rate": 0.7785481214523315, - "driver_hourly_stats__conv_rate": 0.33832859992980957, - "driver_hourly_stats__avg_daily_trips": 846, - "driver_id": 1003 - }, - "statuses": { - "driver_id": "PRESENT", - "driver_hourly_stats__conv_rate": "PRESENT", - "driver_hourly_stats__acc_rate": "PRESENT", - "driver_hourly_stats__avg_daily_trips": "PRESENT" - } - } - ] -} -``` diff --git a/docs/reference/feature-servers/python-feature-server.md b/docs/reference/feature-servers/python-feature-server.md index c189f97ae03..0d8a0aef756 100644 --- a/docs/reference/feature-servers/python-feature-server.md +++ b/docs/reference/feature-servers/python-feature-server.md @@ -12,8 +12,6 @@ There is a CLI command that starts the server: `feast serve`. By default, Feast One can deploy a feature server by building a docker image that bundles in the project's `feature_store.yaml`. See this [helm chart](https://github.com/feast-dev/feast/blob/master/infra/charts/feast-feature-server) for an example on how to run Feast on Kubernetes. -A [remote feature server](alpha-aws-lambda-feature-server.md) on AWS Lambda is also available. - ## Example ### Initializing a feature server diff --git a/sdk/python/feast/constants.py b/sdk/python/feast/constants.py index fa8674d91d2..7dd39458211 100644 --- a/sdk/python/feast/constants.py +++ b/sdk/python/feast/constants.py @@ -17,9 +17,6 @@ # Maximum interval(secs) to wait between retries for retry function MAX_WAIT_INTERVAL: str = "60" -AWS_LAMBDA_FEATURE_SERVER_IMAGE = "feastdev/feature-server-python-aws" -AWS_LAMBDA_FEATURE_SERVER_REPOSITORY = "feast-python-server" - # feature_store.yaml environment variable name for remote feature server FEATURE_STORE_YAML_ENV_NAME: str = "FEATURE_STORE_YAML_BASE64" @@ -44,8 +41,5 @@ # Default offline server port DEFAULT_OFFLINE_SERVER_PORT = 8815 -# Environment variable for feature server docker image tag -DOCKER_IMAGE_TAG_ENV_NAME: str = "FEAST_SERVER_DOCKER_IMAGE_TAG" - # Default feature server registry ttl (seconds) DEFAULT_FEATURE_SERVER_REGISTRY_TTL = 5 diff --git a/sdk/python/feast/errors.py b/sdk/python/feast/errors.py index 52fefce9d90..22de402f20a 100644 --- a/sdk/python/feast/errors.py +++ b/sdk/python/feast/errors.py @@ -350,32 +350,6 @@ def __init__(self, feature_view_name: str): ) -class RepoConfigPathDoesNotExist(Exception): - def __init__(self): - super().__init__("The repo_path attribute does not exist for the repo_config.") - - -class AwsLambdaDoesNotExist(Exception): - def __init__(self, resource_name: str): - super().__init__( - f"The AWS Lambda function {resource_name} should have been created properly, but does not exist." - ) - - -class AwsAPIGatewayDoesNotExist(Exception): - def __init__(self, resource_name: str): - super().__init__( - f"The AWS API Gateway {resource_name} should have been created properly, but does not exist." - ) - - -class IncompatibleRegistryStoreClass(Exception): - def __init__(self, actual_class: str, expected_class: str): - super().__init__( - f"The registry store class was expected to be {expected_class}, but was instead {actual_class}." - ) - - class FeastInvalidInfraObjectType(Exception): def __init__(self): super().__init__("Could not identify the type of the InfraObject.") diff --git a/sdk/python/feast/infra/aws.py b/sdk/python/feast/infra/aws.py index bb896fa961f..47fec9b05bd 100644 --- a/sdk/python/feast/infra/aws.py +++ b/sdk/python/feast/infra/aws.py @@ -1,350 +1,9 @@ -import base64 -import hashlib -import logging -import os -import uuid -import warnings -from typing import Optional, Sequence - -from colorama import Fore, Style - -from feast import utils -from feast.constants import ( - AWS_LAMBDA_FEATURE_SERVER_IMAGE, - AWS_LAMBDA_FEATURE_SERVER_REPOSITORY, - DOCKER_IMAGE_TAG_ENV_NAME, - FEATURE_STORE_YAML_ENV_NAME, -) -from feast.entity import Entity -from feast.errors import ( - AwsAPIGatewayDoesNotExist, - AwsLambdaDoesNotExist, - IncompatibleRegistryStoreClass, - RepoConfigPathDoesNotExist, -) -from feast.feature_view import FeatureView -from feast.infra.feature_servers.aws_lambda.config import AwsLambdaFeatureServerConfig from feast.infra.passthrough_provider import PassthroughProvider -from feast.infra.registry.registry import get_registry_store_class_from_scheme -from feast.infra.registry.s3 import S3RegistryStore -from feast.infra.utils import aws_utils -from feast.version import get_version - -try: - import boto3 -except ImportError as e: - from feast.errors import FeastExtrasDependencyImportError - - raise FeastExtrasDependencyImportError("aws", str(e)) - -_logger = logging.getLogger(__name__) class AwsProvider(PassthroughProvider): - def update_infra( - self, - project: str, - tables_to_delete: Sequence[FeatureView], - tables_to_keep: Sequence[FeatureView], - entities_to_delete: Sequence[Entity], - entities_to_keep: Sequence[Entity], - partial: bool, - ): - # Call update only if there is an online store - if self.online_store: - self.online_store.update( - config=self.repo_config, - tables_to_delete=tables_to_delete, - tables_to_keep=tables_to_keep, - entities_to_keep=entities_to_keep, - entities_to_delete=entities_to_delete, - partial=partial, - ) - - if self.repo_config.feature_server and self.repo_config.feature_server.enabled: - warnings.warn( - "AWS Lambda based feature serving is an experimental feature. " - "We do not guarantee that future changes will maintain backward compatibility.", - RuntimeWarning, - ) - - # Since the AWS Lambda feature server will attempt to load the registry, we - # only allow the registry to be in S3. - registry_path = ( - self.repo_config.registry - if isinstance(self.repo_config.registry, str) - else self.repo_config.registry.path - ) - registry_store_class = get_registry_store_class_from_scheme(registry_path) - if registry_store_class != S3RegistryStore: - raise IncompatibleRegistryStoreClass( - registry_store_class.__name__, S3RegistryStore.__name__ - ) - - ecr_client = boto3.client("ecr") - docker_image_version = _get_docker_image_version() - repository_uri = self._create_or_get_repository_uri(ecr_client) - # Only download & upload the docker image if it doesn't already exist in ECR - if not ecr_client.batch_get_image( - repositoryName=AWS_LAMBDA_FEATURE_SERVER_REPOSITORY, - imageIds=[{"imageTag": docker_image_version}], - ).get("images"): - image_uri = self._upload_docker_image( - ecr_client, repository_uri, docker_image_version - ) - else: - image_uri = f"{repository_uri}:{docker_image_version}" - - self._deploy_feature_server(project, image_uri) - - if self.batch_engine: - self.batch_engine.update( - project, - tables_to_delete, - tables_to_keep, - entities_to_delete, - entities_to_keep, - ) - - def _deploy_feature_server(self, project: str, image_uri: str): - _logger.info("Deploying feature server...") - - if not self.repo_config.repo_path: - raise RepoConfigPathDoesNotExist() - - with open( - utils.get_default_yaml_file_path(self.repo_config.repo_path), "rb" - ) as f: - config_bytes = f.read() - config_base64 = base64.b64encode(config_bytes).decode() - - resource_name = _get_lambda_name(project) - lambda_client = boto3.client("lambda") - api_gateway_client = boto3.client("apigatewayv2") - function = aws_utils.get_lambda_function(lambda_client, resource_name) - _logger.debug("Using function name: %s", resource_name) - _logger.debug("Found function: %s", function) - - if function is None: - # If the Lambda function does not exist, create it. - _logger.info(" Creating AWS Lambda...") - assert isinstance( - self.repo_config.feature_server, AwsLambdaFeatureServerConfig - ) - lambda_client.create_function( - FunctionName=resource_name, - Role=self.repo_config.feature_server.execution_role_name, - Code={"ImageUri": image_uri}, - PackageType="Image", - MemorySize=1769, - Environment={"Variables": {FEATURE_STORE_YAML_ENV_NAME: config_base64}}, - Tags={ - "feast-owned": "True", - "project": project, - "feast-sdk-version": get_version(), - }, - ) - function = aws_utils.get_lambda_function(lambda_client, resource_name) - if not function: - raise AwsLambdaDoesNotExist(resource_name) - else: - # If the feature_store.yaml has changed, need to update the environment variable. - env = function.get("Environment", {}).get("Variables", {}) - if env.get(FEATURE_STORE_YAML_ENV_NAME) != config_base64: - # Note, that this does not update Lambda gracefully (e.g. no rolling deployment). - # It's expected that feature_store.yaml is not regularly updated while the lambda - # is serving production traffic. However, the update in registry (e.g. modifying - # feature views, feature services, and other definitions does not update lambda). - _logger.info(" Updating AWS Lambda...") - - aws_utils.update_lambda_function_environment( - lambda_client, - resource_name, - {"Variables": {FEATURE_STORE_YAML_ENV_NAME: config_base64}}, - ) - - api = aws_utils.get_first_api_gateway(api_gateway_client, resource_name) - if not api: - # If the API Gateway doesn't exist, create it - _logger.info(" Creating AWS API Gateway...") - api = api_gateway_client.create_api( - Name=resource_name, - ProtocolType="HTTP", - Target=function["FunctionArn"], - RouteKey="POST /get-online-features", - Tags={ - "feast-owned": "True", - "project": project, - "feast-sdk-version": get_version(), - }, - ) - if not api: - raise AwsAPIGatewayDoesNotExist(resource_name) - # Make sure to give AWS Lambda a permission to be invoked by the newly created API Gateway - api_id = api["ApiId"] - region = lambda_client.meta.region_name - account_id = aws_utils.get_account_id() - lambda_client.add_permission( - FunctionName=function["FunctionArn"], - StatementId=str(uuid.uuid4()), - Action="lambda:InvokeFunction", - Principal="apigateway.amazonaws.com", - SourceArn=f"arn:aws:execute-api:{region}:{account_id}:{api_id}/*/*/get-online-features", - ) - - def teardown_infra( - self, - project: str, - tables: Sequence[FeatureView], - entities: Sequence[Entity], - ) -> None: - super(AwsProvider, self).teardown_infra(project, tables, entities) - - if ( - self.repo_config.feature_server is not None - and self.repo_config.feature_server.enabled - ): - _logger.info("Tearing down feature server...") - resource_name = _get_lambda_name(project) - lambda_client = boto3.client("lambda") - api_gateway_client = boto3.client("apigatewayv2") - - function = aws_utils.get_lambda_function(lambda_client, resource_name) - - if function is not None: - _logger.info(" Tearing down AWS Lambda...") - aws_utils.delete_lambda_function(lambda_client, resource_name) - - api = aws_utils.get_first_api_gateway(api_gateway_client, resource_name) - if api is not None: - _logger.info(" Tearing down AWS API Gateway...") - aws_utils.delete_api_gateway(api_gateway_client, api["ApiId"]) - - def get_feature_server_endpoint(self) -> Optional[str]: - project = self.repo_config.project - resource_name = _get_lambda_name(project) - api_gateway_client = boto3.client("apigatewayv2") - api = aws_utils.get_first_api_gateway(api_gateway_client, resource_name) - - if not api: - return None - - api_id = api["ApiId"] - lambda_client = boto3.client("lambda") - region = lambda_client.meta.region_name - return f"https://{api_id}.execute-api.{region}.amazonaws.com" - - def _upload_docker_image( - self, ecr_client, repository_uri: str, docker_image_version: str - ) -> str: - """ - Pulls the AWS Lambda docker image from Dockerhub and uploads it to AWS ECR. - - Returns: - The URI of the uploaded docker image. - """ - try: - import docker - from docker.errors import APIError - except ImportError as e: - from feast.errors import FeastExtrasDependencyImportError - - raise FeastExtrasDependencyImportError("docker", str(e)) - - try: - docker_client = docker.from_env() - except APIError: - from feast.errors import DockerDaemonNotRunning - - raise DockerDaemonNotRunning() - - dockerhub_image = f"{AWS_LAMBDA_FEATURE_SERVER_IMAGE}:{docker_image_version}" - _logger.info( - f"Pulling remote image {Style.BRIGHT + Fore.GREEN}{dockerhub_image}{Style.RESET_ALL}" - ) - for line in docker_client.api.pull(dockerhub_image, stream=True, decode=True): - _logger.debug(f" {line}") - - auth_token = ecr_client.get_authorization_token()["authorizationData"][0][ - "authorizationToken" - ] - username, password = base64.b64decode(auth_token).decode("utf-8").split(":") - - ecr_address = repository_uri.split("/")[0] - _logger.info( - f"Logging in Docker client to {Style.BRIGHT + Fore.GREEN}{ecr_address}{Style.RESET_ALL}" - ) - login_status = docker_client.login( - username=username, password=password, registry=ecr_address - ) - _logger.debug(f" {login_status}") - - image = docker_client.images.get(dockerhub_image) - image_remote_name = f"{repository_uri}:{docker_image_version}" - _logger.info( - f"Pushing local image to remote {Style.BRIGHT + Fore.GREEN}{image_remote_name}{Style.RESET_ALL}" - ) - image.tag(image_remote_name) - for line in docker_client.api.push( - repository_uri, tag=docker_image_version, stream=True, decode=True - ): - _logger.debug(f" {line}") - - return image_remote_name - - def _create_or_get_repository_uri(self, ecr_client): - try: - return ecr_client.describe_repositories( - repositoryNames=[AWS_LAMBDA_FEATURE_SERVER_REPOSITORY] - )["repositories"][0]["repositoryUri"] - except ecr_client.exceptions.RepositoryNotFoundException: - _logger.info( - f"Creating remote ECR repository {Style.BRIGHT + Fore.GREEN}{AWS_LAMBDA_FEATURE_SERVER_REPOSITORY}{Style.RESET_ALL}" - ) - response = ecr_client.create_repository( - repositoryName=AWS_LAMBDA_FEATURE_SERVER_REPOSITORY - ) - return response["repository"]["repositoryUri"] - - -def _get_lambda_name(project: str): - lambda_prefix = AWS_LAMBDA_FEATURE_SERVER_REPOSITORY - lambda_suffix = f"{project}-{_get_docker_image_version().replace('.', '_')}" - # AWS Lambda name can't have the length greater than 64 bytes. - # This usually occurs during integration tests where feast version is long - if len(lambda_prefix) + len(lambda_suffix) >= 63: - lambda_suffix = hashlib.md5(lambda_suffix.encode()).hexdigest() - return f"{lambda_prefix}-{lambda_suffix}" - - -def _get_docker_image_version() -> str: - """Returns a version for the feature server Docker image. - - If the feast.constants.DOCKER_IMAGE_TAG_ENV_NAME environment variable is set, - we return that (mostly used for integration tests, but can be used for local testing too). - - For public Feast releases this equals to the Feast SDK version modified by replacing "." with "_". - For example, Feast SDK version "0.14.1" would correspond to Docker image version "0_14_1". - - During development (when Feast is installed in editable mode) this equals to the Feast SDK version - modified by removing the "dev..." suffix and replacing "." with "_". For example, Feast SDK version - "0.14.1.dev41+g1cbfa225.d20211103" would correspond to Docker image version "0_14_1". This way, - Feast SDK will use an already existing Docker image built during the previous public release. - """ - tag = os.environ.get(DOCKER_IMAGE_TAG_ENV_NAME) - if tag is not None: - return tag - else: - version = get_version() - if "dev" in version: - version = version[: version.find("dev") - 1] - _logger.warning( - "You are trying to use AWS Lambda feature server while Feast is in a development mode. " - f"Feast will use a docker image version {version} derived from Feast SDK " - f"version {get_version()}. If you want to update the Feast SDK version, make " - "sure to first fetch all new release tags from Github and then reinstall the library:\n" - "> git fetch --all --tags\n" - "> pip install -e '.'" - ) - return version + This class only exists for backwards compatibility. + """ + + pass diff --git a/sdk/python/feast/infra/feature_servers/aws_lambda/Dockerfile b/sdk/python/feast/infra/feature_servers/aws_lambda/Dockerfile deleted file mode 100644 index 929227a8106..00000000000 --- a/sdk/python/feast/infra/feature_servers/aws_lambda/Dockerfile +++ /dev/null @@ -1,26 +0,0 @@ -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} - -# Copy necessary parts of the Feast codebase -COPY sdk/python sdk/python -COPY protos protos -COPY go go -COPY setup.py setup.py -COPY pyproject.toml pyproject.toml -COPY README.md README.md - -# Install Feast for AWS with Lambda dependencies -# We need this mount thingy because setuptools_scm needs access to the -# 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 --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) -CMD [ "app.handler" ] diff --git a/sdk/python/feast/infra/feature_servers/aws_lambda/__init__.py b/sdk/python/feast/infra/feature_servers/aws_lambda/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/sdk/python/feast/infra/feature_servers/aws_lambda/app.py b/sdk/python/feast/infra/feature_servers/aws_lambda/app.py deleted file mode 100644 index e90364ed680..00000000000 --- a/sdk/python/feast/infra/feature_servers/aws_lambda/app.py +++ /dev/null @@ -1,27 +0,0 @@ -import base64 -import os -import tempfile -from pathlib import Path - -from mangum import Mangum - -from feast import FeatureStore -from feast.constants import FEATURE_STORE_YAML_ENV_NAME -from feast.feature_server import get_app - -# Load RepoConfig -config_base64 = os.environ[FEATURE_STORE_YAML_ENV_NAME] -config_bytes = base64.b64decode(config_base64) - -# Create a new unique directory for writing feature_store.yaml -repo_path = Path(tempfile.mkdtemp()) - -with open(repo_path / "feature_store.yaml", "wb") as f: - f.write(config_bytes) - -# Initialize the feature store -store = FeatureStore(repo_path=str(repo_path.resolve())) - -# Create the FastAPI app and AWS Lambda handler -app = get_app(store) -handler = Mangum(app) diff --git a/sdk/python/feast/infra/feature_servers/aws_lambda/config.py b/sdk/python/feast/infra/feature_servers/aws_lambda/config.py deleted file mode 100644 index 946831a18fb..00000000000 --- a/sdk/python/feast/infra/feature_servers/aws_lambda/config.py +++ /dev/null @@ -1,21 +0,0 @@ -from typing import Literal - -from pydantic import StrictBool, StrictStr - -from feast.infra.feature_servers.base_config import BaseFeatureServerConfig - - -class AwsLambdaFeatureServerConfig(BaseFeatureServerConfig): - """Feature server config for AWS Lambda.""" - - type: Literal["aws_lambda"] = "aws_lambda" - """Feature server type selector.""" - - public: StrictBool = True - """Whether the endpoint should be publicly accessible.""" - - auth: Literal["none", "api-key"] = "none" - """Authentication method for the endpoint.""" - - execution_role_name: StrictStr - """The execution role for the AWS Lambda function.""" diff --git a/sdk/python/feast/infra/feature_servers/aws_lambda/requirements.txt b/sdk/python/feast/infra/feature_servers/aws_lambda/requirements.txt deleted file mode 100644 index 845aa14802d..00000000000 --- a/sdk/python/feast/infra/feature_servers/aws_lambda/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -fastapi -mangum diff --git a/sdk/python/feast/infra/feature_servers/gcp_cloudrun/Dockerfile b/sdk/python/feast/infra/feature_servers/gcp_cloudrun/Dockerfile deleted file mode 100644 index 6b89d4f73c1..00000000000 --- a/sdk/python/feast/infra/feature_servers/gcp_cloudrun/Dockerfile +++ /dev/null @@ -1,32 +0,0 @@ -FROM python:3.11-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 - -# Copy local code to the container image. -ENV APP_HOME /app -WORKDIR $APP_HOME - -# Copy app handler code -COPY sdk/python/feast/infra/feature_servers/gcp_cloudrun/app.py ./app.py - -# Copy necessary parts of the Feast codebase -COPY sdk/python ./sdk/python -COPY protos ./protos -COPY setup.py setup.py -COPY pyproject.toml pyproject.toml -COPY README.md ./README.md - -# Install production dependencies. -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 - -# Run the web service on container startup. Here we use the gunicorn -# webserver, with one worker process and 8 threads. -# For environments with multiple CPU cores, increase the number of workers -# to be equal to the cores available. -# Timeout is set to 0 to disable the timeouts of the workers to allow Cloud Run to handle instance scaling. -CMD exec gunicorn -k uvicorn.workers.UvicornWorker --bind :$PORT --workers 1 --threads 8 --timeout 0 app:app diff --git a/sdk/python/feast/infra/feature_servers/gcp_cloudrun/__init__.py b/sdk/python/feast/infra/feature_servers/gcp_cloudrun/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/sdk/python/feast/infra/feature_servers/gcp_cloudrun/app.py b/sdk/python/feast/infra/feature_servers/gcp_cloudrun/app.py deleted file mode 100644 index 06749b0cd39..00000000000 --- a/sdk/python/feast/infra/feature_servers/gcp_cloudrun/app.py +++ /dev/null @@ -1,24 +0,0 @@ -import base64 -import os -import tempfile -from pathlib import Path - -from feast import FeatureStore -from feast.constants import FEATURE_STORE_YAML_ENV_NAME -from feast.feature_server import get_app - -# Load RepoConfig -config_base64 = os.environ[FEATURE_STORE_YAML_ENV_NAME] -config_bytes = base64.b64decode(config_base64) - -# Create a new unique directory for writing feature_store.yaml -repo_path = Path(tempfile.mkdtemp()) - -with open(repo_path / "feature_store.yaml", "wb") as f: - f.write(config_bytes) - -# Initialize the feature store -store = FeatureStore(repo_path=str(repo_path.resolve())) - -# Create the FastAPI app -app = get_app(store) diff --git a/sdk/python/feast/infra/feature_servers/gcp_cloudrun/config.py b/sdk/python/feast/infra/feature_servers/gcp_cloudrun/config.py deleted file mode 100644 index ddcbde7924a..00000000000 --- a/sdk/python/feast/infra/feature_servers/gcp_cloudrun/config.py +++ /dev/null @@ -1,18 +0,0 @@ -from typing import Literal - -from pydantic import StrictBool - -from feast.infra.feature_servers.base_config import BaseFeatureServerConfig - - -class GcpCloudRunFeatureServerConfig(BaseFeatureServerConfig): - """Feature server config for GCP CloudRun.""" - - type: Literal["gcp_cloudrun"] = "gcp_cloudrun" - """Feature server type selector.""" - - public: StrictBool = True - """Whether the endpoint should be publicly accessible.""" - - auth: Literal["none", "api-key"] = "none" - """Authentication method for the endpoint.""" diff --git a/sdk/python/feast/infra/feature_servers/gcp_cloudrun/requirements.txt b/sdk/python/feast/infra/feature_servers/gcp_cloudrun/requirements.txt deleted file mode 100644 index 8f22dccf99a..00000000000 --- a/sdk/python/feast/infra/feature_servers/gcp_cloudrun/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -gunicorn diff --git a/sdk/python/feast/repo_config.py b/sdk/python/feast/repo_config.py index d5b3160b566..512caa6ae85 100644 --- a/sdk/python/feast/repo_config.py +++ b/sdk/python/feast/repo_config.py @@ -82,14 +82,10 @@ } FEATURE_SERVER_CONFIG_CLASS_FOR_TYPE = { - "aws_lambda": "feast.infra.feature_servers.aws_lambda.config.AwsLambdaFeatureServerConfig", - "gcp_cloudrun": "feast.infra.feature_servers.gcp_cloudrun.config.GcpCloudRunFeatureServerConfig", "local": "feast.infra.feature_servers.local_process.config.LocalFeatureServerConfig", } FEATURE_SERVER_TYPE_FOR_PROVIDER = { - "aws": "aws_lambda", - "gcp": "gcp_cloudrun", "local": "local", } diff --git a/sdk/python/requirements/py3.10-ci-requirements.txt b/sdk/python/requirements/py3.10-ci-requirements.txt index 3a9a11953fd..97bdfc159ba 100644 --- a/sdk/python/requirements/py3.10-ci-requirements.txt +++ b/sdk/python/requirements/py3.10-ci-requirements.txt @@ -1,7 +1,6 @@ # This file was autogenerated by uv via the following command: # uv pip compile --system --no-strip-extras setup.py --extra ci --output-file sdk/python/requirements/py3.10-ci-requirements.txt aiobotocore==2.13.0 - # via feast (setup.py) aiohttp==3.9.5 # via aiobotocore aioitertools==0.11.0 @@ -20,8 +19,6 @@ anyio==4.3.0 # jupyter-server # starlette # watchfiles -appnope==0.1.4 - # via ipykernel argon2-cffi==23.1.0 # via jupyter-server argon2-cffi-bindings==21.2.0 @@ -31,7 +28,6 @@ arrow==1.3.0 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 @@ -52,9 +48,7 @@ azure-core==1.30.1 # azure-identity # azure-storage-blob azure-identity==1.16.0 - # via feast (setup.py) azure-storage-blob==12.20.0 - # via feast (setup.py) babel==2.15.0 # via # jupyterlab-server @@ -66,9 +60,7 @@ bidict==0.23.1 bleach==6.1.0 # via nbconvert boto3==1.34.99 - # via - # feast (setup.py) - # moto + # via moto botocore==1.34.99 # via # aiobotocore @@ -76,15 +68,12 @@ botocore==1.34.99 # moto # s3transfer build==1.2.1 - # via - # feast (setup.py) - # pip-tools + # via 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 # elastic-transport @@ -107,7 +96,6 @@ charset-normalizer==3.3.2 # snowflake-connector-python click==8.1.7 # via - # feast (setup.py) # dask # geomet # great-expectations @@ -117,9 +105,7 @@ click==8.1.7 cloudpickle==3.0.0 # via dask colorama==0.4.6 - # via - # feast (setup.py) - # great-expectations + # via great-expectations comm==0.2.2 # via # ipykernel @@ -128,7 +114,6 @@ coverage[toml]==7.5.3 # via pytest-cov cryptography==42.0.7 # via - # feast (setup.py) # azure-identity # azure-storage-blob # great-expectations @@ -140,9 +125,7 @@ cryptography==42.0.7 # types-pyopenssl # types-redis dask[dataframe]==2024.5.0 - # via - # feast (setup.py) - # dask-expr + # via dask-expr dask-expr==1.1.0 # via dask db-dtypes==1.2.0 @@ -154,17 +137,13 @@ decorator==5.1.1 defusedxml==0.7.1 # via nbconvert deltalake==0.17.3 - # via feast (setup.py) dill==0.3.8 - # via feast (setup.py) distlib==0.3.8 # via virtualenv dnspython==2.6.1 # via email-validator docker==7.1.0 - # via - # feast (setup.py) - # testcontainers + # via testcontainers docutils==0.19 # via sphinx duckdb==0.10.3 @@ -176,7 +155,6 @@ duckdb-engine==0.12.1 elastic-transport==8.13.1 # via elasticsearch elasticsearch==8.13.2 - # via feast (setup.py) email-validator==2.1.1 # via fastapi entrypoints==0.4 @@ -191,9 +169,7 @@ execnet==2.1.1 executing==2.0.1 # via stack-data fastapi==0.111.0 - # via - # feast (setup.py) - # fastapi-cli + # via fastapi-cli fastapi-cli==0.0.2 # via fastapi fastjsonschema==2.19.1 @@ -203,7 +179,6 @@ filelock==3.14.0 # snowflake-connector-python # virtualenv firebase-admin==5.4.0 - # via feast (setup.py) fqdn==1.5.1 # via jsonschema frozenlist==1.4.1 @@ -211,16 +186,13 @@ frozenlist==1.4.1 # aiohttp # aiosignal fsspec==2023.12.2 - # via - # feast (setup.py) - # dask + # via dask geojson==2.5.0 # via rockset geomet==0.2.1.post1 # via cassandra-driver google-api-core[grpc]==2.19.0 # via - # feast (setup.py) # firebase-admin # google-api-python-client # google-cloud-bigquery @@ -245,11 +217,8 @@ google-auth==2.29.0 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.25.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 @@ -258,13 +227,10 @@ google-cloud-core==2.4.1 # 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 + # via firebase-admin google-crc32c==1.5.0 # via # google-cloud-storage @@ -275,17 +241,16 @@ google-resumable-media==2.7.0 # 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.15 - # via feast (setup.py) +greenlet==3.0.3 + # via sqlalchemy grpc-google-iam-v1==0.13.0 # via google-cloud-bigtable grpcio==1.64.0 # via - # feast (setup.py) # google-api-core # google-cloud-bigquery # googleapis-common-protos @@ -296,27 +261,19 @@ grpcio==1.64.0 # 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 - # via feast (setup.py) h11==0.14.0 # via # httpcore # uvicorn happybase==1.2.0 - # via feast (setup.py) hazelcast-python-client==5.4.0 - # via feast (setup.py) hiredis==2.3.2 - # via feast (setup.py) httpcore==1.0.5 # via httpx httplib2==0.22.0 @@ -327,15 +284,11 @@ httptools==0.6.1 # via uvicorn httpx==0.27.0 # via - # feast (setup.py) # fastapi # jupyterlab ibis-framework[duckdb]==8.0.0 - # via - # feast (setup.py) - # ibis-substrait + # via ibis-substrait ibis-substrait==3.2.0 - # via feast (setup.py) identify==2.5.36 # via pre-commit idna==3.7 @@ -370,7 +323,6 @@ jedi==0.19.1 # via ipython jinja2==3.1.4 # via - # feast (setup.py) # altair # fastapi # great-expectations @@ -394,7 +346,6 @@ jsonpointer==2.4 # jsonschema jsonschema[format-nongpl]==4.22.0 # via - # feast (setup.py) # altair # great-expectations # jupyter-events @@ -440,7 +391,6 @@ jupyterlab-server==2.27.2 jupyterlab-widgets==3.0.11 # via ipywidgets kubernetes==20.13.0 - # via feast (setup.py) locket==1.0.0 # via partd makefun==1.15.2 @@ -461,17 +411,13 @@ matplotlib-inline==0.1.7 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) moto==4.2.14 - # via feast (setup.py) msal==1.28.0 # via # azure-identity @@ -487,13 +433,10 @@ multidict==6.0.5 multipledispatch==1.0.0 # via ibis-framework mypy==1.10.0 - # via - # feast (setup.py) - # sqlalchemy + # via 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 @@ -516,7 +459,6 @@ notebook-shim==0.2.4 # notebook numpy==1.26.4 # via - # feast (setup.py) # altair # dask # db-dtypes @@ -553,7 +495,6 @@ packaging==24.0 # sphinx pandas==2.2.2 # via - # feast (setup.py) # altair # dask # dask-expr @@ -577,7 +518,6 @@ pexpect==4.9.0 pip==24.0 # via pip-tools pip-tools==7.4.1 - # via feast (setup.py) platformdirs==3.11.0 # via # jupyter-core @@ -590,7 +530,6 @@ ply==3.11 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.45 @@ -605,7 +544,6 @@ proto-plus==1.23.0 # google-cloud-firestore protobuf==4.25.3 # via - # feast (setup.py) # google-api-core # google-cloud-bigquery # google-cloud-bigquery-storage @@ -623,11 +561,8 @@ protobuf==4.25.3 # proto-plus # substrait psutil==5.9.0 - # via - # feast (setup.py) - # ipykernel + # via ipykernel psycopg2-binary==2.9.9 - # via feast (setup.py) ptyprocess==0.7.0 # via # pexpect @@ -635,14 +570,12 @@ ptyprocess==0.7.0 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 - # feast (setup.py) # dask-expr # db-dtypes # deltalake @@ -660,19 +593,16 @@ pyasn1==0.6.0 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 - # feast (setup.py) # fastapi # great-expectations pydantic-core==2.18.2 # via pydantic pygments==2.18.0 # via - # feast (setup.py) # ipython # nbconvert # rich @@ -682,11 +612,8 @@ pyjwt[crypto]==2.8.0 # msal # snowflake-connector-python pymssql==2.3.0 - # via feast (setup.py) pymysql==1.1.1 - # via feast (setup.py) pyodbc==5.1.0 - # via feast (setup.py) pyopenssl==24.1.0 # via snowflake-connector-python pyparsing==3.1.2 @@ -698,10 +625,8 @@ pyproject-hooks==1.1.0 # 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 @@ -711,21 +636,13 @@ pytest==7.4.4 # 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 @@ -754,7 +671,6 @@ pytz==2024.1 # trino pyyaml==6.0.1 # via - # feast (setup.py) # dask # ibis-substrait # jupyter-events @@ -768,17 +684,14 @@ pyzmq==26.0.3 # jupyter-client # jupyter-server redis==4.6.0 - # via feast (setup.py) referencing==0.35.1 # via # jsonschema # jsonschema-specifications # jupyter-events regex==2024.4.28 - # via feast (setup.py) requests==2.31.0 # via - # feast (setup.py) # azure-core # cachecontrol # docker @@ -812,7 +725,6 @@ rich==13.7.1 # ibis-framework # typer rockset==2.1.2 - # via feast (setup.py) rpds-py==0.18.1 # via # jsonschema @@ -822,7 +734,6 @@ rsa==4.9 ruamel-yaml==0.17.17 # via great-expectations ruff==0.4.6 - # via feast (setup.py) s3transfer==0.10.1 # via boto3 scipy==1.13.1 @@ -856,13 +767,11 @@ sniffio==1.3.1 snowballstemmer==2.2.0 # via sphinx snowflake-connector-python[pandas]==3.10.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 @@ -877,7 +786,6 @@ sphinxcontrib-serializinghtml==1.1.10 # via sphinx sqlalchemy[mypy]==2.0.30 # via - # feast (setup.py) # duckdb-engine # ibis-framework # sqlalchemy-views @@ -886,7 +794,6 @@ sqlalchemy-views==0.3.2 sqlglot==20.11.0 # via ibis-framework sqlite-vec==0.0.1a10 - # via feast (setup.py) stack-data==0.6.3 # via ipython starlette==0.37.2 @@ -894,21 +801,17 @@ starlette==0.37.2 substrait==0.19.0 # via ibis-substrait tabulate==0.9.0 - # via feast (setup.py) tenacity==8.3.0 - # via feast (setup.py) terminado==0.18.1 # via # jupyter-server # jupyter-server-terminals testcontainers==4.4.0 - # via feast (setup.py) thriftpy2==0.5.0 # via happybase tinycss2==1.3.0 # via nbconvert toml==0.10.2 - # via feast (setup.py) tomli==2.0.1 # via # build @@ -935,9 +838,7 @@ tornado==6.4.1 # notebook # terminado tqdm==4.66.4 - # via - # feast (setup.py) - # great-expectations + # via great-expectations traitlets==5.14.3 # via # comm @@ -954,39 +855,25 @@ traitlets==5.14.3 # nbconvert # nbformat trino==0.328.0 - # via feast (setup.py) typeguard==4.2.1 - # via feast (setup.py) typer==0.12.3 # via fastapi-cli types-cffi==1.16.0.20240331 # via types-pyopenssl types-protobuf==3.19.22 - # via - # feast (setup.py) - # mypy-protobuf + # via 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 - # feast (setup.py) - # arrow + # via arrow 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==70.0.0.20240524 - # via - # feast (setup.py) - # types-cffi + # via 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 @@ -1022,7 +909,6 @@ uritemplate==4.1.1 # via google-api-python-client urllib3==1.26.18 # via - # feast (setup.py) # botocore # docker # elastic-transport @@ -1035,15 +921,12 @@ urllib3==1.26.18 # testcontainers uvicorn[standard]==0.29.0 # via - # feast (setup.py) # fastapi # fastapi-cli uvloop==0.19.0 # via uvicorn virtualenv==20.23.0 - # via - # feast (setup.py) - # pre-commit + # via pre-commit watchfiles==0.21.0 # via uvicorn wcwidth==0.2.13 diff --git a/sdk/python/requirements/py3.10-requirements.txt b/sdk/python/requirements/py3.10-requirements.txt index 23bd94feb5c..99c9bfc3fee 100644 --- a/sdk/python/requirements/py3.10-requirements.txt +++ b/sdk/python/requirements/py3.10-requirements.txt @@ -20,22 +20,17 @@ charset-normalizer==3.3.2 # via requests click==8.1.7 # via - # feast (setup.py) # dask # typer # uvicorn cloudpickle==3.0.0 # via dask colorama==0.4.6 - # via feast (setup.py) dask[dataframe]==2024.5.0 - # via - # feast (setup.py) - # dask-expr + # via dask-expr dask-expr==1.1.0 # via dask dill==0.3.8 - # via feast (setup.py) dnspython==2.6.1 # via email-validator email-validator==2.1.1 @@ -43,15 +38,14 @@ email-validator==2.1.1 exceptiongroup==1.2.1 # via anyio fastapi==0.111.0 - # via - # feast (setup.py) - # fastapi-cli + # via fastapi-cli fastapi-cli==0.0.2 # via fastapi fsspec==2024.3.1 # via dask +greenlet==3.0.3 + # via sqlalchemy gunicorn==22.0.0 - # via feast (setup.py) h11==0.14.0 # via # httpcore @@ -71,11 +65,8 @@ idna==3.7 importlib-metadata==7.1.0 # via dask jinja2==3.1.4 - # via - # feast (setup.py) - # fastapi + # via fastapi jsonschema==4.22.0 - # via feast (setup.py) jsonschema-specifications==2023.12.1 # via jsonschema locket==1.0.0 @@ -87,16 +78,13 @@ markupsafe==2.1.5 mdurl==0.1.2 # via markdown-it-py mmh3==4.1.0 - # via feast (setup.py) 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 - # feast (setup.py) # dask # pandas # pyarrow @@ -108,29 +96,20 @@ packaging==24.0 # gunicorn pandas==2.2.2 # via - # feast (setup.py) # dask # dask-expr partd==1.4.2 # via dask protobuf==4.25.3 - # via - # feast (setup.py) - # mypy-protobuf + # via mypy-protobuf pyarrow==16.0.0 - # via - # feast (setup.py) - # dask-expr + # via dask-expr pydantic==2.7.1 - # via - # feast (setup.py) - # fastapi + # via fastapi pydantic-core==2.18.2 # via pydantic pygments==2.18.0 - # via - # feast (setup.py) - # rich + # via rich python-dateutil==2.9.0.post0 # via pandas python-dotenv==1.0.1 @@ -141,7 +120,6 @@ pytz==2024.1 # via pandas pyyaml==6.0.1 # via - # feast (setup.py) # dask # uvicorn referencing==0.35.1 @@ -149,7 +127,6 @@ referencing==0.35.1 # jsonschema # jsonschema-specifications requests==2.31.0 - # via feast (setup.py) rich==13.7.1 # via typer rpds-py==0.18.1 @@ -165,17 +142,11 @@ sniffio==1.3.1 # anyio # httpx sqlalchemy[mypy]==2.0.30 - # via feast (setup.py) -sqlite-vec==0.0.1a10 - # via feast (setup.py) starlette==0.37.2 # via fastapi tabulate==0.9.0 - # via feast (setup.py) tenacity==8.3.0 - # via feast (setup.py) toml==0.10.2 - # via feast (setup.py) tomli==2.0.1 # via mypy toolz==0.12.1 @@ -183,9 +154,7 @@ toolz==0.12.1 # dask # partd tqdm==4.66.4 - # via feast (setup.py) typeguard==4.2.1 - # via feast (setup.py) typer==0.12.3 # via fastapi-cli types-protobuf==5.26.0.20240422 @@ -209,7 +178,6 @@ urllib3==2.2.1 # via requests uvicorn[standard]==0.29.0 # via - # feast (setup.py) # fastapi # fastapi-cli uvloop==0.19.0 diff --git a/sdk/python/requirements/py3.11-ci-requirements.txt b/sdk/python/requirements/py3.11-ci-requirements.txt index 718af8a2c70..f6db0af6bc0 100644 --- a/sdk/python/requirements/py3.11-ci-requirements.txt +++ b/sdk/python/requirements/py3.11-ci-requirements.txt @@ -1,7 +1,6 @@ # This file was autogenerated by uv via the following command: # uv pip compile --system --no-strip-extras setup.py --extra ci --output-file sdk/python/requirements/py3.11-ci-requirements.txt aiobotocore==2.13.0 - # via feast (setup.py) aiohttp==3.9.5 # via aiobotocore aioitertools==0.11.0 @@ -20,8 +19,6 @@ anyio==4.3.0 # jupyter-server # starlette # watchfiles -appnope==0.1.4 - # via ipykernel argon2-cffi==23.1.0 # via jupyter-server argon2-cffi-bindings==21.2.0 @@ -31,7 +28,6 @@ arrow==1.3.0 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 @@ -48,9 +44,7 @@ azure-core==1.30.1 # azure-identity # azure-storage-blob azure-identity==1.16.0 - # via feast (setup.py) azure-storage-blob==12.20.0 - # via feast (setup.py) babel==2.15.0 # via # jupyterlab-server @@ -62,9 +56,7 @@ bidict==0.23.1 bleach==6.1.0 # via nbconvert boto3==1.34.99 - # via - # feast (setup.py) - # moto + # via moto botocore==1.34.99 # via # aiobotocore @@ -72,15 +64,12 @@ botocore==1.34.99 # moto # s3transfer build==1.2.1 - # via - # feast (setup.py) - # pip-tools + # via 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 # elastic-transport @@ -103,7 +92,6 @@ charset-normalizer==3.3.2 # snowflake-connector-python click==8.1.7 # via - # feast (setup.py) # dask # geomet # great-expectations @@ -113,9 +101,7 @@ click==8.1.7 cloudpickle==3.0.0 # via dask colorama==0.4.6 - # via - # feast (setup.py) - # great-expectations + # via great-expectations comm==0.2.2 # via # ipykernel @@ -124,7 +110,6 @@ coverage[toml]==7.5.3 # via pytest-cov cryptography==42.0.7 # via - # feast (setup.py) # azure-identity # azure-storage-blob # great-expectations @@ -136,9 +121,7 @@ cryptography==42.0.7 # types-pyopenssl # types-redis dask[dataframe]==2024.5.0 - # via - # feast (setup.py) - # dask-expr + # via dask-expr dask-expr==1.1.0 # via dask db-dtypes==1.2.0 @@ -150,17 +133,13 @@ decorator==5.1.1 defusedxml==0.7.1 # via nbconvert deltalake==0.17.4 - # via feast (setup.py) dill==0.3.8 - # via feast (setup.py) distlib==0.3.8 # via virtualenv dnspython==2.6.1 # via email-validator docker==7.1.0 - # via - # feast (setup.py) - # testcontainers + # via testcontainers docutils==0.19 # via sphinx duckdb==0.10.3 @@ -172,7 +151,6 @@ duckdb-engine==0.12.1 elastic-transport==8.13.1 # via elasticsearch elasticsearch==8.13.2 - # via feast (setup.py) email-validator==2.1.1 # via fastapi entrypoints==0.4 @@ -182,9 +160,7 @@ execnet==2.1.1 executing==2.0.1 # via stack-data fastapi==0.111.0 - # via - # feast (setup.py) - # fastapi-cli + # via fastapi-cli fastapi-cli==0.0.2 # via fastapi fastjsonschema==2.19.1 @@ -194,7 +170,6 @@ filelock==3.14.0 # snowflake-connector-python # virtualenv firebase-admin==5.4.0 - # via feast (setup.py) fqdn==1.5.1 # via jsonschema frozenlist==1.4.1 @@ -202,16 +177,13 @@ frozenlist==1.4.1 # aiohttp # aiosignal fsspec==2023.12.2 - # via - # feast (setup.py) - # dask + # via dask geojson==2.5.0 # via rockset geomet==0.2.1.post1 # via cassandra-driver google-api-core[grpc]==2.19.0 # via - # feast (setup.py) # firebase-admin # google-api-python-client # google-cloud-bigquery @@ -236,11 +208,8 @@ google-auth==2.29.0 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.25.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 @@ -249,13 +218,10 @@ google-cloud-core==2.4.1 # 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 + # via firebase-admin google-crc32c==1.5.0 # via # google-cloud-storage @@ -266,17 +232,16 @@ google-resumable-media==2.7.0 # 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.15 - # via feast (setup.py) +greenlet==3.0.3 + # via sqlalchemy grpc-google-iam-v1==0.13.0 # via google-cloud-bigtable grpcio==1.64.0 # via - # feast (setup.py) # google-api-core # google-cloud-bigquery # googleapis-common-protos @@ -287,27 +252,19 @@ grpcio==1.64.0 # 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 - # via feast (setup.py) h11==0.14.0 # via # httpcore # uvicorn happybase==1.2.0 - # via feast (setup.py) hazelcast-python-client==5.4.0 - # via feast (setup.py) hiredis==2.3.2 - # via feast (setup.py) httpcore==1.0.5 # via httpx httplib2==0.22.0 @@ -318,15 +275,11 @@ httptools==0.6.1 # via uvicorn httpx==0.27.0 # via - # feast (setup.py) # fastapi # jupyterlab ibis-framework[duckdb]==8.0.0 - # via - # feast (setup.py) - # ibis-substrait + # via ibis-substrait ibis-substrait==3.2.0 - # via feast (setup.py) identify==2.5.36 # via pre-commit idna==3.7 @@ -361,7 +314,6 @@ jedi==0.19.1 # via ipython jinja2==3.1.4 # via - # feast (setup.py) # altair # fastapi # great-expectations @@ -385,7 +337,6 @@ jsonpointer==2.4 # jsonschema jsonschema[format-nongpl]==4.22.0 # via - # feast (setup.py) # altair # great-expectations # jupyter-events @@ -431,7 +382,6 @@ jupyterlab-server==2.27.2 jupyterlab-widgets==3.0.11 # via ipywidgets kubernetes==20.13.0 - # via feast (setup.py) locket==1.0.0 # via partd makefun==1.15.2 @@ -452,17 +402,13 @@ matplotlib-inline==0.1.7 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) moto==4.2.14 - # via feast (setup.py) msal==1.28.0 # via # azure-identity @@ -478,13 +424,10 @@ multidict==6.0.5 multipledispatch==1.0.0 # via ibis-framework mypy==1.10.0 - # via - # feast (setup.py) - # sqlalchemy + # via 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 @@ -507,7 +450,6 @@ notebook-shim==0.2.4 # notebook numpy==1.26.4 # via - # feast (setup.py) # altair # dask # db-dtypes @@ -544,7 +486,6 @@ packaging==24.0 # sphinx pandas==2.2.2 # via - # feast (setup.py) # altair # dask # dask-expr @@ -568,7 +509,6 @@ pexpect==4.9.0 pip==24.0 # via pip-tools pip-tools==7.4.1 - # via feast (setup.py) platformdirs==3.11.0 # via # jupyter-core @@ -581,7 +521,6 @@ ply==3.11 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.45 @@ -596,7 +535,6 @@ proto-plus==1.23.0 # google-cloud-firestore protobuf==4.25.3 # via - # feast (setup.py) # google-api-core # google-cloud-bigquery # google-cloud-bigquery-storage @@ -614,11 +552,8 @@ protobuf==4.25.3 # proto-plus # substrait psutil==5.9.0 - # via - # feast (setup.py) - # ipykernel + # via ipykernel psycopg2-binary==2.9.9 - # via feast (setup.py) ptyprocess==0.7.0 # via # pexpect @@ -626,14 +561,12 @@ ptyprocess==0.7.0 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 - # feast (setup.py) # dask-expr # db-dtypes # deltalake @@ -651,19 +584,16 @@ pyasn1==0.6.0 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 - # feast (setup.py) # fastapi # great-expectations pydantic-core==2.18.2 # via pydantic pygments==2.18.0 # via - # feast (setup.py) # ipython # nbconvert # rich @@ -673,11 +603,8 @@ pyjwt[crypto]==2.8.0 # msal # snowflake-connector-python pymssql==2.3.0 - # via feast (setup.py) pymysql==1.1.1 - # via feast (setup.py) pyodbc==5.1.0 - # via feast (setup.py) pyopenssl==24.1.0 # via snowflake-connector-python pyparsing==3.1.2 @@ -689,10 +616,8 @@ pyproject-hooks==1.1.0 # 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 @@ -702,21 +627,13 @@ pytest==7.4.4 # 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 @@ -745,7 +662,6 @@ pytz==2024.1 # trino pyyaml==6.0.1 # via - # feast (setup.py) # dask # ibis-substrait # jupyter-events @@ -759,17 +675,14 @@ pyzmq==26.0.3 # jupyter-client # jupyter-server redis==4.6.0 - # via feast (setup.py) referencing==0.35.1 # via # jsonschema # jsonschema-specifications # jupyter-events regex==2024.5.15 - # via feast (setup.py) requests==2.31.0 # via - # feast (setup.py) # azure-core # cachecontrol # docker @@ -803,7 +716,6 @@ rich==13.7.1 # ibis-framework # typer rockset==2.1.2 - # via feast (setup.py) rpds-py==0.18.1 # via # jsonschema @@ -813,7 +725,6 @@ rsa==4.9 ruamel-yaml==0.17.17 # via great-expectations ruff==0.4.6 - # via feast (setup.py) s3transfer==0.10.1 # via boto3 scipy==1.13.1 @@ -847,13 +758,11 @@ sniffio==1.3.1 snowballstemmer==2.2.0 # via sphinx snowflake-connector-python[pandas]==3.10.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 @@ -868,7 +777,6 @@ sphinxcontrib-serializinghtml==1.1.10 # via sphinx sqlalchemy[mypy]==2.0.30 # via - # feast (setup.py) # duckdb-engine # ibis-framework # sqlalchemy-views @@ -877,7 +785,6 @@ sqlalchemy-views==0.3.2 sqlglot==20.11.0 # via ibis-framework sqlite-vec==0.0.1a10 - # via feast (setup.py) stack-data==0.6.3 # via ipython starlette==0.37.2 @@ -885,21 +792,17 @@ starlette==0.37.2 substrait==0.19.0 # via ibis-substrait tabulate==0.9.0 - # via feast (setup.py) tenacity==8.3.0 - # via feast (setup.py) terminado==0.18.1 # via # jupyter-server # jupyter-server-terminals testcontainers==4.4.0 - # via feast (setup.py) thriftpy2==0.5.0 # via happybase tinycss2==1.3.0 # via nbconvert toml==0.10.2 - # via feast (setup.py) tomlkit==0.12.5 # via snowflake-connector-python toolz==0.12.1 @@ -917,9 +820,7 @@ tornado==6.4.1 # notebook # terminado tqdm==4.66.4 - # via - # feast (setup.py) - # great-expectations + # via great-expectations traitlets==5.14.3 # via # comm @@ -936,39 +837,25 @@ traitlets==5.14.3 # nbconvert # nbformat trino==0.328.0 - # via feast (setup.py) typeguard==4.2.1 - # via feast (setup.py) typer==0.12.3 # via fastapi-cli types-cffi==1.16.0.20240331 # via types-pyopenssl types-protobuf==3.19.22 - # via - # feast (setup.py) - # mypy-protobuf + # via 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 - # feast (setup.py) - # arrow + # via arrow 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==70.0.0.20240524 - # via - # feast (setup.py) - # types-cffi + # via 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 @@ -1001,7 +888,6 @@ uritemplate==4.1.1 # via google-api-python-client urllib3==1.26.18 # via - # feast (setup.py) # botocore # docker # elastic-transport @@ -1014,15 +900,12 @@ urllib3==1.26.18 # testcontainers uvicorn[standard]==0.29.0 # via - # feast (setup.py) # fastapi # fastapi-cli uvloop==0.19.0 # via uvicorn virtualenv==20.23.0 - # via - # feast (setup.py) - # pre-commit + # via pre-commit watchfiles==0.21.0 # via uvicorn wcwidth==0.2.13 diff --git a/sdk/python/requirements/py3.11-requirements.txt b/sdk/python/requirements/py3.11-requirements.txt index 9698eea6dff..c34b610d14c 100644 --- a/sdk/python/requirements/py3.11-requirements.txt +++ b/sdk/python/requirements/py3.11-requirements.txt @@ -20,36 +20,30 @@ charset-normalizer==3.3.2 # via requests click==8.1.7 # via - # feast (setup.py) # dask # typer # uvicorn cloudpickle==3.0.0 # via dask colorama==0.4.6 - # via feast (setup.py) dask[dataframe]==2024.5.0 - # via - # feast (setup.py) - # dask-expr + # via dask-expr dask-expr==1.1.0 # via dask dill==0.3.8 - # via feast (setup.py) dnspython==2.6.1 # via email-validator email-validator==2.1.1 # via fastapi fastapi==0.111.0 - # via - # feast (setup.py) - # fastapi-cli + # via fastapi-cli fastapi-cli==0.0.2 # via fastapi fsspec==2024.3.1 # via dask +greenlet==3.0.3 + # via sqlalchemy gunicorn==22.0.0 - # via feast (setup.py) h11==0.14.0 # via # httpcore @@ -69,11 +63,8 @@ idna==3.7 importlib-metadata==7.1.0 # via dask jinja2==3.1.4 - # via - # feast (setup.py) - # fastapi + # via fastapi jsonschema==4.22.0 - # via feast (setup.py) jsonschema-specifications==2023.12.1 # via jsonschema locket==1.0.0 @@ -85,16 +76,13 @@ markupsafe==2.1.5 mdurl==0.1.2 # via markdown-it-py mmh3==4.1.0 - # via feast (setup.py) 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 - # feast (setup.py) # dask # pandas # pyarrow @@ -106,29 +94,20 @@ packaging==24.0 # gunicorn pandas==2.2.2 # via - # feast (setup.py) # dask # dask-expr partd==1.4.2 # via dask protobuf==4.25.3 - # via - # feast (setup.py) - # mypy-protobuf + # via mypy-protobuf pyarrow==16.0.0 - # via - # feast (setup.py) - # dask-expr + # via dask-expr pydantic==2.7.1 - # via - # feast (setup.py) - # fastapi + # via fastapi pydantic-core==2.18.2 # via pydantic pygments==2.18.0 - # via - # feast (setup.py) - # rich + # via rich python-dateutil==2.9.0.post0 # via pandas python-dotenv==1.0.1 @@ -139,7 +118,6 @@ pytz==2024.1 # via pandas pyyaml==6.0.1 # via - # feast (setup.py) # dask # uvicorn referencing==0.35.1 @@ -147,7 +125,6 @@ referencing==0.35.1 # jsonschema # jsonschema-specifications requests==2.31.0 - # via feast (setup.py) rich==13.7.1 # via typer rpds-py==0.18.1 @@ -163,25 +140,17 @@ sniffio==1.3.1 # anyio # httpx sqlalchemy[mypy]==2.0.30 - # via feast (setup.py) -sqlite-vec==0.0.1a10 - # via feast (setup.py) starlette==0.37.2 # via fastapi tabulate==0.9.0 - # via feast (setup.py) tenacity==8.3.0 - # via feast (setup.py) toml==0.10.2 - # via feast (setup.py) toolz==0.12.1 # via # dask # partd tqdm==4.66.4 - # via feast (setup.py) typeguard==4.2.1 - # via feast (setup.py) typer==0.12.3 # via fastapi-cli types-protobuf==5.26.0.20240422 @@ -203,7 +172,6 @@ urllib3==2.2.1 # via requests uvicorn[standard]==0.29.0 # via - # feast (setup.py) # fastapi # fastapi-cli uvloop==0.19.0 diff --git a/sdk/python/requirements/py3.9-ci-requirements.txt b/sdk/python/requirements/py3.9-ci-requirements.txt index 2a2d33faf34..135b65a0ccc 100644 --- a/sdk/python/requirements/py3.9-ci-requirements.txt +++ b/sdk/python/requirements/py3.9-ci-requirements.txt @@ -1,7 +1,6 @@ # This file was autogenerated by uv via the following command: # uv pip compile --system --no-strip-extras setup.py --extra ci --output-file sdk/python/requirements/py3.9-ci-requirements.txt aiobotocore==2.13.0 - # via feast (setup.py) aiohttp==3.9.5 # via aiobotocore aioitertools==0.11.0 @@ -20,8 +19,6 @@ anyio==4.3.0 # jupyter-server # starlette # watchfiles -appnope==0.1.4 - # via ipykernel argon2-cffi==23.1.0 # via jupyter-server argon2-cffi-bindings==21.2.0 @@ -31,7 +28,6 @@ arrow==1.3.0 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 @@ -52,9 +48,7 @@ azure-core==1.30.1 # azure-identity # azure-storage-blob azure-identity==1.16.0 - # via feast (setup.py) azure-storage-blob==12.20.0 - # via feast (setup.py) babel==2.15.0 # via # jupyterlab-server @@ -66,9 +60,7 @@ bidict==0.23.1 bleach==6.1.0 # via nbconvert boto3==1.34.99 - # via - # feast (setup.py) - # moto + # via moto botocore==1.34.99 # via # aiobotocore @@ -76,15 +68,12 @@ botocore==1.34.99 # moto # s3transfer build==1.2.1 - # via - # feast (setup.py) - # pip-tools + # via 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 # elastic-transport @@ -107,7 +96,6 @@ charset-normalizer==3.3.2 # snowflake-connector-python click==8.1.7 # via - # feast (setup.py) # dask # geomet # great-expectations @@ -117,9 +105,7 @@ click==8.1.7 cloudpickle==3.0.0 # via dask colorama==0.4.6 - # via - # feast (setup.py) - # great-expectations + # via great-expectations comm==0.2.2 # via # ipykernel @@ -128,7 +114,6 @@ coverage[toml]==7.5.3 # via pytest-cov cryptography==42.0.7 # via - # feast (setup.py) # azure-identity # azure-storage-blob # great-expectations @@ -140,9 +125,7 @@ cryptography==42.0.7 # types-pyopenssl # types-redis dask[dataframe]==2024.5.0 - # via - # feast (setup.py) - # dask-expr + # via dask-expr dask-expr==1.1.0 # via dask db-dtypes==1.2.0 @@ -154,17 +137,13 @@ decorator==5.1.1 defusedxml==0.7.1 # via nbconvert deltalake==0.17.4 - # via feast (setup.py) dill==0.3.8 - # via feast (setup.py) distlib==0.3.8 # via virtualenv dnspython==2.6.1 # via email-validator docker==7.1.0 - # via - # feast (setup.py) - # testcontainers + # via testcontainers docutils==0.19 # via sphinx duckdb==0.10.3 @@ -176,7 +155,6 @@ duckdb-engine==0.12.1 elastic-transport==8.13.1 # via elasticsearch elasticsearch==8.13.2 - # via feast (setup.py) email-validator==2.1.1 # via fastapi entrypoints==0.4 @@ -191,9 +169,7 @@ execnet==2.1.1 executing==2.0.1 # via stack-data fastapi==0.111.0 - # via - # feast (setup.py) - # fastapi-cli + # via fastapi-cli fastapi-cli==0.0.2 # via fastapi fastjsonschema==2.19.1 @@ -203,7 +179,6 @@ filelock==3.14.0 # snowflake-connector-python # virtualenv firebase-admin==5.4.0 - # via feast (setup.py) fqdn==1.5.1 # via jsonschema frozenlist==1.4.1 @@ -211,16 +186,13 @@ frozenlist==1.4.1 # aiohttp # aiosignal fsspec==2023.12.2 - # via - # feast (setup.py) - # dask + # via dask geojson==2.5.0 # via rockset geomet==0.2.1.post1 # via cassandra-driver google-api-core[grpc]==2.19.0 # via - # feast (setup.py) # firebase-admin # google-api-python-client # google-cloud-bigquery @@ -245,11 +217,8 @@ google-auth==2.29.0 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.25.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 @@ -258,13 +227,10 @@ google-cloud-core==2.4.1 # 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 + # via firebase-admin google-crc32c==1.5.0 # via # google-cloud-storage @@ -275,17 +241,16 @@ google-resumable-media==2.7.0 # 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.15 - # via feast (setup.py) +greenlet==3.0.3 + # via sqlalchemy grpc-google-iam-v1==0.13.0 # via google-cloud-bigtable grpcio==1.64.0 # via - # feast (setup.py) # google-api-core # google-cloud-bigquery # googleapis-common-protos @@ -296,27 +261,19 @@ grpcio==1.64.0 # 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 - # via feast (setup.py) h11==0.14.0 # via # httpcore # uvicorn happybase==1.2.0 - # via feast (setup.py) hazelcast-python-client==5.4.0 - # via feast (setup.py) hiredis==2.3.2 - # via feast (setup.py) httpcore==1.0.5 # via httpx httplib2==0.22.0 @@ -327,15 +284,11 @@ httptools==0.6.1 # via uvicorn httpx==0.27.0 # via - # feast (setup.py) # fastapi # jupyterlab ibis-framework[duckdb]==8.0.0 - # via - # feast (setup.py) - # ibis-substrait + # via ibis-substrait ibis-substrait==3.2.0 - # via feast (setup.py) identify==2.5.36 # via pre-commit idna==3.7 @@ -379,7 +332,6 @@ jedi==0.19.1 # via ipython jinja2==3.1.4 # via - # feast (setup.py) # altair # fastapi # great-expectations @@ -403,7 +355,6 @@ jsonpointer==2.4 # jsonschema jsonschema[format-nongpl]==4.22.0 # via - # feast (setup.py) # altair # great-expectations # jupyter-events @@ -449,7 +400,6 @@ jupyterlab-server==2.27.2 jupyterlab-widgets==3.0.11 # via ipywidgets kubernetes==20.13.0 - # via feast (setup.py) locket==1.0.0 # via partd makefun==1.15.2 @@ -470,17 +420,13 @@ matplotlib-inline==0.1.7 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) moto==4.2.14 - # via feast (setup.py) msal==1.28.0 # via # azure-identity @@ -496,13 +442,10 @@ multidict==6.0.5 multipledispatch==1.0.0 # via ibis-framework mypy==1.10.0 - # via - # feast (setup.py) - # sqlalchemy + # via 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 @@ -525,7 +468,6 @@ notebook-shim==0.2.4 # notebook numpy==1.26.4 # via - # feast (setup.py) # altair # dask # db-dtypes @@ -562,7 +504,6 @@ packaging==24.0 # sphinx pandas==2.2.2 # via - # feast (setup.py) # altair # dask # dask-expr @@ -586,7 +527,6 @@ pexpect==4.9.0 pip==24.0 # via pip-tools pip-tools==7.4.1 - # via feast (setup.py) platformdirs==3.11.0 # via # jupyter-core @@ -599,7 +539,6 @@ ply==3.11 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.45 @@ -614,7 +553,6 @@ proto-plus==1.23.0 # google-cloud-firestore protobuf==4.25.3 # via - # feast (setup.py) # google-api-core # google-cloud-bigquery # google-cloud-bigquery-storage @@ -632,11 +570,8 @@ protobuf==4.25.3 # proto-plus # substrait psutil==5.9.0 - # via - # feast (setup.py) - # ipykernel + # via ipykernel psycopg2-binary==2.9.9 - # via feast (setup.py) ptyprocess==0.7.0 # via # pexpect @@ -644,14 +579,12 @@ ptyprocess==0.7.0 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 - # feast (setup.py) # dask-expr # db-dtypes # deltalake @@ -669,19 +602,16 @@ pyasn1==0.6.0 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 - # feast (setup.py) # fastapi # great-expectations pydantic-core==2.18.2 # via pydantic pygments==2.18.0 # via - # feast (setup.py) # ipython # nbconvert # rich @@ -691,11 +621,8 @@ pyjwt[crypto]==2.8.0 # msal # snowflake-connector-python pymssql==2.3.0 - # via feast (setup.py) pymysql==1.1.1 - # via feast (setup.py) pyodbc==5.1.0 - # via feast (setup.py) pyopenssl==24.1.0 # via snowflake-connector-python pyparsing==3.1.2 @@ -707,10 +634,8 @@ pyproject-hooks==1.1.0 # 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 @@ -720,21 +645,13 @@ pytest==7.4.4 # 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 @@ -763,7 +680,6 @@ pytz==2024.1 # trino pyyaml==6.0.1 # via - # feast (setup.py) # dask # ibis-substrait # jupyter-events @@ -777,17 +693,14 @@ pyzmq==26.0.3 # jupyter-client # jupyter-server redis==4.6.0 - # via feast (setup.py) referencing==0.35.1 # via # jsonschema # jsonschema-specifications # jupyter-events regex==2024.5.15 - # via feast (setup.py) requests==2.31.0 # via - # feast (setup.py) # azure-core # cachecontrol # docker @@ -821,7 +734,6 @@ rich==13.7.1 # ibis-framework # typer rockset==2.1.2 - # via feast (setup.py) rpds-py==0.18.1 # via # jsonschema @@ -833,7 +745,6 @@ ruamel-yaml==0.17.17 ruamel-yaml-clib==0.2.8 # via ruamel-yaml ruff==0.4.6 - # via feast (setup.py) s3transfer==0.10.1 # via boto3 scipy==1.13.1 @@ -867,13 +778,11 @@ sniffio==1.3.1 snowballstemmer==2.2.0 # via sphinx snowflake-connector-python[pandas]==3.10.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 @@ -888,7 +797,6 @@ sphinxcontrib-serializinghtml==1.1.10 # via sphinx sqlalchemy[mypy]==2.0.30 # via - # feast (setup.py) # duckdb-engine # ibis-framework # sqlalchemy-views @@ -897,7 +805,6 @@ sqlalchemy-views==0.3.2 sqlglot==20.11.0 # via ibis-framework sqlite-vec==0.0.1a10 - # via feast (setup.py) stack-data==0.6.3 # via ipython starlette==0.37.2 @@ -905,21 +812,17 @@ starlette==0.37.2 substrait==0.19.0 # via ibis-substrait tabulate==0.9.0 - # via feast (setup.py) tenacity==8.3.0 - # via feast (setup.py) terminado==0.18.1 # via # jupyter-server # jupyter-server-terminals testcontainers==4.4.0 - # via feast (setup.py) thriftpy2==0.5.0 # via happybase tinycss2==1.3.0 # via nbconvert toml==0.10.2 - # via feast (setup.py) tomli==2.0.1 # via # build @@ -946,9 +849,7 @@ tornado==6.4.1 # notebook # terminado tqdm==4.66.4 - # via - # feast (setup.py) - # great-expectations + # via great-expectations traitlets==5.14.3 # via # comm @@ -965,39 +866,25 @@ traitlets==5.14.3 # nbconvert # nbformat trino==0.328.0 - # via feast (setup.py) typeguard==4.2.1 - # via feast (setup.py) typer==0.12.3 # via fastapi-cli types-cffi==1.16.0.20240331 # via types-pyopenssl types-protobuf==3.19.22 - # via - # feast (setup.py) - # mypy-protobuf + # via mypy-protobuf types-pymysql==1.1.0.20240524 - # via feast (setup.py) types-pyopenssl==24.1.0.20240425 # via types-redis types-python-dateutil==2.9.0.20240316 - # via - # feast (setup.py) - # arrow + # via arrow 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==70.0.0.20240524 - # via - # feast (setup.py) - # types-cffi + # via 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 @@ -1035,7 +922,6 @@ uritemplate==4.1.1 # via google-api-python-client urllib3==1.26.18 # via - # feast (setup.py) # botocore # docker # elastic-transport @@ -1049,15 +935,12 @@ urllib3==1.26.18 # testcontainers uvicorn[standard]==0.29.0 # via - # feast (setup.py) # fastapi # fastapi-cli uvloop==0.19.0 # via uvicorn virtualenv==20.23.0 - # via - # feast (setup.py) - # pre-commit + # via pre-commit watchfiles==0.21.0 # via uvicorn wcwidth==0.2.13 diff --git a/sdk/python/requirements/py3.9-requirements.txt b/sdk/python/requirements/py3.9-requirements.txt index 579f39135e3..149a96626ef 100644 --- a/sdk/python/requirements/py3.9-requirements.txt +++ b/sdk/python/requirements/py3.9-requirements.txt @@ -20,22 +20,17 @@ charset-normalizer==3.3.2 # via requests click==8.1.7 # via - # feast (setup.py) # dask # typer # uvicorn cloudpickle==3.0.0 # via dask colorama==0.4.6 - # via feast (setup.py) dask[dataframe]==2024.5.0 - # via - # feast (setup.py) - # dask-expr + # via dask-expr dask-expr==1.1.0 # via dask dill==0.3.8 - # via feast (setup.py) dnspython==2.6.1 # via email-validator email-validator==2.1.1 @@ -43,15 +38,14 @@ email-validator==2.1.1 exceptiongroup==1.2.1 # via anyio fastapi==0.111.0 - # via - # feast (setup.py) - # fastapi-cli + # via fastapi-cli fastapi-cli==0.0.2 # via fastapi fsspec==2024.3.1 # via dask +greenlet==3.0.3 + # via sqlalchemy gunicorn==22.0.0 - # via feast (setup.py) h11==0.14.0 # via # httpcore @@ -73,11 +67,8 @@ importlib-metadata==7.1.0 # dask # typeguard jinja2==3.1.4 - # via - # feast (setup.py) - # fastapi + # via fastapi jsonschema==4.22.0 - # via feast (setup.py) jsonschema-specifications==2023.12.1 # via jsonschema locket==1.0.0 @@ -89,16 +80,13 @@ markupsafe==2.1.5 mdurl==0.1.2 # via markdown-it-py mmh3==4.1.0 - # via feast (setup.py) 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 - # feast (setup.py) # dask # pandas # pyarrow @@ -110,29 +98,20 @@ packaging==24.0 # gunicorn pandas==2.2.2 # via - # feast (setup.py) # dask # dask-expr partd==1.4.2 # via dask protobuf==4.25.3 - # via - # feast (setup.py) - # mypy-protobuf + # via mypy-protobuf pyarrow==16.0.0 - # via - # feast (setup.py) - # dask-expr + # via dask-expr pydantic==2.7.1 - # via - # feast (setup.py) - # fastapi + # via fastapi pydantic-core==2.18.2 # via pydantic pygments==2.18.0 - # via - # feast (setup.py) - # rich + # via rich python-dateutil==2.9.0.post0 # via pandas python-dotenv==1.0.1 @@ -143,7 +122,6 @@ pytz==2024.1 # via pandas pyyaml==6.0.1 # via - # feast (setup.py) # dask # uvicorn referencing==0.35.1 @@ -151,7 +129,6 @@ referencing==0.35.1 # jsonschema # jsonschema-specifications requests==2.31.0 - # via feast (setup.py) rich==13.7.1 # via typer rpds-py==0.18.1 @@ -167,17 +144,11 @@ sniffio==1.3.1 # anyio # httpx sqlalchemy[mypy]==2.0.30 - # via feast (setup.py) -sqlite-vec==0.0.1a10 - # via feast (setup.py) starlette==0.37.2 # via fastapi tabulate==0.9.0 - # via feast (setup.py) tenacity==8.3.0 - # via feast (setup.py) toml==0.10.2 - # via feast (setup.py) tomli==2.0.1 # via mypy toolz==0.12.1 @@ -185,9 +156,7 @@ toolz==0.12.1 # dask # partd tqdm==4.66.4 - # via feast (setup.py) typeguard==4.2.1 - # via feast (setup.py) typer==0.12.3 # via fastapi-cli types-protobuf==5.26.0.20240422 @@ -212,7 +181,6 @@ urllib3==2.2.1 # via requests uvicorn[standard]==0.29.0 # via - # feast (setup.py) # fastapi # fastapi-cli uvloop==0.19.0 diff --git a/sdk/python/tests/conftest.py b/sdk/python/tests/conftest.py index 48f482f5428..fb6b7e56085 100644 --- a/sdk/python/tests/conftest.py +++ b/sdk/python/tests/conftest.py @@ -257,12 +257,7 @@ def pytest_generate_tests(metafunc: pytest.Metafunc): extra_dimensions: List[Dict[str, Any]] = [{}] if "python_server" in metafunc.fixturenames: - extra_dimensions.extend( - [ - {"python_feature_server": True}, - {"python_feature_server": True, "provider": "aws"}, - ] - ) + extra_dimensions.extend([{"python_feature_server": True}]) configs = [] if offline_stores: @@ -277,17 +272,6 @@ def pytest_generate_tests(metafunc: pytest.Metafunc): **dim, } - # aws lambda works only with dynamo - if ( - config.get("python_feature_server") - and config.get("provider") == "aws" - and ( - not isinstance(online_store, dict) - or online_store["type"] != "dynamodb" - ) - ): - continue - c = IntegrationTestRepoConfig(**config) if c not in _config_cache: diff --git a/sdk/python/tests/integration/feature_repos/repo_configuration.py b/sdk/python/tests/integration/feature_repos/repo_configuration.py index 7123bd0fc15..9e3c02b9c01 100644 --- a/sdk/python/tests/integration/feature_repos/repo_configuration.py +++ b/sdk/python/tests/integration/feature_repos/repo_configuration.py @@ -474,27 +474,12 @@ def construct_test_environment( else: online_creator = None - if test_repo_config.python_feature_server and test_repo_config.provider == "aws": - from feast.infra.feature_servers.aws_lambda.config import ( - AwsLambdaFeatureServerConfig, - ) - - feature_server: Any = AwsLambdaFeatureServerConfig( - enabled=True, - execution_role_name=os.getenv( - "AWS_LAMBDA_ROLE", - "arn:aws:iam::402087665549:role/lambda_execution_role", - ), - ) - else: - feature_server = LocalFeatureServerConfig( - feature_logging=FeatureLoggingConfig(enabled=True) - ) + feature_server = LocalFeatureServerConfig( + feature_logging=FeatureLoggingConfig(enabled=True) + ) repo_dir_name = tempfile.mkdtemp() - if ( - test_repo_config.python_feature_server and test_repo_config.provider == "aws" - ) or test_repo_config.registry_location == RegistryLocation.S3: + if test_repo_config.registry_location == RegistryLocation.S3: aws_registry_path = os.getenv( "AWS_REGISTRY_PATH", "s3://feast-int-bucket/registries" ) diff --git a/setup.py b/setup.py index 9b3d0e55e62..f954f198988 100644 --- a/setup.py +++ b/setup.py @@ -84,7 +84,7 @@ "hiredis>=2.0.0,<3", ] -AWS_REQUIRED = ["boto3>=1.17.0,<2", "docker>=5.0.2", "fsspec<=2024.1.0", "aiobotocore>2,<3"] +AWS_REQUIRED = ["boto3>=1.17.0,<2", "fsspec<=2024.1.0", "aiobotocore>2,<3"] KUBERNETES_REQUIRED = ["kubernetes<=20.13.0"]