diff --git a/Makefile b/Makefile index b44aaf0ee5a..613d6880559 100644 --- a/Makefile +++ b/Makefile @@ -331,6 +331,17 @@ test-python-universal-cassandra-no-cloud-providers: not test_snowflake" \ sdk/python/tests +test-python-universal-singlestore-online: + PYTHONPATH='.' \ + FULL_REPO_CONFIGS_MODULE=sdk.python.feast.infra.online_stores.contrib.singlestore_repo_configuration \ + PYTEST_PLUGINS=sdk.python.tests.integration.feature_repos.universal.online_store.singlestore \ + python -m pytest -n 8 --integration \ + -k "not test_universal_cli and \ + not gcs_registry and \ + not s3_registry and \ + not test_snowflake" \ + sdk/python/tests + test-python-universal: python -m pytest -n 8 --integration sdk/python/tests diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index 06c5edcc8b0..f55ab0d92fe 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -103,6 +103,7 @@ * [Rockset (contrib)](reference/online-stores/rockset.md) * [Hazelcast (contrib)](reference/online-stores/hazelcast.md) * [ScyllaDB (contrib)](reference/online-stores/scylladb.md) + * [SingleStore (contrib)](reference/online-stores/singlestore.md) * [Providers](reference/providers/README.md) * [Local](reference/providers/local.md) * [Google Cloud Platform](reference/providers/google-cloud-platform.md) diff --git a/docs/reference/online-stores/README.md b/docs/reference/online-stores/README.md index b5f4eb8de89..0acf6701f92 100644 --- a/docs/reference/online-stores/README.md +++ b/docs/reference/online-stores/README.md @@ -64,4 +64,7 @@ Please see [Online Store](../../getting-started/architecture-and-components/onli {% content-ref url="remote.md" %} [remote.md](remote.md) + +{% content-ref url="singlestore.md" %} +[singlestore.md](singlestore.md) {% endcontent-ref %} diff --git a/docs/reference/online-stores/singlestore.md b/docs/reference/online-stores/singlestore.md new file mode 100644 index 00000000000..1777787f227 --- /dev/null +++ b/docs/reference/online-stores/singlestore.md @@ -0,0 +1,51 @@ +# SingleStore online store (contrib) + +## Description + +The SingleStore online store provides support for materializing feature values into a SingleStore database for serving online features. + +## Getting started +In order to use this online store, you'll need to run `pip install 'feast[singlestore]'`. You can get started by then running `feast init` and then setting the `feature_store.yaml` as described below. + +## Example + +{% code title="feature_store.yaml" %} +```yaml +project: my_feature_repo +registry: data/registry.db +provider: local +online_store: + type: singlestore + host: DB_HOST + port: DB_PORT + database: DB_NAME + user: DB_USERNAME + password: DB_PASSWORD +``` +{% endcode %} + +## Functionality Matrix + +The set of functionality supported by online stores is described in detail [here](overview.md#functionality). +Below is a matrix indicating which functionality is supported by the SingleStore online store. + +| | SingleStore | +| :-------------------------------------------------------- | :----------- | +| write feature values to the online store | yes | +| read feature values from the online store | yes | +| update infrastructure (e.g. tables) in the online store | yes | +| teardown infrastructure (e.g. tables) in the online store | yes | +| generate a plan of infrastructure changes | no | +| support for on-demand transforms | yes | +| readable by Python SDK | yes | +| readable by Java | no | +| readable by Go | no | +| support for entityless feature views | yes | +| support for concurrent writing to the same key | no | +| support for ttl (time to live) at retrieval | no | +| support for deleting expired data | no | +| collocated by feature view | yes | +| collocated by feature service | no | +| collocated by entity key | no | + +To compare this set of functionality against other online stores, please see the full [functionality matrix](overview.md#functionality-matrix). diff --git a/sdk/python/docs/source/feast.embedded_go.rst b/sdk/python/docs/source/feast.embedded_go.rst new file mode 100644 index 00000000000..3b18d280ab0 --- /dev/null +++ b/sdk/python/docs/source/feast.embedded_go.rst @@ -0,0 +1,29 @@ +feast.embedded\_go package +========================== + +Submodules +---------- + +feast.embedded\_go.online\_features\_service module +--------------------------------------------------- + +.. automodule:: feast.embedded_go.online_features_service + :members: + :undoc-members: + :show-inheritance: + +feast.embedded\_go.type\_map module +----------------------------------- + +.. automodule:: feast.embedded_go.type_map + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: feast.embedded_go + :members: + :undoc-members: + :show-inheritance: diff --git a/sdk/python/docs/source/feast.infra.contrib.rst b/sdk/python/docs/source/feast.infra.contrib.rst new file mode 100644 index 00000000000..7b2fa3cc9c5 --- /dev/null +++ b/sdk/python/docs/source/feast.infra.contrib.rst @@ -0,0 +1,45 @@ +feast.infra.contrib package +=========================== + +Submodules +---------- + +feast.infra.contrib.azure\_provider module +------------------------------------------ + +.. automodule:: feast.infra.contrib.azure_provider + :members: + :undoc-members: + :show-inheritance: + +feast.infra.contrib.grpc\_server module +--------------------------------------- + +.. automodule:: feast.infra.contrib.grpc_server + :members: + :undoc-members: + :show-inheritance: + +feast.infra.contrib.spark\_kafka\_processor module +-------------------------------------------------- + +.. automodule:: feast.infra.contrib.spark_kafka_processor + :members: + :undoc-members: + :show-inheritance: + +feast.infra.contrib.stream\_processor module +-------------------------------------------- + +.. automodule:: feast.infra.contrib.stream_processor + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: feast.infra.contrib + :members: + :undoc-members: + :show-inheritance: diff --git a/sdk/python/docs/source/feast.infra.feature_servers.aws_lambda.rst b/sdk/python/docs/source/feast.infra.feature_servers.aws_lambda.rst new file mode 100644 index 00000000000..de90bfc0002 --- /dev/null +++ b/sdk/python/docs/source/feast.infra.feature_servers.aws_lambda.rst @@ -0,0 +1,29 @@ +feast.infra.feature\_servers.aws\_lambda package +================================================ + +Submodules +---------- + +feast.infra.feature\_servers.aws\_lambda.app module +--------------------------------------------------- + +.. automodule:: feast.infra.feature_servers.aws_lambda.app + :members: + :undoc-members: + :show-inheritance: + +feast.infra.feature\_servers.aws\_lambda.config module +------------------------------------------------------ + +.. automodule:: feast.infra.feature_servers.aws_lambda.config + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: feast.infra.feature_servers.aws_lambda + :members: + :undoc-members: + :show-inheritance: diff --git a/sdk/python/docs/source/feast.infra.feature_servers.gcp_cloudrun.rst b/sdk/python/docs/source/feast.infra.feature_servers.gcp_cloudrun.rst new file mode 100644 index 00000000000..f7fdaf5b361 --- /dev/null +++ b/sdk/python/docs/source/feast.infra.feature_servers.gcp_cloudrun.rst @@ -0,0 +1,29 @@ +feast.infra.feature\_servers.gcp\_cloudrun package +================================================== + +Submodules +---------- + +feast.infra.feature\_servers.gcp\_cloudrun.app module +----------------------------------------------------- + +.. automodule:: feast.infra.feature_servers.gcp_cloudrun.app + :members: + :undoc-members: + :show-inheritance: + +feast.infra.feature\_servers.gcp\_cloudrun.config module +-------------------------------------------------------- + +.. automodule:: feast.infra.feature_servers.gcp_cloudrun.config + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: feast.infra.feature_servers.gcp_cloudrun + :members: + :undoc-members: + :show-inheritance: diff --git a/sdk/python/docs/source/feast.infra.feature_servers.local_process.rst b/sdk/python/docs/source/feast.infra.feature_servers.local_process.rst new file mode 100644 index 00000000000..003b9dcb2ee --- /dev/null +++ b/sdk/python/docs/source/feast.infra.feature_servers.local_process.rst @@ -0,0 +1,21 @@ +feast.infra.feature\_servers.local\_process package +=================================================== + +Submodules +---------- + +feast.infra.feature\_servers.local\_process.config module +--------------------------------------------------------- + +.. automodule:: feast.infra.feature_servers.local_process.config + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: feast.infra.feature_servers.local_process + :members: + :undoc-members: + :show-inheritance: diff --git a/sdk/python/docs/source/feast.infra.feature_servers.multicloud.rst b/sdk/python/docs/source/feast.infra.feature_servers.multicloud.rst new file mode 100644 index 00000000000..9d34623f562 --- /dev/null +++ b/sdk/python/docs/source/feast.infra.feature_servers.multicloud.rst @@ -0,0 +1,10 @@ +feast.infra.feature\_servers.multicloud package +=============================================== + +Module contents +--------------- + +.. automodule:: feast.infra.feature_servers.multicloud + :members: + :undoc-members: + :show-inheritance: diff --git a/sdk/python/docs/source/feast.infra.feature_servers.rst b/sdk/python/docs/source/feast.infra.feature_servers.rst new file mode 100644 index 00000000000..334b5859053 --- /dev/null +++ b/sdk/python/docs/source/feast.infra.feature_servers.rst @@ -0,0 +1,32 @@ +feast.infra.feature\_servers package +==================================== + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + feast.infra.feature_servers.aws_lambda + feast.infra.feature_servers.gcp_cloudrun + feast.infra.feature_servers.local_process + feast.infra.feature_servers.multicloud + +Submodules +---------- + +feast.infra.feature\_servers.base\_config module +------------------------------------------------ + +.. automodule:: feast.infra.feature_servers.base_config + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: feast.infra.feature_servers + :members: + :undoc-members: + :show-inheritance: diff --git a/sdk/python/docs/source/feast.infra.materialization.contrib.rst b/sdk/python/docs/source/feast.infra.materialization.contrib.rst index f9d77006610..e1dcba67a89 100644 --- a/sdk/python/docs/source/feast.infra.materialization.contrib.rst +++ b/sdk/python/docs/source/feast.infra.materialization.contrib.rst @@ -1,10 +1,10 @@ feast.infra.materialization.contrib package -========================================== +=========================================== -Subpackages ------------ +Module contents +--------------- -.. toctree:: - :maxdepth: 4 - - feast.infra.materialization.contrib.bytewax +.. automodule:: feast.infra.materialization.contrib + :members: + :undoc-members: + :show-inheritance: diff --git a/sdk/python/docs/source/feast.infra.materialization.kubernetes.rst b/sdk/python/docs/source/feast.infra.materialization.kubernetes.rst new file mode 100644 index 00000000000..abb0d61c0f4 --- /dev/null +++ b/sdk/python/docs/source/feast.infra.materialization.kubernetes.rst @@ -0,0 +1,45 @@ +feast.infra.materialization.kubernetes package +============================================== + +Submodules +---------- + +feast.infra.materialization.kubernetes.k8s\_materialization\_engine module +-------------------------------------------------------------------------- + +.. automodule:: feast.infra.materialization.kubernetes.k8s_materialization_engine + :members: + :undoc-members: + :show-inheritance: + +feast.infra.materialization.kubernetes.k8s\_materialization\_job module +----------------------------------------------------------------------- + +.. automodule:: feast.infra.materialization.kubernetes.k8s_materialization_job + :members: + :undoc-members: + :show-inheritance: + +feast.infra.materialization.kubernetes.k8s\_materialization\_task module +------------------------------------------------------------------------ + +.. automodule:: feast.infra.materialization.kubernetes.k8s_materialization_task + :members: + :undoc-members: + :show-inheritance: + +feast.infra.materialization.kubernetes.main module +-------------------------------------------------- + +.. automodule:: feast.infra.materialization.kubernetes.main + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: feast.infra.materialization.kubernetes + :members: + :undoc-members: + :show-inheritance: diff --git a/sdk/python/docs/source/feast.infra.materialization.rst b/sdk/python/docs/source/feast.infra.materialization.rst index 6e526c367cd..30054b6dd3a 100644 --- a/sdk/python/docs/source/feast.infra.materialization.rst +++ b/sdk/python/docs/source/feast.infra.materialization.rst @@ -7,7 +7,8 @@ Subpackages .. toctree:: :maxdepth: 4 - feast.infra.materialization.lambda + feast.infra.materialization.contrib + feast.infra.materialization.kubernetes Submodules ---------- diff --git a/sdk/python/docs/source/feast.infra.offline_stores.rst b/sdk/python/docs/source/feast.infra.offline_stores.rst index 7949c9efb32..2407320d225 100644 --- a/sdk/python/docs/source/feast.infra.offline_stores.rst +++ b/sdk/python/docs/source/feast.infra.offline_stores.rst @@ -28,6 +28,14 @@ feast.infra.offline\_stores.bigquery\_source module :undoc-members: :show-inheritance: +feast.infra.offline\_stores.duckdb module +----------------------------------------- + +.. automodule:: feast.infra.offline_stores.duckdb + :members: + :undoc-members: + :show-inheritance: + feast.infra.offline\_stores.file module --------------------------------------- @@ -44,6 +52,14 @@ feast.infra.offline\_stores.file\_source module :undoc-members: :show-inheritance: +feast.infra.offline\_stores.ibis module +--------------------------------------- + +.. automodule:: feast.infra.offline_stores.ibis + :members: + :undoc-members: + :show-inheritance: + feast.infra.offline\_stores.offline\_store module ------------------------------------------------- diff --git a/sdk/python/docs/source/feast.infra.online_stores.contrib.ikv_online_store.rst b/sdk/python/docs/source/feast.infra.online_stores.contrib.ikv_online_store.rst new file mode 100644 index 00000000000..e7f858d1cf4 --- /dev/null +++ b/sdk/python/docs/source/feast.infra.online_stores.contrib.ikv_online_store.rst @@ -0,0 +1,21 @@ +feast.infra.online\_stores.contrib.ikv\_online\_store package +============================================================= + +Submodules +---------- + +feast.infra.online\_stores.contrib.ikv\_online\_store.ikv module +---------------------------------------------------------------- + +.. automodule:: feast.infra.online_stores.contrib.ikv_online_store.ikv + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: feast.infra.online_stores.contrib.ikv_online_store + :members: + :undoc-members: + :show-inheritance: diff --git a/sdk/python/docs/source/feast.infra.online_stores.contrib.rst b/sdk/python/docs/source/feast.infra.online_stores.contrib.rst index b6c8a404ee4..9d301fcd0de 100644 --- a/sdk/python/docs/source/feast.infra.online_stores.contrib.rst +++ b/sdk/python/docs/source/feast.infra.online_stores.contrib.rst @@ -10,6 +10,7 @@ Subpackages feast.infra.online_stores.contrib.cassandra_online_store feast.infra.online_stores.contrib.hazelcast_online_store feast.infra.online_stores.contrib.hbase_online_store + feast.infra.online_stores.contrib.ikv_online_store feast.infra.online_stores.contrib.mysql_online_store feast.infra.online_stores.contrib.rockset_online_store @@ -24,6 +25,22 @@ feast.infra.online\_stores.contrib.cassandra\_repo\_configuration module :undoc-members: :show-inheritance: +feast.infra.online\_stores.contrib.elasticsearch module +------------------------------------------------------- + +.. automodule:: feast.infra.online_stores.contrib.elasticsearch + :members: + :undoc-members: + :show-inheritance: + +feast.infra.online\_stores.contrib.elasticsearch\_repo\_configuration module +---------------------------------------------------------------------------- + +.. automodule:: feast.infra.online_stores.contrib.elasticsearch_repo_configuration + :members: + :undoc-members: + :show-inheritance: + feast.infra.online\_stores.contrib.hazelcast\_repo\_configuration module ------------------------------------------------------------------------ @@ -48,6 +65,14 @@ feast.infra.online\_stores.contrib.mysql\_repo\_configuration module :undoc-members: :show-inheritance: +feast.infra.online\_stores.contrib.pgvector\_repo\_configuration module +----------------------------------------------------------------------- + +.. automodule:: feast.infra.online_stores.contrib.pgvector_repo_configuration + :members: + :undoc-members: + :show-inheritance: + feast.infra.online\_stores.contrib.postgres module -------------------------------------------------- @@ -64,10 +89,10 @@ feast.infra.online\_stores.contrib.postgres\_repo\_configuration module :undoc-members: :show-inheritance: -feast.infra.online\_stores.contrib.rockset\_repo\_configuration module ----------------------------------------------------------------------- +feast.infra.online\_stores.contrib.singlestore\_repo\_configuration module +-------------------------------------------------------------------------- -.. automodule:: feast.infra.online_stores.contrib.rockset_repo_configuration +.. automodule:: feast.infra.online_stores.contrib.singlestore_repo_configuration :members: :undoc-members: :show-inheritance: diff --git a/sdk/python/docs/source/feast.infra.registry.contrib.azure.rst b/sdk/python/docs/source/feast.infra.registry.contrib.azure.rst new file mode 100644 index 00000000000..f9280925ad3 --- /dev/null +++ b/sdk/python/docs/source/feast.infra.registry.contrib.azure.rst @@ -0,0 +1,21 @@ +feast.infra.registry.contrib.azure package +========================================== + +Submodules +---------- + +feast.infra.registry.contrib.azure.azure\_registry\_store module +---------------------------------------------------------------- + +.. automodule:: feast.infra.registry.contrib.azure.azure_registry_store + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: feast.infra.registry.contrib.azure + :members: + :undoc-members: + :show-inheritance: diff --git a/sdk/python/docs/source/feast.infra.registry.contrib.postgres.rst b/sdk/python/docs/source/feast.infra.registry.contrib.postgres.rst new file mode 100644 index 00000000000..3f319908057 --- /dev/null +++ b/sdk/python/docs/source/feast.infra.registry.contrib.postgres.rst @@ -0,0 +1,21 @@ +feast.infra.registry.contrib.postgres package +============================================= + +Submodules +---------- + +feast.infra.registry.contrib.postgres.postgres\_registry\_store module +---------------------------------------------------------------------- + +.. automodule:: feast.infra.registry.contrib.postgres.postgres_registry_store + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: feast.infra.registry.contrib.postgres + :members: + :undoc-members: + :show-inheritance: diff --git a/sdk/python/docs/source/feast.infra.registry.contrib.rst b/sdk/python/docs/source/feast.infra.registry.contrib.rst new file mode 100644 index 00000000000..44b89736adb --- /dev/null +++ b/sdk/python/docs/source/feast.infra.registry.contrib.rst @@ -0,0 +1,19 @@ +feast.infra.registry.contrib package +==================================== + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + feast.infra.registry.contrib.azure + feast.infra.registry.contrib.postgres + +Module contents +--------------- + +.. automodule:: feast.infra.registry.contrib + :members: + :undoc-members: + :show-inheritance: diff --git a/sdk/python/docs/source/feast.infra.registry.rst b/sdk/python/docs/source/feast.infra.registry.rst index 7a2d9689975..26f459fe71b 100644 --- a/sdk/python/docs/source/feast.infra.registry.rst +++ b/sdk/python/docs/source/feast.infra.registry.rst @@ -1,6 +1,14 @@ feast.infra.registry package ============================ +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + feast.infra.registry.contrib + Submodules ---------- @@ -12,6 +20,14 @@ feast.infra.registry.base\_registry module :undoc-members: :show-inheritance: +feast.infra.registry.caching\_registry module +--------------------------------------------- + +.. automodule:: feast.infra.registry.caching_registry + :members: + :undoc-members: + :show-inheritance: + feast.infra.registry.file module -------------------------------- @@ -28,6 +44,14 @@ feast.infra.registry.gcs module :undoc-members: :show-inheritance: +feast.infra.registry.proto\_registry\_utils module +-------------------------------------------------- + +.. automodule:: feast.infra.registry.proto_registry_utils + :members: + :undoc-members: + :show-inheritance: + feast.infra.registry.registry module ------------------------------------ @@ -44,6 +68,14 @@ feast.infra.registry.registry\_store module :undoc-members: :show-inheritance: +feast.infra.registry.remote module +---------------------------------- + +.. automodule:: feast.infra.registry.remote + :members: + :undoc-members: + :show-inheritance: + feast.infra.registry.s3 module ------------------------------ @@ -52,6 +84,14 @@ feast.infra.registry.s3 module :undoc-members: :show-inheritance: +feast.infra.registry.snowflake module +------------------------------------- + +.. automodule:: feast.infra.registry.snowflake + :members: + :undoc-members: + :show-inheritance: + feast.infra.registry.sql module ------------------------------- diff --git a/sdk/python/docs/source/feast.infra.rst b/sdk/python/docs/source/feast.infra.rst index 50e1f37f1c6..a1dfc864926 100644 --- a/sdk/python/docs/source/feast.infra.rst +++ b/sdk/python/docs/source/feast.infra.rst @@ -7,6 +7,9 @@ Subpackages .. toctree:: :maxdepth: 4 + feast.infra.contrib + feast.infra.feature_servers + feast.infra.materialization feast.infra.offline_stores feast.infra.online_stores feast.infra.registry diff --git a/sdk/python/docs/source/feast.infra.utils.rst b/sdk/python/docs/source/feast.infra.utils.rst index e4116e7a172..083259bfaae 100644 --- a/sdk/python/docs/source/feast.infra.utils.rst +++ b/sdk/python/docs/source/feast.infra.utils.rst @@ -8,6 +8,7 @@ Subpackages :maxdepth: 4 feast.infra.utils.postgres + feast.infra.utils.snowflake Submodules ---------- diff --git a/sdk/python/docs/source/feast.infra.utils.snowflake.registry.rst b/sdk/python/docs/source/feast.infra.utils.snowflake.registry.rst new file mode 100644 index 00000000000..17605e61c32 --- /dev/null +++ b/sdk/python/docs/source/feast.infra.utils.snowflake.registry.rst @@ -0,0 +1,10 @@ +feast.infra.utils.snowflake.registry package +============================================ + +Module contents +--------------- + +.. automodule:: feast.infra.utils.snowflake.registry + :members: + :undoc-members: + :show-inheritance: diff --git a/sdk/python/docs/source/feast.infra.utils.snowflake.rst b/sdk/python/docs/source/feast.infra.utils.snowflake.rst new file mode 100644 index 00000000000..4dca045ab75 --- /dev/null +++ b/sdk/python/docs/source/feast.infra.utils.snowflake.rst @@ -0,0 +1,30 @@ +feast.infra.utils.snowflake package +=================================== + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + feast.infra.utils.snowflake.registry + feast.infra.utils.snowflake.snowpark + +Submodules +---------- + +feast.infra.utils.snowflake.snowflake\_utils module +--------------------------------------------------- + +.. automodule:: feast.infra.utils.snowflake.snowflake_utils + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: feast.infra.utils.snowflake + :members: + :undoc-members: + :show-inheritance: diff --git a/sdk/python/docs/source/feast.infra.utils.snowflake.snowpark.rst b/sdk/python/docs/source/feast.infra.utils.snowflake.snowpark.rst new file mode 100644 index 00000000000..81ffbfebf75 --- /dev/null +++ b/sdk/python/docs/source/feast.infra.utils.snowflake.snowpark.rst @@ -0,0 +1,21 @@ +feast.infra.utils.snowflake.snowpark package +============================================ + +Submodules +---------- + +feast.infra.utils.snowflake.snowpark.snowflake\_udfs module +----------------------------------------------------------- + +.. automodule:: feast.infra.utils.snowflake.snowpark.snowflake_udfs + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: feast.infra.utils.snowflake.snowpark + :members: + :undoc-members: + :show-inheritance: diff --git a/sdk/python/docs/source/feast.protos.feast.core.rst b/sdk/python/docs/source/feast.protos.feast.core.rst index 5da16d2a267..a8691c20feb 100644 --- a/sdk/python/docs/source/feast.protos.feast.core.rst +++ b/sdk/python/docs/source/feast.protos.feast.core.rst @@ -292,6 +292,22 @@ feast.protos.feast.core.StreamFeatureView\_pb2\_grpc module :undoc-members: :show-inheritance: +feast.protos.feast.core.Transformation\_pb2 module +-------------------------------------------------- + +.. automodule:: feast.protos.feast.core.Transformation_pb2 + :members: + :undoc-members: + :show-inheritance: + +feast.protos.feast.core.Transformation\_pb2\_grpc module +-------------------------------------------------------- + +.. automodule:: feast.protos.feast.core.Transformation_pb2_grpc + :members: + :undoc-members: + :show-inheritance: + feast.protos.feast.core.ValidationProfile\_pb2 module ----------------------------------------------------- diff --git a/sdk/python/docs/source/feast.protos.feast.registry.rst b/sdk/python/docs/source/feast.protos.feast.registry.rst new file mode 100644 index 00000000000..07d0d1420f3 --- /dev/null +++ b/sdk/python/docs/source/feast.protos.feast.registry.rst @@ -0,0 +1,29 @@ +feast.protos.feast.registry package +=================================== + +Submodules +---------- + +feast.protos.feast.registry.RegistryServer\_pb2 module +------------------------------------------------------ + +.. automodule:: feast.protos.feast.registry.RegistryServer_pb2 + :members: + :undoc-members: + :show-inheritance: + +feast.protos.feast.registry.RegistryServer\_pb2\_grpc module +------------------------------------------------------------ + +.. automodule:: feast.protos.feast.registry.RegistryServer_pb2_grpc + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: feast.protos.feast.registry + :members: + :undoc-members: + :show-inheritance: diff --git a/sdk/python/docs/source/feast.protos.feast.rst b/sdk/python/docs/source/feast.protos.feast.rst index f519165db8e..6a50967670f 100644 --- a/sdk/python/docs/source/feast.protos.feast.rst +++ b/sdk/python/docs/source/feast.protos.feast.rst @@ -8,6 +8,7 @@ Subpackages :maxdepth: 4 feast.protos.feast.core + feast.protos.feast.registry feast.protos.feast.serving feast.protos.feast.storage feast.protos.feast.types diff --git a/sdk/python/docs/source/feast.protos.feast.serving.rst b/sdk/python/docs/source/feast.protos.feast.serving.rst index 792335b189d..fccea892be0 100644 --- a/sdk/python/docs/source/feast.protos.feast.serving.rst +++ b/sdk/python/docs/source/feast.protos.feast.serving.rst @@ -20,6 +20,22 @@ feast.protos.feast.serving.Connector\_pb2\_grpc module :undoc-members: :show-inheritance: +feast.protos.feast.serving.GrpcServer\_pb2 module +------------------------------------------------- + +.. automodule:: feast.protos.feast.serving.GrpcServer_pb2 + :members: + :undoc-members: + :show-inheritance: + +feast.protos.feast.serving.GrpcServer\_pb2\_grpc module +------------------------------------------------------- + +.. automodule:: feast.protos.feast.serving.GrpcServer_pb2_grpc + :members: + :undoc-members: + :show-inheritance: + feast.protos.feast.serving.ServingService\_pb2 module ----------------------------------------------------- diff --git a/sdk/python/docs/source/feast.rst b/sdk/python/docs/source/feast.rst index 4730fdf725d..400b29b8172 100644 --- a/sdk/python/docs/source/feast.rst +++ b/sdk/python/docs/source/feast.rst @@ -9,9 +9,11 @@ Subpackages feast.diff feast.dqm + feast.embedded_go feast.infra feast.loaders feast.protos + feast.transformation feast.ui Submodules @@ -241,6 +243,14 @@ feast.proto\_json module :undoc-members: :show-inheritance: +feast.registry\_server module +----------------------------- + +.. automodule:: feast.registry_server + :members: + :undoc-members: + :show-inheritance: + feast.repo\_config module ------------------------- @@ -265,14 +275,6 @@ feast.repo\_operations module :undoc-members: :show-inheritance: -feast.repo\_upgrade module --------------------------- - -.. automodule:: feast.repo_upgrade - :members: - :undoc-members: - :show-inheritance: - feast.saved\_dataset module --------------------------- diff --git a/sdk/python/docs/source/feast.transformation.rst b/sdk/python/docs/source/feast.transformation.rst new file mode 100644 index 00000000000..ef2278fa92b --- /dev/null +++ b/sdk/python/docs/source/feast.transformation.rst @@ -0,0 +1,37 @@ +feast.transformation package +============================ + +Submodules +---------- + +feast.transformation.pandas\_transformation module +-------------------------------------------------- + +.. automodule:: feast.transformation.pandas_transformation + :members: + :undoc-members: + :show-inheritance: + +feast.transformation.python\_transformation module +-------------------------------------------------- + +.. automodule:: feast.transformation.python_transformation + :members: + :undoc-members: + :show-inheritance: + +feast.transformation.substrait\_transformation module +----------------------------------------------------- + +.. automodule:: feast.transformation.substrait_transformation + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: feast.transformation + :members: + :undoc-members: + :show-inheritance: diff --git a/sdk/python/feast/infra/online_stores/contrib/singlestore_online_store/singlestore.py b/sdk/python/feast/infra/online_stores/contrib/singlestore_online_store/singlestore.py new file mode 100644 index 00000000000..e17a059c1a8 --- /dev/null +++ b/sdk/python/feast/infra/online_stores/contrib/singlestore_online_store/singlestore.py @@ -0,0 +1,235 @@ +from __future__ import absolute_import + +from collections import defaultdict +from datetime import datetime +from typing import Any, Callable, Dict, List, Literal, Optional, Sequence, Tuple + +import pytz +import singlestoredb +from pydantic import StrictStr +from singlestoredb.connection import Connection, Cursor +from singlestoredb.exceptions import InterfaceError + +from feast import Entity, FeatureView, RepoConfig +from feast.infra.key_encoding_utils import serialize_entity_key +from feast.infra.online_stores.online_store import OnlineStore +from feast.protos.feast.types.EntityKey_pb2 import EntityKey as EntityKeyProto +from feast.protos.feast.types.Value_pb2 import Value as ValueProto +from feast.repo_config import FeastConfigBaseModel + + +class SingleStoreOnlineStoreConfig(FeastConfigBaseModel): + """ + Configuration for the SingleStore online store. + NOTE: The class *must* end with the `OnlineStoreConfig` suffix. + """ + + type: Literal["singlestore"] = "singlestore" + + host: Optional[StrictStr] = None + user: Optional[StrictStr] = None + password: Optional[StrictStr] = None + database: Optional[StrictStr] = None + port: Optional[int] = None + + +class SingleStoreOnlineStore(OnlineStore): + """ + An online store implementation that uses SingleStore. + NOTE: The class *must* end with the `OnlineStore` suffix. + """ + + _conn: Optional[Connection] = None + + def _init_conn(self, config: RepoConfig) -> Connection: + online_store_config = config.online_store + assert isinstance(online_store_config, SingleStoreOnlineStoreConfig) + return singlestoredb.connect( + host=online_store_config.host or "127.0.0.1", + user=online_store_config.user or "test", + password=online_store_config.password or "test", + database=online_store_config.database or "feast", + port=online_store_config.port or 3306, + autocommit=True, + ) + + def _get_cursor(self, config: RepoConfig) -> Any: + # This will try to reconnect also. + # In case it fails, we will have to create a new connection. + if not self._conn: + self._conn = self._init_conn(config) + try: + self._conn.ping(reconnect=True) + except InterfaceError: + self._conn = self._init_conn(config) + return self._conn.cursor() + + def online_write_batch( + self, + config: RepoConfig, + table: FeatureView, + data: List[ + Tuple[EntityKeyProto, Dict[str, ValueProto], datetime, Optional[datetime]] + ], + progress: Optional[Callable[[int], Any]], + ) -> None: + project = config.project + with self._get_cursor(config) as cur: + insert_values = [] + for entity_key, values, timestamp, created_ts in data: + entity_key_bin = serialize_entity_key( + entity_key, + entity_key_serialization_version=2, + ).hex() + timestamp = _to_naive_utc(timestamp) + if created_ts is not None: + created_ts = _to_naive_utc(created_ts) + + for feature_name, val in values.items(): + insert_values.append( + ( + entity_key_bin, + feature_name, + val.SerializeToString(), + timestamp, + created_ts, + ) + ) + # Control the batch so that we can update the progress + batch_size = 50000 + for i in range(0, len(insert_values), batch_size): + current_batch = insert_values[i : i + batch_size] + cur.executemany( + f""" + INSERT INTO {_table_id(project, table)} + (entity_key, feature_name, value, event_ts, created_ts) + values (%s, %s, %s, %s, %s) + ON DUPLICATE KEY UPDATE + value = VALUES(value), + event_ts = VALUES(event_ts), + created_ts = VALUES(created_ts); + """, + current_batch, + ) + if progress: + progress(len(current_batch)) + + def online_read( + self, + config: RepoConfig, + table: FeatureView, + entity_keys: List[EntityKeyProto], + requested_features: Optional[List[str]] = None, + ) -> List[Tuple[Optional[datetime], Optional[Dict[str, ValueProto]]]]: + project = config.project + result: List[Tuple[Optional[datetime], Optional[Dict[str, ValueProto]]]] = [] + with self._get_cursor(config) as cur: + keys = [] + for entity_key in entity_keys: + keys.append( + serialize_entity_key( + entity_key, + entity_key_serialization_version=2, + ).hex() + ) + + if not requested_features: + entity_key_placeholders = ",".join(["%s" for _ in keys]) + cur.execute( + f""" + SELECT entity_key, feature_name, value, event_ts FROM {_table_id(project, table)} + WHERE entity_key IN ({entity_key_placeholders}) + ORDER BY event_ts; + """, + tuple(keys), + ) + else: + entity_key_placeholders = ",".join(["%s" for _ in keys]) + requested_features_placeholders = ",".join( + ["%s" for _ in requested_features] + ) + cur.execute( + f""" + SELECT entity_key, feature_name, value, event_ts FROM {_table_id(project, table)} + WHERE entity_key IN ({entity_key_placeholders}) and feature_name IN ({requested_features_placeholders}) + ORDER BY event_ts; + """, + tuple(keys + requested_features), + ) + rows = cur.fetchall() or [] + + # Since we don't know the order returned from MySQL we'll need + # to construct a dict to be able to quickly look up the correct row + # when we iterate through the keys since they are in the correct order + values_dict = defaultdict(list) + for row in rows: + values_dict[row[0]].append(row[1:]) + + for key in keys: + if key in values_dict: + key_values = values_dict[key] + res = {} + res_ts: Optional[datetime] = None + for feature_name, value_bin, event_ts in key_values: + val = ValueProto() + val.ParseFromString(bytes(value_bin)) + res[feature_name] = val + res_ts = event_ts + result.append((res_ts, res)) + else: + result.append((None, None)) + return result + + def update( + self, + config: RepoConfig, + tables_to_delete: Sequence[FeatureView], + tables_to_keep: Sequence[FeatureView], + entities_to_delete: Sequence[Entity], + entities_to_keep: Sequence[Entity], + partial: bool, + ) -> None: + project = config.project + with self._get_cursor(config) as cur: + # We don't create any special state for the entities in this implementation. + for table in tables_to_keep: + cur.execute( + f"""CREATE TABLE IF NOT EXISTS {_table_id(project, table)} (entity_key VARCHAR(512), + feature_name VARCHAR(256), + value BLOB, + event_ts timestamp NULL DEFAULT NULL, + created_ts timestamp NULL DEFAULT NULL, + PRIMARY KEY(entity_key, feature_name), + INDEX {_table_id(project, table)}_ek (entity_key))""" + ) + + for table in tables_to_delete: + _drop_table_and_index(cur, project, table) + + def teardown( + self, + config: RepoConfig, + tables: Sequence[FeatureView], + entities: Sequence[Entity], + ) -> None: + project = config.project + with self._get_cursor(config) as cur: + for table in tables: + _drop_table_and_index(cur, project, table) + + +def _drop_table_and_index(cur: Cursor, project: str, table: FeatureView) -> None: + table_name = _table_id(project, table) + cur.execute(f"DROP INDEX {table_name}_ek ON {table_name};") + cur.execute(f"DROP TABLE IF EXISTS {table_name}") + + +def _table_id(project: str, table: FeatureView) -> str: + return f"{project}_{table.name}" + + +def _to_naive_utc(ts: datetime) -> datetime: + if ts.tzinfo is None: + return ts + else: + return ts.astimezone(pytz.utc).replace(tzinfo=None) diff --git a/sdk/python/feast/infra/online_stores/contrib/singlestore_repo_configuration.py b/sdk/python/feast/infra/online_stores/contrib/singlestore_repo_configuration.py new file mode 100644 index 00000000000..2debe0f0ee1 --- /dev/null +++ b/sdk/python/feast/infra/online_stores/contrib/singlestore_repo_configuration.py @@ -0,0 +1,10 @@ +from tests.integration.feature_repos.integration_test_repo_config import ( + IntegrationTestRepoConfig, +) +from tests.integration.feature_repos.universal.online_store.singlestore import ( + SingleStoreOnlineStoreCreator, +) + +FULL_REPO_CONFIGS = [ + IntegrationTestRepoConfig(online_store_creator=SingleStoreOnlineStoreCreator), +] diff --git a/sdk/python/feast/repo_config.py b/sdk/python/feast/repo_config.py index d5b3160b566..c69469d7696 100644 --- a/sdk/python/feast/repo_config.py +++ b/sdk/python/feast/repo_config.py @@ -65,6 +65,7 @@ "ikv": "feast.infra.online_stores.contrib.ikv_online_store.ikv.IKVOnlineStore", "elasticsearch": "feast.infra.online_stores.contrib.elasticsearch.ElasticSearchOnlineStore", "remote": "feast.infra.online_stores.remote.RemoteOnlineStore", + "singlestore": "feast.infra.online_stores.contrib.singlestore_online_store.singlestore.SingleStoreOnlineStore", } OFFLINE_STORE_CLASS_FOR_TYPE = { diff --git a/sdk/python/requirements/py3.10-ci-requirements.txt b/sdk/python/requirements/py3.10-ci-requirements.txt index 3a9a11953fd..5e89b48bc84 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 @@ -77,14 +69,13 @@ botocore==1.34.99 # s3transfer build==1.2.1 # via - # feast (setup.py) # pip-tools + # singlestoredb 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 +98,6 @@ charset-normalizer==3.3.2 # snowflake-connector-python click==8.1.7 # via - # feast (setup.py) # dask # geomet # great-expectations @@ -117,9 +107,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 +116,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 +127,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 +139,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 +157,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 +171,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 +181,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 +188,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 +219,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 +229,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 +243,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 +263,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 +286,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 +325,6 @@ jedi==0.19.1 # via ipython jinja2==3.1.4 # via - # feast (setup.py) # altair # fastapi # great-expectations @@ -394,7 +348,6 @@ jsonpointer==2.4 # jsonschema jsonschema[format-nongpl]==4.22.0 # via - # feast (setup.py) # altair # great-expectations # jupyter-events @@ -440,7 +393,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 +413,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 +435,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 +461,6 @@ notebook-shim==0.2.4 # notebook numpy==1.26.4 # via - # feast (setup.py) # altair # dask # db-dtypes @@ -553,7 +497,6 @@ packaging==24.0 # sphinx pandas==2.2.2 # via - # feast (setup.py) # altair # dask # dask-expr @@ -564,6 +507,8 @@ pandas==2.2.2 # snowflake-connector-python pandocfilters==1.5.1 # via nbconvert +parsimonious==0.10.0 + # via singlestoredb parso==0.8.4 # via jedi parsy==2.1 @@ -577,7 +522,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 +534,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 +548,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 +565,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 +574,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 +597,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 @@ -680,13 +614,11 @@ pygments==2.18.0 pyjwt[crypto]==2.8.0 # via # msal + # singlestoredb # 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 +630,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 +641,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 +676,6 @@ pytz==2024.1 # trino pyyaml==6.0.1 # via - # feast (setup.py) # dask # ibis-substrait # jupyter-events @@ -768,17 +689,15 @@ 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) + # via parsimonious requests==2.31.0 # via - # feast (setup.py) # azure-core # cachecontrol # docker @@ -792,6 +711,7 @@ requests==2.31.0 # msal # requests-oauthlib # responses + # singlestoredb # snowflake-connector-python # sphinx # trino @@ -812,7 +732,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 +741,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 @@ -834,8 +752,10 @@ setuptools==70.0.0 # grpcio-tools # kubernetes # pip-tools + # singlestoredb shellingham==1.5.4 # via typer +singlestoredb==1.3.1 six==1.16.0 # via # asttokens @@ -856,13 +776,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 +795,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 +803,8 @@ sqlalchemy-views==0.3.2 sqlglot==20.11.0 # via ibis-framework sqlite-vec==0.0.1a10 - # via feast (setup.py) +sqlparams==6.0.1 + # via singlestoredb stack-data==0.6.3 # via ipython starlette==0.37.2 @@ -894,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 @@ -918,6 +832,7 @@ tomli==2.0.1 # pip-tools # pytest # pytest-env + # singlestoredb tomlkit==0.12.5 # via snowflake-connector-python toolz==0.12.1 @@ -935,9 +850,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 +867,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 +921,6 @@ uritemplate==4.1.1 # via google-api-python-client urllib3==1.26.18 # via - # feast (setup.py) # botocore # docker # elastic-transport @@ -1035,15 +933,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 @@ -1063,7 +958,9 @@ websockets==12.0 werkzeug==3.0.3 # via moto wheel==0.43.0 - # via pip-tools + # via + # pip-tools + # singlestoredb widgetsnbextension==4.0.11 # via ipywidgets wrapt==1.16.0 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..b9ff286cbfd 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 @@ -73,14 +65,13 @@ botocore==1.34.99 # s3transfer build==1.2.1 # via - # feast (setup.py) # pip-tools + # singlestoredb 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 +94,6 @@ charset-normalizer==3.3.2 # snowflake-connector-python click==8.1.7 # via - # feast (setup.py) # dask # geomet # great-expectations @@ -113,9 +103,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 +112,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 +123,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 +135,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 +153,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 +162,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 +172,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 +179,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 +210,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 +220,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 +234,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 +254,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 +277,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 +316,6 @@ jedi==0.19.1 # via ipython jinja2==3.1.4 # via - # feast (setup.py) # altair # fastapi # great-expectations @@ -385,7 +339,6 @@ jsonpointer==2.4 # jsonschema jsonschema[format-nongpl]==4.22.0 # via - # feast (setup.py) # altair # great-expectations # jupyter-events @@ -431,7 +384,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 +404,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 +426,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 +452,6 @@ notebook-shim==0.2.4 # notebook numpy==1.26.4 # via - # feast (setup.py) # altair # dask # db-dtypes @@ -544,7 +488,6 @@ packaging==24.0 # sphinx pandas==2.2.2 # via - # feast (setup.py) # altair # dask # dask-expr @@ -555,6 +498,8 @@ pandas==2.2.2 # snowflake-connector-python pandocfilters==1.5.1 # via nbconvert +parsimonious==0.10.0 + # via singlestoredb parso==0.8.4 # via jedi parsy==2.1 @@ -568,7 +513,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 +525,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 +539,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 +556,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 +565,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 +588,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 @@ -671,13 +605,11 @@ pygments==2.18.0 pyjwt[crypto]==2.8.0 # via # msal + # singlestoredb # 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 +621,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 +632,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 +667,6 @@ pytz==2024.1 # trino pyyaml==6.0.1 # via - # feast (setup.py) # dask # ibis-substrait # jupyter-events @@ -759,17 +680,15 @@ 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) + # via parsimonious requests==2.31.0 # via - # feast (setup.py) # azure-core # cachecontrol # docker @@ -783,6 +702,7 @@ requests==2.31.0 # msal # requests-oauthlib # responses + # singlestoredb # snowflake-connector-python # sphinx # trino @@ -803,7 +723,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 +732,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 @@ -825,8 +743,10 @@ setuptools==70.0.0 # grpcio-tools # kubernetes # pip-tools + # singlestoredb shellingham==1.5.4 # via typer +singlestoredb==1.3.1 six==1.16.0 # via # asttokens @@ -847,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 @@ -868,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 @@ -877,7 +794,8 @@ sqlalchemy-views==0.3.2 sqlglot==20.11.0 # via ibis-framework sqlite-vec==0.0.1a10 - # via feast (setup.py) +sqlparams==6.0.1 + # via singlestoredb stack-data==0.6.3 # via ipython starlette==0.37.2 @@ -885,21 +803,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 +831,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 +848,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 +899,6 @@ uritemplate==4.1.1 # via google-api-python-client urllib3==1.26.18 # via - # feast (setup.py) # botocore # docker # elastic-transport @@ -1014,15 +911,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 @@ -1042,7 +936,9 @@ websockets==12.0 werkzeug==3.0.3 # via moto wheel==0.43.0 - # via pip-tools + # via + # pip-tools + # singlestoredb widgetsnbextension==4.0.11 # via ipywidgets wrapt==1.16.0 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..237a7859f0b 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 @@ -77,14 +69,13 @@ botocore==1.34.99 # s3transfer build==1.2.1 # via - # feast (setup.py) # pip-tools + # singlestoredb 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 +98,6 @@ charset-normalizer==3.3.2 # snowflake-connector-python click==8.1.7 # via - # feast (setup.py) # dask # geomet # great-expectations @@ -117,9 +107,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 +116,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 +127,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 +139,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 +157,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 +171,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 +181,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 +188,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 +219,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 +229,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 +243,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 +263,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 +286,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 +334,6 @@ jedi==0.19.1 # via ipython jinja2==3.1.4 # via - # feast (setup.py) # altair # fastapi # great-expectations @@ -403,7 +357,6 @@ jsonpointer==2.4 # jsonschema jsonschema[format-nongpl]==4.22.0 # via - # feast (setup.py) # altair # great-expectations # jupyter-events @@ -449,7 +402,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 +422,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 +444,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 +470,6 @@ notebook-shim==0.2.4 # notebook numpy==1.26.4 # via - # feast (setup.py) # altair # dask # db-dtypes @@ -562,7 +506,6 @@ packaging==24.0 # sphinx pandas==2.2.2 # via - # feast (setup.py) # altair # dask # dask-expr @@ -573,6 +516,8 @@ pandas==2.2.2 # snowflake-connector-python pandocfilters==1.5.1 # via nbconvert +parsimonious==0.10.0 + # via singlestoredb parso==0.8.4 # via jedi parsy==2.1 @@ -586,7 +531,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 +543,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 +557,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 +574,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 +583,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 +606,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 @@ -689,13 +623,11 @@ pygments==2.18.0 pyjwt[crypto]==2.8.0 # via # msal + # singlestoredb # 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 +639,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 +650,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 +685,6 @@ pytz==2024.1 # trino pyyaml==6.0.1 # via - # feast (setup.py) # dask # ibis-substrait # jupyter-events @@ -777,17 +698,15 @@ 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) + # via parsimonious requests==2.31.0 # via - # feast (setup.py) # azure-core # cachecontrol # docker @@ -801,6 +720,7 @@ requests==2.31.0 # msal # requests-oauthlib # responses + # singlestoredb # snowflake-connector-python # sphinx # trino @@ -821,7 +741,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 +752,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 @@ -845,8 +763,10 @@ setuptools==70.0.0 # grpcio-tools # kubernetes # pip-tools + # singlestoredb shellingham==1.5.4 # via typer +singlestoredb==1.3.1 six==1.16.0 # via # asttokens @@ -867,13 +787,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 +806,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 +814,8 @@ sqlalchemy-views==0.3.2 sqlglot==20.11.0 # via ibis-framework sqlite-vec==0.0.1a10 - # via feast (setup.py) +sqlparams==6.0.1 + # via singlestoredb stack-data==0.6.3 # via ipython starlette==0.37.2 @@ -905,21 +823,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 @@ -929,6 +843,7 @@ tomli==2.0.1 # pip-tools # pytest # pytest-env + # singlestoredb tomlkit==0.12.5 # via snowflake-connector-python toolz==0.12.1 @@ -946,9 +861,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 +878,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 +934,6 @@ uritemplate==4.1.1 # via google-api-python-client urllib3==1.26.18 # via - # feast (setup.py) # botocore # docker # elastic-transport @@ -1049,15 +947,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 @@ -1077,7 +972,9 @@ websockets==12.0 werkzeug==3.0.3 # via moto wheel==0.43.0 - # via pip-tools + # via + # pip-tools + # singlestoredb widgetsnbextension==4.0.11 # via ipywidgets wrapt==1.16.0 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/integration/feature_repos/universal/online_store/singlestore.py b/sdk/python/tests/integration/feature_repos/universal/online_store/singlestore.py new file mode 100644 index 00000000000..d3a02421d0a --- /dev/null +++ b/sdk/python/tests/integration/feature_repos/universal/online_store/singlestore.py @@ -0,0 +1,43 @@ +import subprocess +import time +from typing import Dict + +from testcontainers.core.container import DockerContainer + +from tests.integration.feature_repos.universal.online_store_creator import ( + OnlineStoreCreator, +) + + +class SingleStoreOnlineStoreCreator(OnlineStoreCreator): + def __init__(self, project_name: str, **kwargs): + super().__init__(project_name) + self.container = ( + DockerContainer("ghcr.io/singlestore-labs/singlestoredb-dev:latest") + .with_exposed_ports(3306) + .with_env("USER", "root") + .with_env("ROOT_PASSWORD", "test") + # this license key is authorized solely for use in SingleStore Feast tests and is subject to strict usage restrictions + # if you want a free SingleStore license for your own use please visit https://www.singlestore.com/cloud-trial/ + .with_env( + "LICENSE_KEY", + "BGIxODZiYTg1YWUxYjRlODRhYzRjMGFmYTA1OTkxYzgyAAAAAAAAAAABAAAAAAAAACgwNQIZANx4NIXJ7CWvKYYb3wIyRXxBY7fdAnLeSwIYLy2Q0jA124GAkl04yuGrD59Zpv85DVYXAA==", + ) + ) + + def create_online_store(self) -> Dict[str, str]: + self.container.start() + time.sleep(30) + exposed_port = self.container.get_exposed_port("3306") + command = f"mysql -uroot -ptest -P {exposed_port} -e 'CREATE DATABASE feast;'" + subprocess.run(command, shell=True, check=True) + return { + "type": "singlestore", + "user": "root", + "password": "test", + "database": "feast", + "port": exposed_port, + } + + def teardown(self): + self.container.stop() diff --git a/setup.py b/setup.py index 9b3d0e55e62..2160ff0e91a 100644 --- a/setup.py +++ b/setup.py @@ -155,6 +155,8 @@ ELASTICSEARCH_REQUIRED = ["elasticsearch>=8.13.0"] +SINGLESTORE_REQUIRED = ["singlestoredb"] + CI_REQUIRED = ( [ "build", @@ -218,6 +220,7 @@ + DELTA_REQUIRED + ELASTICSEARCH_REQUIRED + SQLITE_VEC_REQUIRED + + SINGLESTORE_REQUIRED ) DOCS_REQUIRED = CI_REQUIRED @@ -386,6 +389,7 @@ def run(self): "delta": DELTA_REQUIRED, "elasticsearch": ELASTICSEARCH_REQUIRED, "sqlite_vec": SQLITE_VEC_REQUIRED, + "singlestore": SINGLESTORE_REQUIRED, }, include_package_data=True, license="Apache",