From b5ef3843499f575d4cacb9988b98b9778f67ee3b Mon Sep 17 00:00:00 2001 From: Rob Howley Date: Wed, 5 Jun 2024 16:15:21 -0400 Subject: [PATCH] feat: Add online_read_async for dynamodb (#4244) --- .../feast/infra/online_stores/dynamodb.py | 191 +++++++++++++---- .../requirements/py3.10-ci-requirements.txt | 185 ++++++++++++++-- .../requirements/py3.10-requirements.txt | 50 ++++- .../requirements/py3.11-ci-requirements.txt | 202 ++++++++++++++++-- .../requirements/py3.11-requirements.txt | 54 ++++- .../requirements/py3.9-ci-requirements.txt | 201 ++++++++++++++--- .../requirements/py3.9-requirements.txt | 55 +++-- .../feature_repos/repo_configuration.py | 4 +- .../online_store/test_universal_online.py | 2 +- setup.py | 2 +- 10 files changed, 790 insertions(+), 156 deletions(-) diff --git a/sdk/python/feast/infra/online_stores/dynamodb.py b/sdk/python/feast/infra/online_stores/dynamodb.py index 0ee9af185d..b2488543b0 100644 --- a/sdk/python/feast/infra/online_stores/dynamodb.py +++ b/sdk/python/feast/infra/online_stores/dynamodb.py @@ -33,6 +33,8 @@ try: import boto3 + from aiobotocore import session + from boto3.dynamodb.types import TypeDeserializer from botocore.config import Config from botocore.exceptions import ClientError except ImportError as e: @@ -80,6 +82,7 @@ class DynamoDBOnlineStore(OnlineStore): _dynamodb_client = None _dynamodb_resource = None + _aioboto_session = None def update( self, @@ -223,6 +226,7 @@ def online_read( """ online_config = config.online_store assert isinstance(online_config, DynamoDBOnlineStoreConfig) + dynamodb_resource = self._get_dynamodb_resource( online_config.region, online_config.endpoint_url ) @@ -230,62 +234,95 @@ def online_read( _get_table_name(online_config, config, table) ) - result: List[Tuple[Optional[datetime], Optional[Dict[str, ValueProto]]]] = [] - entity_ids = [ - compute_entity_id( - entity_key, - entity_key_serialization_version=config.entity_key_serialization_version, - ) - for entity_key in entity_keys - ] batch_size = online_config.batch_size + entity_ids = self._to_entity_ids(config, entity_keys) entity_ids_iter = iter(entity_ids) + result: List[Tuple[Optional[datetime], Optional[Dict[str, ValueProto]]]] = [] + while True: batch = list(itertools.islice(entity_ids_iter, batch_size)) - batch_result: List[ - Tuple[Optional[datetime], Optional[Dict[str, ValueProto]]] - ] = [] + # No more items to insert if len(batch) == 0: break - batch_entity_ids = { - table_instance.name: { - "Keys": [{"entity_id": entity_id} for entity_id in batch], - "ConsistentRead": online_config.consistent_reads, - } - } + batch_entity_ids = self._to_resource_batch_get_payload( + online_config, table_instance.name, batch + ) response = dynamodb_resource.batch_get_item( RequestItems=batch_entity_ids, ) - response = response.get("Responses") - table_responses = response.get(table_instance.name) - if table_responses: - table_responses = self._sort_dynamodb_response( - table_responses, entity_ids - ) - entity_idx = 0 - for tbl_res in table_responses: - entity_id = tbl_res["entity_id"] - while entity_id != batch[entity_idx]: - batch_result.append((None, None)) - entity_idx += 1 - res = {} - for feature_name, value_bin in tbl_res["values"].items(): - val = ValueProto() - val.ParseFromString(value_bin.value) - res[feature_name] = val - batch_result.append( - (datetime.fromisoformat(tbl_res["event_ts"]), res) - ) - entity_idx += 1 - - # Not all entities in a batch may have responses - # Pad with remaining values in batch that were not found - batch_size_nones = ((None, None),) * (len(batch) - len(batch_result)) - batch_result.extend(batch_size_nones) + batch_result = self._process_batch_get_response( + table_instance.name, response, entity_ids, batch + ) result.extend(batch_result) return result + async def online_read_async( + self, + config: RepoConfig, + table: FeatureView, + entity_keys: List[EntityKeyProto], + requested_features: Optional[List[str]] = None, + ) -> List[Tuple[Optional[datetime], Optional[Dict[str, ValueProto]]]]: + """ + Reads features values for the given entity keys asynchronously. + + Args: + config: The config for the current feature store. + table: The feature view whose feature values should be read. + entity_keys: The list of entity keys for which feature values should be read. + requested_features: The list of features that should be read. + + Returns: + A list of the same length as entity_keys. Each item in the list is a tuple where the first + item is the event timestamp for the row, and the second item is a dict mapping feature names + to values, which are returned in proto format. + """ + online_config = config.online_store + assert isinstance(online_config, DynamoDBOnlineStoreConfig) + + batch_size = online_config.batch_size + entity_ids = self._to_entity_ids(config, entity_keys) + entity_ids_iter = iter(entity_ids) + result: List[Tuple[Optional[datetime], Optional[Dict[str, ValueProto]]]] = [] + table_name = _get_table_name(online_config, config, table) + + deserialize = TypeDeserializer().deserialize + + def to_tbl_resp(raw_client_response): + return { + "entity_id": deserialize(raw_client_response["entity_id"]), + "event_ts": deserialize(raw_client_response["event_ts"]), + "values": deserialize(raw_client_response["values"]), + } + + async with self._get_aiodynamodb_client(online_config.region) as client: + while True: + batch = list(itertools.islice(entity_ids_iter, batch_size)) + + # No more items to insert + if len(batch) == 0: + break + batch_entity_ids = self._to_client_batch_get_payload( + online_config, table_name, batch + ) + response = await client.batch_get_item( + RequestItems=batch_entity_ids, + ) + batch_result = self._process_batch_get_response( + table_name, response, entity_ids, batch, to_tbl_response=to_tbl_resp + ) + result.extend(batch_result) + return result + + def _get_aioboto_session(self): + if self._aioboto_session is None: + self._aioboto_session = session.get_session() + return self._aioboto_session + + def _get_aiodynamodb_client(self, region: str): + return self._get_aioboto_session().create_client("dynamodb", region_name=region) + def _get_dynamodb_client(self, region: str, endpoint_url: Optional[str] = None): if self._dynamodb_client is None: self._dynamodb_client = _initialize_dynamodb_client(region, endpoint_url) @@ -298,13 +335,19 @@ def _get_dynamodb_resource(self, region: str, endpoint_url: Optional[str] = None ) return self._dynamodb_resource - def _sort_dynamodb_response(self, responses: list, order: list) -> Any: + def _sort_dynamodb_response( + self, + responses: list, + order: list, + to_tbl_response: Callable = lambda raw_dict: raw_dict, + ) -> Any: """DynamoDB Batch Get Item doesn't return items in a particular order.""" # Assign an index to order order_with_index = {value: idx for idx, value in enumerate(order)} # Sort table responses by index table_responses_ordered: Any = [ - (order_with_index[tbl_res["entity_id"]], tbl_res) for tbl_res in responses + (order_with_index[tbl_res["entity_id"]], tbl_res) + for tbl_res in map(to_tbl_response, responses) ] table_responses_ordered = sorted( table_responses_ordered, key=lambda tup: tup[0] @@ -341,6 +384,64 @@ def _write_batch_non_duplicates( if progress: progress(1) + def _process_batch_get_response( + self, table_name, response, entity_ids, batch, **sort_kwargs + ): + response = response.get("Responses") + table_responses = response.get(table_name) + + batch_result = [] + if table_responses: + table_responses = self._sort_dynamodb_response( + table_responses, entity_ids, **sort_kwargs + ) + entity_idx = 0 + for tbl_res in table_responses: + entity_id = tbl_res["entity_id"] + while entity_id != batch[entity_idx]: + batch_result.append((None, None)) + entity_idx += 1 + res = {} + for feature_name, value_bin in tbl_res["values"].items(): + val = ValueProto() + val.ParseFromString(value_bin.value) + res[feature_name] = val + batch_result.append((datetime.fromisoformat(tbl_res["event_ts"]), res)) + entity_idx += 1 + # Not all entities in a batch may have responses + # Pad with remaining values in batch that were not found + batch_size_nones = ((None, None),) * (len(batch) - len(batch_result)) + batch_result.extend(batch_size_nones) + return batch_result + + @staticmethod + def _to_entity_ids(config: RepoConfig, entity_keys: List[EntityKeyProto]): + return [ + compute_entity_id( + entity_key, + entity_key_serialization_version=config.entity_key_serialization_version, + ) + for entity_key in entity_keys + ] + + @staticmethod + def _to_resource_batch_get_payload(online_config, table_name, batch): + return { + table_name: { + "Keys": [{"entity_id": entity_id} for entity_id in batch], + "ConsistentRead": online_config.consistent_reads, + } + } + + @staticmethod + def _to_client_batch_get_payload(online_config, table_name, batch): + return { + table_name: { + "Keys": [{"entity_id": {"S": entity_id}} for entity_id in batch], + "ConsistentRead": online_config.consistent_reads, + } + } + def _initialize_dynamodb_client(region: str, endpoint_url: Optional[str] = None): return boto3.client( diff --git a/sdk/python/requirements/py3.10-ci-requirements.txt b/sdk/python/requirements/py3.10-ci-requirements.txt index 3040b8e651..fd5d4631e5 100644 --- a/sdk/python/requirements/py3.10-ci-requirements.txt +++ b/sdk/python/requirements/py3.10-ci-requirements.txt @@ -1,5 +1,13 @@ # 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 + # via aiobotocore +aiosignal==1.3.1 + # via aiohttp alabaster==0.7.16 # via sphinx altair==4.2.2 @@ -12,6 +20,8 @@ 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 @@ -21,16 +31,20 @@ 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 # via jupyterlab async-timeout==4.0.3 - # via redis + # via + # aiohttp + # redis atpublic==4.1.0 # via ibis-framework attrs==23.2.0 # via + # aiohttp # jsonschema # referencing azure-core==1.30.1 @@ -38,7 +52,9 @@ azure-core==1.30.1 # azure-identity # azure-storage-blob azure-identity==1.16.0 + # via feast (setup.py) azure-storage-blob==12.19.1 + # via feast (setup.py) babel==2.15.0 # via # jupyterlab-server @@ -50,21 +66,28 @@ bidict==0.23.1 bleach==6.1.0 # via nbconvert boto3==1.34.99 - # via moto + # via + # feast (setup.py) + # moto botocore==1.34.99 # via + # aiobotocore # boto3 # moto # s3transfer build==1.2.1 - # via pip-tools + # via + # feast (setup.py) + # pip-tools cachecontrol==0.14.0 # via firebase-admin cachetools==5.3.3 # via google-auth cassandra-driver==3.29.1 + # via feast (setup.py) certifi==2024.2.2 # via + # elastic-transport # httpcore # httpx # kubernetes @@ -84,6 +107,7 @@ charset-normalizer==3.3.2 # snowflake-connector-python click==8.1.7 # via + # feast (setup.py) # dask # geomet # great-expectations @@ -93,7 +117,9 @@ click==8.1.7 cloudpickle==3.0.0 # via dask colorama==0.4.6 - # via great-expectations + # via + # feast (setup.py) + # great-expectations comm==0.2.2 # via # ipykernel @@ -102,6 +128,7 @@ coverage[toml]==7.5.1 # via pytest-cov cryptography==42.0.7 # via + # feast (setup.py) # azure-identity # azure-storage-blob # great-expectations @@ -113,7 +140,9 @@ cryptography==42.0.7 # types-pyopenssl # types-redis dask[dataframe]==2024.5.0 - # via dask-expr + # via + # feast (setup.py) + # dask-expr dask-expr==1.1.0 # via dask db-dtypes==1.2.0 @@ -125,13 +154,17 @@ 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.0.0 - # via testcontainers + # via + # feast (setup.py) + # testcontainers docutils==0.19 # via sphinx duckdb==0.10.2 @@ -140,6 +173,10 @@ duckdb==0.10.2 # ibis-framework duckdb-engine==0.12.0 # via ibis-framework +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 @@ -154,7 +191,9 @@ execnet==2.1.1 executing==2.0.1 # via stack-data fastapi==0.111.0 - # via fastapi-cli + # via + # feast (setup.py) + # fastapi-cli fastapi-cli==0.0.2 # via fastapi fastjsonschema==2.19.1 @@ -164,16 +203,24 @@ 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 + # via + # aiohttp + # aiosignal fsspec==2023.12.2 - # via dask + # via + # feast (setup.py) + # 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 @@ -198,8 +245,11 @@ 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 @@ -208,10 +258,13 @@ 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 firebase-admin + # via + # feast (setup.py) + # firebase-admin google-crc32c==1.5.0 # via # google-cloud-storage @@ -222,16 +275,17 @@ 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.13 -greenlet==3.0.3 - # via sqlalchemy + # via feast (setup.py) grpc-google-iam-v1==0.13.0 # via google-cloud-bigtable grpcio==1.63.0 # via + # feast (setup.py) # google-api-core # google-cloud-bigquery # googleapis-common-protos @@ -242,19 +296,27 @@ grpcio==1.63.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.3.0 + # via feast (setup.py) hiredis==2.3.2 + # via feast (setup.py) httpcore==1.0.5 # via httpx httplib2==0.22.0 @@ -265,11 +327,15 @@ httptools==0.6.1 # via uvicorn httpx==0.27.0 # via + # feast (setup.py) # fastapi # jupyterlab ibis-framework[duckdb]==8.0.0 - # via ibis-substrait + # via + # feast (setup.py) + # ibis-substrait ibis-substrait==3.2.0 + # via feast (setup.py) identify==2.5.36 # via pre-commit idna==3.7 @@ -280,6 +346,7 @@ idna==3.7 # jsonschema # requests # snowflake-connector-python + # yarl imagesize==1.4.1 # via sphinx importlib-metadata==7.1.0 @@ -303,6 +370,7 @@ jedi==0.19.1 # via ipython jinja2==3.1.4 # via + # feast (setup.py) # altair # fastapi # great-expectations @@ -326,6 +394,7 @@ jsonpointer==2.4 # jsonschema jsonschema[format-nongpl]==4.22.0 # via + # feast (setup.py) # altair # great-expectations # jupyter-events @@ -371,6 +440,7 @@ jupyterlab-server==2.27.1 jupyterlab-widgets==3.0.10 # via ipywidgets kubernetes==20.13.0 + # via feast (setup.py) locket==1.0.0 # via partd makefun==1.15.2 @@ -391,13 +461,17 @@ 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 @@ -406,13 +480,20 @@ msal-extensions==1.1.0 # via azure-identity msgpack==1.0.8 # via cachecontrol +multidict==6.0.5 + # via + # aiohttp + # yarl multipledispatch==1.0.0 # via ibis-framework mypy==1.10.0 - # via sqlalchemy + # via + # feast (setup.py) + # sqlalchemy mypy-extensions==1.0.0 # via mypy mypy-protobuf==3.3.0 + # via feast (setup.py) nbclient==0.10.0 # via nbconvert nbconvert==7.16.4 @@ -435,6 +516,7 @@ notebook-shim==0.2.4 # notebook numpy==1.26.4 # via + # feast (setup.py) # altair # dask # db-dtypes @@ -472,6 +554,7 @@ packaging==24.0 # sphinx pandas==2.2.2 # via + # feast (setup.py) # altair # dask # dask-expr @@ -495,6 +578,7 @@ 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 @@ -507,6 +591,7 @@ 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.43 @@ -521,6 +606,7 @@ 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 @@ -538,8 +624,11 @@ protobuf==4.25.3 # proto-plus # substrait psutil==5.9.0 - # via ipykernel + # via + # feast (setup.py) + # ipykernel psycopg2-binary==2.9.9 + # via feast (setup.py) ptyprocess==0.7.0 # via # pexpect @@ -547,12 +636,14 @@ 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 @@ -570,16 +661,19 @@ 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 @@ -589,8 +683,11 @@ 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 @@ -602,8 +699,10 @@ 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 @@ -613,13 +712,21 @@ 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 @@ -648,6 +755,7 @@ pytz==2024.1 # trino pyyaml==6.0.1 # via + # feast (setup.py) # dask # ibis-substrait # jupyter-events @@ -661,14 +769,17 @@ 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 @@ -702,6 +813,7 @@ rich==13.7.1 # ibis-framework # typer rockset==2.1.2 + # via feast (setup.py) rpds-py==0.18.1 # via # jsonschema @@ -711,6 +823,7 @@ rsa==4.9 ruamel-yaml==0.17.17 # via great-expectations ruff==0.4.3 + # via feast (setup.py) s3transfer==0.10.1 # via boto3 scipy==1.13.0 @@ -745,11 +858,13 @@ sniffio==1.3.1 snowballstemmer==2.2.0 # via sphinx snowflake-connector-python[pandas]==3.10.0 + # 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 @@ -764,6 +879,7 @@ sphinxcontrib-serializinghtml==1.1.10 # via sphinx sqlalchemy[mypy]==2.0.30 # via + # feast (setup.py) # duckdb-engine # ibis-framework # sqlalchemy-views @@ -778,17 +894,21 @@ starlette==0.37.2 substrait==0.17.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 @@ -815,7 +935,9 @@ tornado==6.4 # notebook # terminado tqdm==4.66.4 - # via great-expectations + # via + # feast (setup.py) + # great-expectations traitlets==5.14.3 # via # comm @@ -832,25 +954,39 @@ 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 mypy-protobuf + # via + # feast (setup.py) + # mypy-protobuf types-pymysql==1.1.0.20240425 + # via feast (setup.py) types-pyopenssl==24.1.0.20240425 # via types-redis types-python-dateutil==2.9.0.20240316 - # via arrow + # via + # feast (setup.py) + # 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==69.5.0.20240423 - # via types-cffi + # via + # feast (setup.py) + # types-cffi types-tabulate==0.9.0.20240106 + # via feast (setup.py) types-urllib3==1.26.25.14 # via types-requests typing-extensions==4.11.0 @@ -886,8 +1022,10 @@ uritemplate==4.1.1 # via google-api-python-client urllib3==1.26.18 # via + # feast (setup.py) # botocore # docker + # elastic-transport # great-expectations # kubernetes # minio @@ -897,12 +1035,15 @@ 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 pre-commit + # via + # feast (setup.py) + # pre-commit watchfiles==0.21.0 # via uvicorn wcwidth==0.2.13 @@ -926,8 +1067,12 @@ wheel==0.43.0 widgetsnbextension==4.0.10 # via ipywidgets wrapt==1.16.0 - # via testcontainers + # via + # aiobotocore + # testcontainers xmltodict==0.13.0 # via moto +yarl==1.9.4 + # via aiohttp zipp==3.18.1 # via importlib-metadata diff --git a/sdk/python/requirements/py3.10-requirements.txt b/sdk/python/requirements/py3.10-requirements.txt index 56a8259ab4..72124636b6 100644 --- a/sdk/python/requirements/py3.10-requirements.txt +++ b/sdk/python/requirements/py3.10-requirements.txt @@ -20,17 +20,22 @@ 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 dask-expr + # via + # feast (setup.py) + # 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 @@ -38,14 +43,15 @@ email-validator==2.1.1 exceptiongroup==1.2.1 # via anyio fastapi==0.111.0 - # via fastapi-cli + # via + # feast (setup.py) + # 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 @@ -65,8 +71,11 @@ idna==3.7 importlib-metadata==7.1.0 # via dask jinja2==3.1.4 - # via fastapi + # via + # feast (setup.py) + # fastapi jsonschema==4.22.0 + # via feast (setup.py) jsonschema-specifications==2023.12.1 # via jsonschema locket==1.0.0 @@ -78,13 +87,16 @@ 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 @@ -96,20 +108,29 @@ 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 mypy-protobuf + # via + # feast (setup.py) + # mypy-protobuf pyarrow==16.0.0 - # via dask-expr + # via + # feast (setup.py) + # dask-expr pydantic==2.7.1 - # via fastapi + # via + # feast (setup.py) + # fastapi pydantic-core==2.18.2 # via pydantic pygments==2.18.0 - # via rich + # via + # feast (setup.py) + # rich python-dateutil==2.9.0.post0 # via pandas python-dotenv==1.0.1 @@ -120,6 +141,7 @@ pytz==2024.1 # via pandas pyyaml==6.0.1 # via + # feast (setup.py) # dask # uvicorn referencing==0.35.1 @@ -127,6 +149,7 @@ 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 @@ -142,11 +165,15 @@ sniffio==1.3.1 # anyio # httpx sqlalchemy[mypy]==2.0.30 + # 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 @@ -154,7 +181,9 @@ 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 @@ -178,6 +207,7 @@ urllib3==2.2.1 # via requests uvicorn[standard]==0.29.0 # via + # feast (setup.py) # fastapi # fastapi-cli uvloop==0.19.0 @@ -187,4 +217,4 @@ watchfiles==0.21.0 websockets==12.0 # via uvicorn zipp==3.18.1 - # via importlib-metadata \ No newline at end of file + # via importlib-metadata diff --git a/sdk/python/requirements/py3.11-ci-requirements.txt b/sdk/python/requirements/py3.11-ci-requirements.txt index 9baa3d74ec..bd0647a3fe 100644 --- a/sdk/python/requirements/py3.11-ci-requirements.txt +++ b/sdk/python/requirements/py3.11-ci-requirements.txt @@ -1,5 +1,13 @@ # 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 + # via aiobotocore +aiosignal==1.3.1 + # via aiohttp alabaster==0.7.16 # via sphinx altair==4.2.2 @@ -12,6 +20,8 @@ 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 @@ -21,14 +31,20 @@ 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 # via jupyterlab +async-timeout==4.0.3 + # via + # aiohttp + # redis atpublic==4.1.0 # via ibis-framework attrs==23.2.0 # via + # aiohttp # jsonschema # referencing azure-core==1.30.1 @@ -36,7 +52,9 @@ azure-core==1.30.1 # azure-identity # azure-storage-blob azure-identity==1.16.0 + # via feast (setup.py) azure-storage-blob==12.19.1 + # via feast (setup.py) babel==2.15.0 # via # jupyterlab-server @@ -48,21 +66,28 @@ bidict==0.23.1 bleach==6.1.0 # via nbconvert boto3==1.34.99 - # via moto + # via + # feast (setup.py) + # moto botocore==1.34.99 # via + # aiobotocore # boto3 # moto # s3transfer build==1.2.1 - # via pip-tools + # via + # feast (setup.py) + # pip-tools cachecontrol==0.14.0 # via firebase-admin cachetools==5.3.3 # via google-auth cassandra-driver==3.29.1 + # via feast (setup.py) certifi==2024.2.2 # via + # elastic-transport # httpcore # httpx # kubernetes @@ -82,6 +107,7 @@ charset-normalizer==3.3.2 # snowflake-connector-python click==8.1.7 # via + # feast (setup.py) # dask # geomet # great-expectations @@ -91,7 +117,9 @@ click==8.1.7 cloudpickle==3.0.0 # via dask colorama==0.4.6 - # via great-expectations + # via + # feast (setup.py) + # great-expectations comm==0.2.2 # via # ipykernel @@ -100,6 +128,7 @@ coverage[toml]==7.5.1 # via pytest-cov cryptography==42.0.7 # via + # feast (setup.py) # azure-identity # azure-storage-blob # great-expectations @@ -111,7 +140,9 @@ cryptography==42.0.7 # types-pyopenssl # types-redis dask[dataframe]==2024.5.0 - # via dask-expr + # via + # feast (setup.py) + # dask-expr dask-expr==1.1.0 # via dask db-dtypes==1.2.0 @@ -123,13 +154,17 @@ 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.0.0 - # via testcontainers + # via + # feast (setup.py) + # testcontainers docutils==0.19 # via sphinx duckdb==0.10.2 @@ -138,16 +173,27 @@ duckdb==0.10.2 # ibis-framework duckdb-engine==0.12.0 # via ibis-framework +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 # via altair +exceptiongroup==1.2.1 + # via + # anyio + # ipython + # pytest execnet==2.1.1 # via pytest-xdist executing==2.0.1 # via stack-data fastapi==0.111.0 - # via fastapi-cli + # via + # feast (setup.py) + # fastapi-cli fastapi-cli==0.0.2 # via fastapi fastjsonschema==2.19.1 @@ -157,16 +203,24 @@ 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 + # via + # aiohttp + # aiosignal fsspec==2023.12.2 - # via dask + # via + # feast (setup.py) + # 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 @@ -191,8 +245,11 @@ 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 @@ -201,10 +258,13 @@ 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 firebase-admin + # via + # feast (setup.py) + # firebase-admin google-crc32c==1.5.0 # via # google-cloud-storage @@ -215,16 +275,17 @@ 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.13 -greenlet==3.0.3 - # via sqlalchemy + # via feast (setup.py) grpc-google-iam-v1==0.13.0 # via google-cloud-bigtable grpcio==1.63.0 # via + # feast (setup.py) # google-api-core # google-cloud-bigquery # googleapis-common-protos @@ -235,19 +296,27 @@ grpcio==1.63.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.3.0 + # via feast (setup.py) hiredis==2.3.2 + # via feast (setup.py) httpcore==1.0.5 # via httpx httplib2==0.22.0 @@ -258,11 +327,15 @@ httptools==0.6.1 # via uvicorn httpx==0.27.0 # via + # feast (setup.py) # fastapi # jupyterlab ibis-framework[duckdb]==8.0.0 - # via ibis-substrait + # via + # feast (setup.py) + # ibis-substrait ibis-substrait==3.2.0 + # via feast (setup.py) identify==2.5.36 # via pre-commit idna==3.7 @@ -273,6 +346,7 @@ idna==3.7 # jsonschema # requests # snowflake-connector-python + # yarl imagesize==1.4.1 # via sphinx importlib-metadata==7.1.0 @@ -296,6 +370,7 @@ jedi==0.19.1 # via ipython jinja2==3.1.4 # via + # feast (setup.py) # altair # fastapi # great-expectations @@ -319,6 +394,7 @@ jsonpointer==2.4 # jsonschema jsonschema[format-nongpl]==4.22.0 # via + # feast (setup.py) # altair # great-expectations # jupyter-events @@ -364,6 +440,7 @@ jupyterlab-server==2.27.1 jupyterlab-widgets==3.0.10 # via ipywidgets kubernetes==20.13.0 + # via feast (setup.py) locket==1.0.0 # via partd makefun==1.15.2 @@ -384,13 +461,17 @@ 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 @@ -399,13 +480,20 @@ msal-extensions==1.1.0 # via azure-identity msgpack==1.0.8 # via cachecontrol +multidict==6.0.5 + # via + # aiohttp + # yarl multipledispatch==1.0.0 # via ibis-framework mypy==1.10.0 - # via sqlalchemy + # via + # feast (setup.py) + # sqlalchemy mypy-extensions==1.0.0 # via mypy mypy-protobuf==3.3.0 + # via feast (setup.py) nbclient==0.10.0 # via nbconvert nbconvert==7.16.4 @@ -428,6 +516,7 @@ notebook-shim==0.2.4 # notebook numpy==1.26.4 # via + # feast (setup.py) # altair # dask # db-dtypes @@ -465,6 +554,7 @@ packaging==24.0 # sphinx pandas==2.2.2 # via + # feast (setup.py) # altair # dask # dask-expr @@ -488,6 +578,7 @@ 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 @@ -500,6 +591,7 @@ 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.43 @@ -514,6 +606,7 @@ 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 @@ -531,8 +624,11 @@ protobuf==4.25.3 # proto-plus # substrait psutil==5.9.0 - # via ipykernel + # via + # feast (setup.py) + # ipykernel psycopg2-binary==2.9.9 + # via feast (setup.py) ptyprocess==0.7.0 # via # pexpect @@ -540,12 +636,14 @@ 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 @@ -563,16 +661,19 @@ 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 @@ -582,8 +683,11 @@ 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 @@ -595,8 +699,10 @@ 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 @@ -606,13 +712,21 @@ 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 @@ -641,6 +755,7 @@ pytz==2024.1 # trino pyyaml==6.0.1 # via + # feast (setup.py) # dask # ibis-substrait # jupyter-events @@ -654,14 +769,17 @@ 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 @@ -695,6 +813,7 @@ rich==13.7.1 # ibis-framework # typer rockset==2.1.2 + # via feast (setup.py) rpds-py==0.18.1 # via # jsonschema @@ -704,6 +823,7 @@ rsa==4.9 ruamel-yaml==0.17.17 # via great-expectations ruff==0.4.3 + # via feast (setup.py) s3transfer==0.10.1 # via boto3 scipy==1.13.0 @@ -738,11 +858,13 @@ sniffio==1.3.1 snowballstemmer==2.2.0 # via sphinx snowflake-connector-python[pandas]==3.10.0 + # 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 @@ -757,6 +879,7 @@ sphinxcontrib-serializinghtml==1.1.10 # via sphinx sqlalchemy[mypy]==2.0.30 # via + # feast (setup.py) # duckdb-engine # ibis-framework # sqlalchemy-views @@ -771,17 +894,30 @@ starlette==0.37.2 substrait==0.17.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 + # coverage + # jupyterlab + # mypy + # pip-tools + # pytest + # pytest-env tomlkit==0.12.4 # via snowflake-connector-python toolz==0.12.1 @@ -799,7 +935,9 @@ tornado==6.4 # notebook # terminado tqdm==4.66.4 - # via great-expectations + # via + # feast (setup.py) + # great-expectations traitlets==5.14.3 # via # comm @@ -816,29 +954,45 @@ 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 mypy-protobuf + # via + # feast (setup.py) + # mypy-protobuf types-pymysql==1.1.0.20240425 + # via feast (setup.py) types-pyopenssl==24.1.0.20240425 # via types-redis types-python-dateutil==2.9.0.20240316 - # via arrow + # via + # feast (setup.py) + # 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==69.5.0.20240423 - # via types-cffi + # via + # feast (setup.py) + # types-cffi types-tabulate==0.9.0.20240106 + # via feast (setup.py) types-urllib3==1.26.25.14 # via types-requests typing-extensions==4.11.0 # via + # anyio + # async-lru # azure-core # azure-storage-blob # fastapi @@ -853,6 +1007,7 @@ typing-extensions==4.11.0 # testcontainers # typeguard # typer + # uvicorn tzdata==2024.1 # via pandas tzlocal==5.2 @@ -867,8 +1022,10 @@ uritemplate==4.1.1 # via google-api-python-client urllib3==1.26.18 # via + # feast (setup.py) # botocore # docker + # elastic-transport # great-expectations # kubernetes # minio @@ -878,12 +1035,15 @@ 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 pre-commit + # via + # feast (setup.py) + # pre-commit watchfiles==0.21.0 # via uvicorn wcwidth==0.2.13 @@ -907,8 +1067,12 @@ wheel==0.43.0 widgetsnbextension==4.0.10 # via ipywidgets wrapt==1.16.0 - # via testcontainers + # via + # aiobotocore + # testcontainers xmltodict==0.13.0 # via moto +yarl==1.9.4 + # via aiohttp zipp==3.18.1 # via importlib-metadata diff --git a/sdk/python/requirements/py3.11-requirements.txt b/sdk/python/requirements/py3.11-requirements.txt index c34b610d14..a381a6262b 100644 --- a/sdk/python/requirements/py3.11-requirements.txt +++ b/sdk/python/requirements/py3.11-requirements.txt @@ -20,30 +20,38 @@ 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 dask-expr + # via + # feast (setup.py) + # 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 +exceptiongroup==1.2.1 + # via anyio fastapi==0.111.0 - # via fastapi-cli + # via + # feast (setup.py) + # 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 @@ -63,8 +71,11 @@ idna==3.7 importlib-metadata==7.1.0 # via dask jinja2==3.1.4 - # via fastapi + # via + # feast (setup.py) + # fastapi jsonschema==4.22.0 + # via feast (setup.py) jsonschema-specifications==2023.12.1 # via jsonschema locket==1.0.0 @@ -76,13 +87,16 @@ 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 @@ -94,20 +108,29 @@ 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 mypy-protobuf + # via + # feast (setup.py) + # mypy-protobuf pyarrow==16.0.0 - # via dask-expr + # via + # feast (setup.py) + # dask-expr pydantic==2.7.1 - # via fastapi + # via + # feast (setup.py) + # fastapi pydantic-core==2.18.2 # via pydantic pygments==2.18.0 - # via rich + # via + # feast (setup.py) + # rich python-dateutil==2.9.0.post0 # via pandas python-dotenv==1.0.1 @@ -118,6 +141,7 @@ pytz==2024.1 # via pandas pyyaml==6.0.1 # via + # feast (setup.py) # dask # uvicorn referencing==0.35.1 @@ -125,6 +149,7 @@ 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 @@ -140,23 +165,32 @@ sniffio==1.3.1 # anyio # httpx sqlalchemy[mypy]==2.0.30 + # 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 # 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 # via mypy-protobuf typing-extensions==4.11.0 # via + # anyio # fastapi # mypy # pydantic @@ -164,6 +198,7 @@ typing-extensions==4.11.0 # sqlalchemy # typeguard # typer + # uvicorn tzdata==2024.1 # via pandas ujson==5.9.0 @@ -172,6 +207,7 @@ 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 ca3bc1a16e..2456c85248 100644 --- a/sdk/python/requirements/py3.9-ci-requirements.txt +++ b/sdk/python/requirements/py3.9-ci-requirements.txt @@ -1,5 +1,13 @@ # 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 + # via aiobotocore +aiosignal==1.3.1 + # via aiohttp alabaster==0.7.16 # via sphinx altair==4.2.2 @@ -12,6 +20,8 @@ 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 @@ -21,16 +31,20 @@ 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 # via jupyterlab async-timeout==4.0.3 - # via redis + # via + # aiohttp + # redis atpublic==4.1.0 # via ibis-framework attrs==23.2.0 # via + # aiohttp # jsonschema # referencing azure-core==1.30.1 @@ -38,7 +52,9 @@ azure-core==1.30.1 # azure-identity # azure-storage-blob azure-identity==1.16.0 + # via feast (setup.py) azure-storage-blob==12.19.1 + # via feast (setup.py) babel==2.15.0 # via # jupyterlab-server @@ -50,21 +66,28 @@ bidict==0.23.1 bleach==6.1.0 # via nbconvert boto3==1.34.99 - # via moto + # via + # feast (setup.py) + # moto botocore==1.34.99 # via + # aiobotocore # boto3 # moto # s3transfer build==1.2.1 - # via pip-tools + # via + # feast (setup.py) + # pip-tools cachecontrol==0.14.0 # via firebase-admin cachetools==5.3.3 # via google-auth cassandra-driver==3.29.1 + # via feast (setup.py) certifi==2024.2.2 # via + # elastic-transport # httpcore # httpx # kubernetes @@ -84,6 +107,7 @@ charset-normalizer==3.3.2 # snowflake-connector-python click==8.1.7 # via + # feast (setup.py) # dask # geomet # great-expectations @@ -93,7 +117,9 @@ click==8.1.7 cloudpickle==3.0.0 # via dask colorama==0.4.6 - # via great-expectations + # via + # feast (setup.py) + # great-expectations comm==0.2.2 # via # ipykernel @@ -102,6 +128,7 @@ coverage[toml]==7.5.1 # via pytest-cov cryptography==42.0.7 # via + # feast (setup.py) # azure-identity # azure-storage-blob # great-expectations @@ -113,7 +140,9 @@ cryptography==42.0.7 # types-pyopenssl # types-redis dask[dataframe]==2024.5.0 - # via dask-expr + # via + # feast (setup.py) + # dask-expr dask-expr==1.1.0 # via dask db-dtypes==1.2.0 @@ -125,13 +154,17 @@ 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.0.0 - # via testcontainers + # via + # feast (setup.py) + # testcontainers docutils==0.19 # via sphinx duckdb==0.10.2 @@ -140,6 +173,10 @@ duckdb==0.10.2 # ibis-framework duckdb-engine==0.12.0 # via ibis-framework +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 @@ -154,7 +191,9 @@ execnet==2.1.1 executing==2.0.1 # via stack-data fastapi==0.111.0 - # via fastapi-cli + # via + # feast (setup.py) + # fastapi-cli fastapi-cli==0.0.2 # via fastapi fastjsonschema==2.19.1 @@ -164,16 +203,24 @@ 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 + # via + # aiohttp + # aiosignal fsspec==2023.12.2 - # via dask + # via + # feast (setup.py) + # 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 @@ -198,8 +245,11 @@ 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 @@ -208,10 +258,13 @@ 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 firebase-admin + # via + # feast (setup.py) + # firebase-admin google-crc32c==1.5.0 # via # google-cloud-storage @@ -222,16 +275,17 @@ 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.13 -greenlet==3.0.3 - # via sqlalchemy + # via feast (setup.py) grpc-google-iam-v1==0.13.0 # via google-cloud-bigtable grpcio==1.63.0 # via + # feast (setup.py) # google-api-core # google-cloud-bigquery # googleapis-common-protos @@ -242,19 +296,27 @@ grpcio==1.63.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.3.0 + # via feast (setup.py) hiredis==2.3.2 + # via feast (setup.py) httpcore==1.0.5 # via httpx httplib2==0.22.0 @@ -265,11 +327,15 @@ httptools==0.6.1 # via uvicorn httpx==0.27.0 # via + # feast (setup.py) # fastapi # jupyterlab ibis-framework[duckdb]==8.0.0 - # via ibis-substrait + # via + # feast (setup.py) + # ibis-substrait ibis-substrait==3.2.0 + # via feast (setup.py) identify==2.5.36 # via pre-commit idna==3.7 @@ -280,19 +346,11 @@ idna==3.7 # jsonschema # requests # snowflake-connector-python + # yarl imagesize==1.4.1 # via sphinx importlib-metadata==7.1.0 - # via - # build - # dask - # jupyter-client - # jupyter-lsp - # jupyterlab - # jupyterlab-server - # nbconvert - # sphinx - # typeguard + # via dask iniconfig==2.0.0 # via pytest ipykernel==6.29.4 @@ -312,6 +370,7 @@ jedi==0.19.1 # via ipython jinja2==3.1.4 # via + # feast (setup.py) # altair # fastapi # great-expectations @@ -335,6 +394,7 @@ jsonpointer==2.4 # jsonschema jsonschema[format-nongpl]==4.22.0 # via + # feast (setup.py) # altair # great-expectations # jupyter-events @@ -380,6 +440,7 @@ jupyterlab-server==2.27.1 jupyterlab-widgets==3.0.10 # via ipywidgets kubernetes==20.13.0 + # via feast (setup.py) locket==1.0.0 # via partd makefun==1.15.2 @@ -400,13 +461,17 @@ 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 @@ -415,13 +480,20 @@ msal-extensions==1.1.0 # via azure-identity msgpack==1.0.8 # via cachecontrol +multidict==6.0.5 + # via + # aiohttp + # yarl multipledispatch==1.0.0 # via ibis-framework mypy==1.10.0 - # via sqlalchemy + # via + # feast (setup.py) + # sqlalchemy mypy-extensions==1.0.0 # via mypy mypy-protobuf==3.3.0 + # via feast (setup.py) nbclient==0.10.0 # via nbconvert nbconvert==7.16.4 @@ -444,6 +516,7 @@ notebook-shim==0.2.4 # notebook numpy==1.26.4 # via + # feast (setup.py) # altair # dask # db-dtypes @@ -481,6 +554,7 @@ packaging==24.0 # sphinx pandas==2.2.2 # via + # feast (setup.py) # altair # dask # dask-expr @@ -504,6 +578,7 @@ 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 @@ -516,6 +591,7 @@ 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.43 @@ -530,6 +606,7 @@ 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 @@ -547,8 +624,11 @@ protobuf==4.25.3 # proto-plus # substrait psutil==5.9.0 - # via ipykernel + # via + # feast (setup.py) + # ipykernel psycopg2-binary==2.9.9 + # via feast (setup.py) ptyprocess==0.7.0 # via # pexpect @@ -556,12 +636,14 @@ 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 @@ -579,16 +661,19 @@ 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 @@ -598,8 +683,11 @@ 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 @@ -611,8 +699,10 @@ 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 @@ -622,13 +712,21 @@ 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 @@ -657,6 +755,7 @@ pytz==2024.1 # trino pyyaml==6.0.1 # via + # feast (setup.py) # dask # ibis-substrait # jupyter-events @@ -670,14 +769,17 @@ 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 @@ -711,6 +813,7 @@ rich==13.7.1 # ibis-framework # typer rockset==2.1.2 + # via feast (setup.py) rpds-py==0.18.1 # via # jsonschema @@ -719,9 +822,8 @@ rsa==4.9 # via google-auth ruamel-yaml==0.17.17 # via great-expectations -ruamel-yaml-clib==0.2.8 - # via ruamel-yaml ruff==0.4.3 + # via feast (setup.py) s3transfer==0.10.1 # via boto3 scipy==1.13.0 @@ -756,11 +858,13 @@ sniffio==1.3.1 snowballstemmer==2.2.0 # via sphinx snowflake-connector-python[pandas]==3.10.0 + # 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 @@ -775,6 +879,7 @@ sphinxcontrib-serializinghtml==1.1.10 # via sphinx sqlalchemy[mypy]==2.0.30 # via + # feast (setup.py) # duckdb-engine # ibis-framework # sqlalchemy-views @@ -789,17 +894,21 @@ starlette==0.37.2 substrait==0.17.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 @@ -826,7 +935,9 @@ tornado==6.4 # notebook # terminado tqdm==4.66.4 - # via great-expectations + # via + # feast (setup.py) + # great-expectations traitlets==5.14.3 # via # comm @@ -843,25 +954,39 @@ 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 mypy-protobuf + # via + # feast (setup.py) + # mypy-protobuf types-pymysql==1.1.0.20240425 + # via feast (setup.py) types-pyopenssl==24.1.0.20240425 # via types-redis types-python-dateutil==2.9.0.20240316 - # via arrow + # via + # feast (setup.py) + # 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==69.5.0.20240423 - # via types-cffi + # via + # feast (setup.py) + # types-cffi types-tabulate==0.9.0.20240106 + # via feast (setup.py) types-urllib3==1.26.25.14 # via types-requests typing-extensions==4.11.0 @@ -873,13 +998,11 @@ typing-extensions==4.11.0 # fastapi # great-expectations # ibis-framework - # ipython # mypy # pydantic # pydantic-core # snowflake-connector-python # sqlalchemy - # starlette # testcontainers # typeguard # typer @@ -898,24 +1021,28 @@ uritemplate==4.1.1 # via google-api-python-client urllib3==1.26.18 # via + # feast (setup.py) # botocore # docker + # elastic-transport # great-expectations # kubernetes # minio # requests # responses # rockset - # snowflake-connector-python # testcontainers uvicorn[standard]==0.29.0 # via + # feast (setup.py) # fastapi # fastapi-cli uvloop==0.19.0 # via uvicorn virtualenv==20.23.0 - # via pre-commit + # via + # feast (setup.py) + # pre-commit watchfiles==0.21.0 # via uvicorn wcwidth==0.2.13 @@ -939,8 +1066,12 @@ wheel==0.43.0 widgetsnbextension==4.0.10 # via ipywidgets wrapt==1.16.0 - # via testcontainers + # via + # aiobotocore + # testcontainers xmltodict==0.13.0 # via moto +yarl==1.9.4 + # via aiohttp zipp==3.18.1 # via importlib-metadata diff --git a/sdk/python/requirements/py3.9-requirements.txt b/sdk/python/requirements/py3.9-requirements.txt index 1092aac9d0..72f422bfac 100644 --- a/sdk/python/requirements/py3.9-requirements.txt +++ b/sdk/python/requirements/py3.9-requirements.txt @@ -20,17 +20,22 @@ 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 dask-expr + # via + # feast (setup.py) + # 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 @@ -38,14 +43,15 @@ email-validator==2.1.1 exceptiongroup==1.2.1 # via anyio fastapi==0.111.0 - # via fastapi-cli + # via + # feast (setup.py) + # 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 @@ -63,12 +69,13 @@ idna==3.7 # httpx # requests importlib-metadata==7.1.0 - # via - # dask - # typeguard + # via dask jinja2==3.1.4 - # via fastapi + # via + # feast (setup.py) + # fastapi jsonschema==4.22.0 + # via feast (setup.py) jsonschema-specifications==2023.12.1 # via jsonschema locket==1.0.0 @@ -80,13 +87,16 @@ 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 @@ -98,20 +108,29 @@ 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 mypy-protobuf + # via + # feast (setup.py) + # mypy-protobuf pyarrow==16.0.0 - # via dask-expr + # via + # feast (setup.py) + # dask-expr pydantic==2.7.1 - # via fastapi + # via + # feast (setup.py) + # fastapi pydantic-core==2.18.2 # via pydantic pygments==2.18.0 - # via rich + # via + # feast (setup.py) + # rich python-dateutil==2.9.0.post0 # via pandas python-dotenv==1.0.1 @@ -122,6 +141,7 @@ pytz==2024.1 # via pandas pyyaml==6.0.1 # via + # feast (setup.py) # dask # uvicorn referencing==0.35.1 @@ -129,6 +149,7 @@ 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 @@ -144,11 +165,15 @@ sniffio==1.3.1 # anyio # httpx sqlalchemy[mypy]==2.0.30 + # 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 @@ -156,7 +181,9 @@ 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 @@ -169,7 +196,6 @@ typing-extensions==4.11.0 # pydantic # pydantic-core # sqlalchemy - # starlette # typeguard # typer # uvicorn @@ -181,6 +207,7 @@ urllib3==2.2.1 # via requests uvicorn[standard]==0.29.0 # via + # feast (setup.py) # fastapi # fastapi-cli uvloop==0.19.0 @@ -190,4 +217,4 @@ watchfiles==0.21.0 websockets==12.0 # via uvicorn zipp==3.18.1 - # via importlib-metadata \ No newline at end of file + # via importlib-metadata diff --git a/sdk/python/tests/integration/feature_repos/repo_configuration.py b/sdk/python/tests/integration/feature_repos/repo_configuration.py index 2f260e87a6..0545496f33 100644 --- a/sdk/python/tests/integration/feature_repos/repo_configuration.py +++ b/sdk/python/tests/integration/feature_repos/repo_configuration.py @@ -34,7 +34,6 @@ from tests.integration.feature_repos.universal.data_sources.file import ( DuckDBDataSourceCreator, DuckDBDeltaDataSourceCreator, - DuckDBDeltaS3DataSourceCreator, FileDataSourceCreator, ) from tests.integration.feature_repos.universal.data_sources.redshift import ( @@ -127,7 +126,8 @@ if os.getenv("FEAST_IS_LOCAL_TEST", "False") == "True": AVAILABLE_OFFLINE_STORES.extend( [ - ("local", DuckDBDeltaS3DataSourceCreator), + # todo: @tokoko to reenable + # ("local", DuckDBDeltaS3DataSourceCreator), ] ) diff --git a/sdk/python/tests/integration/online_store/test_universal_online.py b/sdk/python/tests/integration/online_store/test_universal_online.py index 4822a8d4f7..4cb474d2f1 100644 --- a/sdk/python/tests/integration/online_store/test_universal_online.py +++ b/sdk/python/tests/integration/online_store/test_universal_online.py @@ -476,7 +476,7 @@ def test_online_retrieval_with_event_timestamps(environment, universal_data_sour @pytest.mark.integration -@pytest.mark.universal_online_stores(only=["redis"]) +@pytest.mark.universal_online_stores(only=["redis", "dynamodb"]) def test_async_online_retrieval_with_event_timestamps( environment, universal_data_sources ): diff --git a/setup.py b/setup.py index cdab69b684..6d849a83b4 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"] +AWS_REQUIRED = ["boto3>=1.17.0,<2", "docker>=5.0.2", "fsspec<=2024.1.0", "aiobotocore>2,<3"] KUBERNETES_REQUIRED = ["kubernetes<=20.13.0"]