From 6a19c505073cf0424e025e9d5aff2f035d76feef Mon Sep 17 00:00:00 2001 From: Shuchu Han Date: Wed, 7 Feb 2024 11:21:27 -0500 Subject: [PATCH 1/9] feat: Update the pydantic version to v2. Signed-off-by: Shuchu Han --- .../feature_servers/aws_lambda/config.py | 3 +- .../feature_servers/gcp_cloudrun/config.py | 3 +- .../feature_servers/local_process/config.py | 2 +- .../infra/materialization/snowflake_engine.py | 6 +- .../feast/infra/offline_stores/bigquery.py | 22 ++- .../contrib/athena_offline_store/athena.py | 2 +- .../contrib/mssql_offline_store/mssql.py | 3 +- .../postgres_offline_store/postgres.py | 2 +- .../contrib/trino_offline_store/trino.py | 12 +- sdk/python/feast/infra/offline_stores/file.py | 3 +- .../feast/infra/offline_stores/redshift.py | 16 +- .../feast/infra/offline_stores/snowflake.py | 8 +- .../feast/infra/online_stores/bigtable.py | 3 +- .../cassandra_online_store.py | 13 +- .../contrib/hbase_online_store/hbase.py | 3 +- .../contrib/mysql_online_store/mysql.py | 4 +- .../infra/online_stores/contrib/postgres.py | 3 +- .../feast/infra/online_stores/datastore.py | 13 +- .../feast/infra/online_stores/dynamodb.py | 3 +- sdk/python/feast/infra/online_stores/redis.py | 2 +- .../feast/infra/online_stores/snowflake.py | 9 +- .../feast/infra/online_stores/sqlite.py | 3 +- .../feast/infra/passthrough_provider.py | 2 +- sdk/python/feast/infra/registry/snowflake.py | 9 +- sdk/python/feast/repo_config.py | 163 ++++++++---------- .../feature_repos/repo_configuration.py | 2 +- .../offline_stores/test_offline_store.py | 1 + .../infra/offline_stores/test_redshift.py | 1 + .../infra/scaffolding/test_repo_config.py | 12 +- sdk/python/tests/utils/cli_repo_creator.py | 2 + setup.py | 4 +- 31 files changed, 162 insertions(+), 172 deletions(-) diff --git a/sdk/python/feast/infra/feature_servers/aws_lambda/config.py b/sdk/python/feast/infra/feature_servers/aws_lambda/config.py index 31dd879af6..946831a18f 100644 --- a/sdk/python/feast/infra/feature_servers/aws_lambda/config.py +++ b/sdk/python/feast/infra/feature_servers/aws_lambda/config.py @@ -1,5 +1,6 @@ +from typing import Literal + from pydantic import StrictBool, StrictStr -from pydantic.typing import Literal from feast.infra.feature_servers.base_config import BaseFeatureServerConfig diff --git a/sdk/python/feast/infra/feature_servers/gcp_cloudrun/config.py b/sdk/python/feast/infra/feature_servers/gcp_cloudrun/config.py index 8d0c269cf5..ddcbde7924 100644 --- a/sdk/python/feast/infra/feature_servers/gcp_cloudrun/config.py +++ b/sdk/python/feast/infra/feature_servers/gcp_cloudrun/config.py @@ -1,5 +1,6 @@ +from typing import Literal + from pydantic import StrictBool -from pydantic.typing import Literal from feast.infra.feature_servers.base_config import BaseFeatureServerConfig diff --git a/sdk/python/feast/infra/feature_servers/local_process/config.py b/sdk/python/feast/infra/feature_servers/local_process/config.py index bb2e7bdf73..3d97912e4b 100644 --- a/sdk/python/feast/infra/feature_servers/local_process/config.py +++ b/sdk/python/feast/infra/feature_servers/local_process/config.py @@ -1,4 +1,4 @@ -from pydantic.typing import Literal +from typing import Literal from feast.infra.feature_servers.base_config import BaseFeatureServerConfig diff --git a/sdk/python/feast/infra/materialization/snowflake_engine.py b/sdk/python/feast/infra/materialization/snowflake_engine.py index 36c42cd390..62b23dfade 100644 --- a/sdk/python/feast/infra/materialization/snowflake_engine.py +++ b/sdk/python/feast/infra/materialization/snowflake_engine.py @@ -7,7 +7,7 @@ import click import pandas as pd from colorama import Fore, Style -from pydantic import Field, StrictStr +from pydantic import ConfigDict, Field, StrictStr from pytz import utc from tqdm import tqdm @@ -72,9 +72,7 @@ class SnowflakeMaterializationEngineConfig(FeastConfigBaseModel): schema_: Optional[str] = Field("PUBLIC", alias="schema") """ Snowflake schema name """ - - class Config: - allow_population_by_field_name = True + model_config = ConfigDict(populate_by_name=True) @dataclass diff --git a/sdk/python/feast/infra/offline_stores/bigquery.py b/sdk/python/feast/infra/offline_stores/bigquery.py index 0ee82a908e..68420c0664 100644 --- a/sdk/python/feast/infra/offline_stores/bigquery.py +++ b/sdk/python/feast/infra/offline_stores/bigquery.py @@ -10,6 +10,7 @@ Dict, Iterator, List, + Literal, Optional, Tuple, Union, @@ -19,8 +20,7 @@ import pandas as pd import pyarrow import pyarrow.parquet -from pydantic import ConstrainedStr, StrictStr, validator -from pydantic.typing import Literal +from pydantic import StrictStr, field_validator from tenacity import Retrying, retry_if_exception_type, stop_after_delay, wait_fixed from feast import flags_helper @@ -72,13 +72,6 @@ def get_http_client_info(): return http_client_info.ClientInfo(user_agent=get_user_agent()) -class BigQueryTableCreateDisposition(ConstrainedStr): - """Custom constraint for table_create_disposition. To understand more, see: - https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#JobConfigurationLoad.FIELDS.create_disposition""" - - values = {"CREATE_NEVER", "CREATE_IF_NEEDED"} - - class BigQueryOfflineStoreConfig(FeastConfigBaseModel): """Offline store config for GCP BigQuery""" @@ -102,10 +95,15 @@ class BigQueryOfflineStoreConfig(FeastConfigBaseModel): gcs_staging_location: Optional[str] = None """ (optional) GCS location used for offloading BigQuery results as parquet files.""" - table_create_disposition: Optional[BigQueryTableCreateDisposition] = None - """ (optional) Specifies whether the job is allowed to create new tables. The default value is CREATE_IF_NEEDED.""" + table_create_disposition: Literal[ + "CREATE_NEVER", "CREATE_IF_NEEDED" + ] = "CREATE_IF_NEEDED" + """ (optional) Specifies whether the job is allowed to create new tables. The default value is CREATE_IF_NEEDED. + Custom constraint for table_create_disposition. To understand more, see: + https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#JobConfigurationLoad.FIELDS.create_disposition + """ - @validator("billing_project_id") + @field_validator("billing_project_id") def project_id_exists(cls, v, values, **kwargs): if v and not values["project_id"]: raise ValueError( diff --git a/sdk/python/feast/infra/offline_stores/contrib/athena_offline_store/athena.py b/sdk/python/feast/infra/offline_stores/contrib/athena_offline_store/athena.py index 85a61106aa..ae510171db 100644 --- a/sdk/python/feast/infra/offline_stores/contrib/athena_offline_store/athena.py +++ b/sdk/python/feast/infra/offline_stores/contrib/athena_offline_store/athena.py @@ -8,6 +8,7 @@ Dict, Iterator, List, + Literal, Optional, Tuple, Union, @@ -18,7 +19,6 @@ import pyarrow import pyarrow as pa from pydantic import StrictStr -from pydantic.typing import Literal from pytz import utc from feast import OnDemandFeatureView diff --git a/sdk/python/feast/infra/offline_stores/contrib/mssql_offline_store/mssql.py b/sdk/python/feast/infra/offline_stores/contrib/mssql_offline_store/mssql.py index 849d5cc797..a3d18a2ab2 100644 --- a/sdk/python/feast/infra/offline_stores/contrib/mssql_offline_store/mssql.py +++ b/sdk/python/feast/infra/offline_stores/contrib/mssql_offline_store/mssql.py @@ -3,7 +3,7 @@ import warnings from datetime import datetime from pathlib import Path -from typing import Any, Callable, Dict, List, Optional, Set, Tuple, Union +from typing import Any, Callable, Dict, List, Literal, Optional, Set, Tuple, Union import numpy as np import pandas @@ -11,7 +11,6 @@ import pyarrow as pa import sqlalchemy from pydantic.types import StrictStr -from pydantic.typing import Literal from sqlalchemy import create_engine from sqlalchemy.engine import Engine from sqlalchemy.orm import sessionmaker diff --git a/sdk/python/feast/infra/offline_stores/contrib/postgres_offline_store/postgres.py b/sdk/python/feast/infra/offline_stores/contrib/postgres_offline_store/postgres.py index c2e95a8648..9b300d7bf4 100644 --- a/sdk/python/feast/infra/offline_stores/contrib/postgres_offline_store/postgres.py +++ b/sdk/python/feast/infra/offline_stores/contrib/postgres_offline_store/postgres.py @@ -9,6 +9,7 @@ Iterator, KeysView, List, + Literal, Optional, Tuple, Union, @@ -19,7 +20,6 @@ import pyarrow as pa from jinja2 import BaseLoader, Environment from psycopg2 import sql -from pydantic.typing import Literal from pytz import utc from feast.data_source import DataSource diff --git a/sdk/python/feast/infra/offline_stores/contrib/trino_offline_store/trino.py b/sdk/python/feast/infra/offline_stores/contrib/trino_offline_store/trino.py index d4cfdb6632..cdc9435024 100644 --- a/sdk/python/feast/infra/offline_stores/contrib/trino_offline_store/trino.py +++ b/sdk/python/feast/infra/offline_stores/contrib/trino_offline_store/trino.py @@ -5,7 +5,7 @@ import numpy as np import pandas as pd import pyarrow -from pydantic import Field, FilePath, SecretStr, StrictBool, StrictStr, root_validator +from pydantic import Field, FilePath, SecretStr, StrictBool, StrictStr, model_validator from trino.auth import ( BasicAuthentication, CertificateAuthentication, @@ -98,14 +98,14 @@ class AuthConfig(FeastConfigBaseModel): type: Literal["kerberos", "basic", "jwt", "oauth2", "certificate"] config: Optional[Dict[StrictStr, Any]] - @root_validator - def config_only_nullable_for_oauth2(cls, values): - auth_type = values["type"] - auth_config = values["config"] + @model_validator(mode="after") + def config_only_nullable_for_oauth2(self): + auth_type = self.type + auth_config = self.config if auth_type != "oauth2" and auth_config is None: raise ValueError(f"config cannot be null for auth type '{auth_type}'") - return values + return self def to_trino_auth(self): auth_type = self.type diff --git a/sdk/python/feast/infra/offline_stores/file.py b/sdk/python/feast/infra/offline_stores/file.py index 5e4107545f..0e5064ba78 100644 --- a/sdk/python/feast/infra/offline_stores/file.py +++ b/sdk/python/feast/infra/offline_stores/file.py @@ -2,7 +2,7 @@ import uuid from datetime import datetime from pathlib import Path -from typing import Any, Callable, List, Optional, Tuple, Union +from typing import Any, Callable, List, Literal, Optional, Tuple, Union import dask.dataframe as dd import pandas as pd @@ -10,7 +10,6 @@ import pyarrow.dataset import pyarrow.parquet import pytz -from pydantic.typing import Literal from feast.data_source import DataSource from feast.errors import ( diff --git a/sdk/python/feast/infra/offline_stores/redshift.py b/sdk/python/feast/infra/offline_stores/redshift.py index 6034bf5ac7..2565a569ad 100644 --- a/sdk/python/feast/infra/offline_stores/redshift.py +++ b/sdk/python/feast/infra/offline_stores/redshift.py @@ -9,6 +9,7 @@ Dict, Iterator, List, + Literal, Optional, Tuple, Union, @@ -19,8 +20,7 @@ import pyarrow import pyarrow as pa from dateutil import parser -from pydantic import StrictStr, root_validator -from pydantic.typing import Literal +from pydantic import StrictStr, model_validator from pytz import utc from feast import OnDemandFeatureView, RedshiftSource @@ -72,16 +72,16 @@ class RedshiftOfflineStoreConfig(FeastConfigBaseModel): iam_role: StrictStr """ IAM Role for Redshift, granting it access to S3 """ - @root_validator - def require_cluster_and_user_or_workgroup(cls, values): + @model_validator(mode="after") + def require_cluster_and_user_or_workgroup(self): """ Provisioned Redshift clusters: Require cluster_id and user, ignore workgroup Serverless Redshift: Require workgroup, ignore cluster_id and user """ cluster_id, user, workgroup = ( - values.get("cluster_id"), - values.get("user"), - values.get("workgroup"), + self.cluster_id, + self.user, + self.workgroup, ) if not (cluster_id and user) and not workgroup: raise ValueError( @@ -90,7 +90,7 @@ def require_cluster_and_user_or_workgroup(cls, values): elif cluster_id and workgroup: raise ValueError("cannot specify both cluster_id and workgroup") - return values + return self class RedshiftOfflineStore(OfflineStore): diff --git a/sdk/python/feast/infra/offline_stores/snowflake.py b/sdk/python/feast/infra/offline_stores/snowflake.py index dd13ffc96c..66e7e78651 100644 --- a/sdk/python/feast/infra/offline_stores/snowflake.py +++ b/sdk/python/feast/infra/offline_stores/snowflake.py @@ -14,6 +14,7 @@ Dict, Iterator, List, + Literal, Optional, Tuple, Union, @@ -23,8 +24,7 @@ import numpy as np import pandas as pd import pyarrow -from pydantic import Field, StrictStr -from pydantic.typing import Literal +from pydantic import ConfigDict, Field, StrictStr from pytz import utc from feast import OnDemandFeatureView @@ -119,9 +119,7 @@ class SnowflakeOfflineStoreConfig(FeastConfigBaseModel): convert_timestamp_columns: Optional[bool] = None """ Convert timestamp columns on export to a Parquet-supported format """ - - class Config: - allow_population_by_field_name = True + model_config = ConfigDict(populate_by_name=True) class SnowflakeOfflineStore(OfflineStore): diff --git a/sdk/python/feast/infra/online_stores/bigtable.py b/sdk/python/feast/infra/online_stores/bigtable.py index 30561d0840..3a83d23ced 100644 --- a/sdk/python/feast/infra/online_stores/bigtable.py +++ b/sdk/python/feast/infra/online_stores/bigtable.py @@ -2,13 +2,12 @@ import logging from concurrent import futures from datetime import datetime -from typing import Any, Callable, Dict, List, Optional, Sequence, Set, Tuple +from typing import Any, Callable, Dict, List, Literal, Optional, Sequence, Set, Tuple import google from google.cloud import bigtable from google.cloud.bigtable import row_filters from pydantic import StrictStr -from pydantic.typing import Literal from feast import Entity, FeatureView, utils from feast.feature_view import DUMMY_ENTITY_NAME diff --git a/sdk/python/feast/infra/online_stores/contrib/cassandra_online_store/cassandra_online_store.py b/sdk/python/feast/infra/online_stores/contrib/cassandra_online_store/cassandra_online_store.py index 34a8cab036..c672e18db0 100644 --- a/sdk/python/feast/infra/online_stores/contrib/cassandra_online_store/cassandra_online_store.py +++ b/sdk/python/feast/infra/online_stores/contrib/cassandra_online_store/cassandra_online_store.py @@ -20,7 +20,17 @@ import logging from datetime import datetime -from typing import Any, Callable, Dict, Iterable, List, Optional, Sequence, Tuple +from typing import ( + Any, + Callable, + Dict, + Iterable, + List, + Literal, + Optional, + Sequence, + Tuple, +) from cassandra.auth import PlainTextAuthProvider from cassandra.cluster import ( @@ -34,7 +44,6 @@ from cassandra.policies import DCAwareRoundRobinPolicy, TokenAwarePolicy from cassandra.query import PreparedStatement from pydantic import StrictFloat, StrictInt, StrictStr -from pydantic.typing import Literal from feast import Entity, FeatureView, RepoConfig from feast.infra.key_encoding_utils import serialize_entity_key diff --git a/sdk/python/feast/infra/online_stores/contrib/hbase_online_store/hbase.py b/sdk/python/feast/infra/online_stores/contrib/hbase_online_store/hbase.py index 1da9de89a8..4b2d8ae39c 100644 --- a/sdk/python/feast/infra/online_stores/contrib/hbase_online_store/hbase.py +++ b/sdk/python/feast/infra/online_stores/contrib/hbase_online_store/hbase.py @@ -1,12 +1,11 @@ import calendar import struct from datetime import datetime -from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple +from typing import Any, Callable, Dict, List, Literal, Optional, Sequence, Tuple from happybase import ConnectionPool from happybase.connection import DEFAULT_PROTOCOL, DEFAULT_TRANSPORT from pydantic import StrictStr -from pydantic.typing import Literal from feast import Entity from feast.feature_view import FeatureView diff --git a/sdk/python/feast/infra/online_stores/contrib/mysql_online_store/mysql.py b/sdk/python/feast/infra/online_stores/contrib/mysql_online_store/mysql.py index c09cb126f0..cf07d5fef1 100644 --- a/sdk/python/feast/infra/online_stores/contrib/mysql_online_store/mysql.py +++ b/sdk/python/feast/infra/online_stores/contrib/mysql_online_store/mysql.py @@ -1,7 +1,7 @@ from __future__ import absolute_import from datetime import datetime -from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple +from typing import Any, Callable, Dict, List, Literal, Optional, Sequence, Tuple import pymysql import pytz @@ -23,7 +23,7 @@ class MySQLOnlineStoreConfig(FeastConfigBaseModel): NOTE: The class *must* end with the `OnlineStoreConfig` suffix. """ - type = "mysql" + type: Literal["mysql"] = "mysql" host: Optional[StrictStr] = None user: Optional[StrictStr] = None diff --git a/sdk/python/feast/infra/online_stores/contrib/postgres.py b/sdk/python/feast/infra/online_stores/contrib/postgres.py index 49f87ddb0a..308528aaec 100644 --- a/sdk/python/feast/infra/online_stores/contrib/postgres.py +++ b/sdk/python/feast/infra/online_stores/contrib/postgres.py @@ -2,14 +2,13 @@ import logging from collections import defaultdict from datetime import datetime -from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple +from typing import Any, Callable, Dict, List, Literal, Optional, Sequence, Tuple import psycopg2 import pytz from psycopg2 import sql from psycopg2.extras import execute_values from psycopg2.pool import SimpleConnectionPool -from pydantic.schema import Literal from feast import Entity from feast.feature_view import FeatureView diff --git a/sdk/python/feast/infra/online_stores/datastore.py b/sdk/python/feast/infra/online_stores/datastore.py index ed4e7612ba..ae96e16c64 100644 --- a/sdk/python/feast/infra/online_stores/datastore.py +++ b/sdk/python/feast/infra/online_stores/datastore.py @@ -17,10 +17,19 @@ from multiprocessing.pool import ThreadPool from queue import Empty, Queue from threading import Lock, Thread -from typing import Any, Callable, Dict, Iterator, List, Optional, Sequence, Tuple +from typing import ( + Any, + Callable, + Dict, + Iterator, + List, + Literal, + Optional, + Sequence, + Tuple, +) from pydantic import PositiveInt, StrictStr -from pydantic.typing import Literal from feast import Entity, utils from feast.errors import FeastProviderLoginError diff --git a/sdk/python/feast/infra/online_stores/dynamodb.py b/sdk/python/feast/infra/online_stores/dynamodb.py index a1eef16f40..a049189de7 100644 --- a/sdk/python/feast/infra/online_stores/dynamodb.py +++ b/sdk/python/feast/infra/online_stores/dynamodb.py @@ -14,10 +14,9 @@ import itertools import logging from datetime import datetime -from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple +from typing import Any, Callable, Dict, List, Literal, Optional, Sequence, Tuple, Union from pydantic import StrictBool, StrictStr -from pydantic.typing import Literal, Union from feast import Entity, FeatureView, utils from feast.infra.infra_object import DYNAMODB_INFRA_OBJECT_CLASS_TYPE, InfraObject diff --git a/sdk/python/feast/infra/online_stores/redis.py b/sdk/python/feast/infra/online_stores/redis.py index 9561705aaa..ad84e8db7c 100644 --- a/sdk/python/feast/infra/online_stores/redis.py +++ b/sdk/python/feast/infra/online_stores/redis.py @@ -21,6 +21,7 @@ Callable, Dict, List, + Literal, Optional, Sequence, Tuple, @@ -30,7 +31,6 @@ import pytz from google.protobuf.timestamp_pb2 import Timestamp from pydantic import StrictStr -from pydantic.typing import Literal from feast import Entity, FeatureView, RepoConfig, utils from feast.infra.online_stores.helpers import _mmh3, _redis_key, _redis_key_prefix diff --git a/sdk/python/feast/infra/online_stores/snowflake.py b/sdk/python/feast/infra/online_stores/snowflake.py index c1a03a2862..f5600249c9 100644 --- a/sdk/python/feast/infra/online_stores/snowflake.py +++ b/sdk/python/feast/infra/online_stores/snowflake.py @@ -2,11 +2,10 @@ import os from binascii import hexlify from datetime import datetime -from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple +from typing import Any, Callable, Dict, List, Literal, Optional, Sequence, Tuple import pandas as pd -from pydantic import Field, StrictStr -from pydantic.schema import Literal +from pydantic import ConfigDict, Field, StrictStr from feast.entity import Entity from feast.feature_view import FeatureView @@ -57,9 +56,7 @@ class SnowflakeOnlineStoreConfig(FeastConfigBaseModel): schema_: Optional[str] = Field("PUBLIC", alias="schema") """ Snowflake schema name """ - - class Config: - allow_population_by_field_name = True + model_config = ConfigDict(populate_by_name=True) class SnowflakeOnlineStore(OnlineStore): diff --git a/sdk/python/feast/infra/online_stores/sqlite.py b/sdk/python/feast/infra/online_stores/sqlite.py index 6949b2bf24..4a6aa28889 100644 --- a/sdk/python/feast/infra/online_stores/sqlite.py +++ b/sdk/python/feast/infra/online_stores/sqlite.py @@ -16,10 +16,9 @@ import sqlite3 from datetime import datetime from pathlib import Path -from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple +from typing import Any, Callable, Dict, List, Literal, Optional, Sequence, Tuple from pydantic import StrictStr -from pydantic.schema import Literal from feast import Entity from feast.feature_view import FeatureView diff --git a/sdk/python/feast/infra/passthrough_provider.py b/sdk/python/feast/infra/passthrough_provider.py index 811abe106c..aca18f4856 100644 --- a/sdk/python/feast/infra/passthrough_provider.py +++ b/sdk/python/feast/infra/passthrough_provider.py @@ -70,7 +70,7 @@ def batch_engine(self) -> BatchMaterializationEngine: if self._batch_engine: return self._batch_engine else: - engine_config = self.repo_config._batch_engine_config + engine_config = self.repo_config.batch_engine_config config_is_dict = False if isinstance(engine_config, str): engine_config_type = engine_config diff --git a/sdk/python/feast/infra/registry/snowflake.py b/sdk/python/feast/infra/registry/snowflake.py index c1ebf13d6b..cdf79c78b5 100644 --- a/sdk/python/feast/infra/registry/snowflake.py +++ b/sdk/python/feast/infra/registry/snowflake.py @@ -5,10 +5,9 @@ from datetime import datetime, timedelta from enum import Enum from threading import Lock -from typing import Any, Callable, List, Optional, Set, Union +from typing import Any, Callable, List, Literal, Optional, Set, Union -from pydantic import Field, StrictStr -from pydantic.schema import Literal +from pydantic import ConfigDict, Field, StrictStr import feast from feast import usage @@ -103,9 +102,7 @@ class SnowflakeRegistryConfig(RegistryConfig): schema_: Optional[str] = Field("PUBLIC", alias="schema") """ Snowflake schema name """ - - class Config: - allow_population_by_field_name = True + model_config = ConfigDict(populate_by_name=True) class SnowflakeRegistry(BaseRegistry): diff --git a/sdk/python/feast/repo_config.py b/sdk/python/feast/repo_config.py index 3461ae058b..38e5ac50d3 100644 --- a/sdk/python/feast/repo_config.py +++ b/sdk/python/feast/repo_config.py @@ -2,20 +2,19 @@ import os import warnings from pathlib import Path -from typing import Any +from typing import Any, Dict, Optional import yaml from pydantic import ( BaseModel, + ConfigDict, Field, StrictInt, StrictStr, ValidationError, - root_validator, - validator, + field_validator, + model_validator, ) -from pydantic.error_wrappers import ErrorWrapper -from pydantic.typing import Dict, Optional from feast.errors import ( FeastFeatureServerTypeInvalidError, @@ -93,17 +92,13 @@ class FeastBaseModel(BaseModel): """Feast Pydantic Configuration Class""" - class Config: - arbitrary_types_allowed = True - extra = "allow" + model_config = ConfigDict(arbitrary_types_allowed=True, extra="allow") class FeastConfigBaseModel(BaseModel): """Feast Pydantic Configuration Class""" - class Config: - arbitrary_types_allowed = True - extra = "forbid" + model_config = ConfigDict(arbitrary_types_allowed=True, extra="forbid") class RegistryConfig(FeastBaseModel): @@ -112,7 +107,7 @@ class RegistryConfig(FeastBaseModel): registry_type: StrictStr = "file" """ str: Provider name or a class name that implements Registry.""" - registry_store_type: Optional[StrictStr] + registry_store_type: Optional[StrictStr] = None """ str: Provider name or a class name that implements RegistryStore. """ path: StrictStr = "" @@ -126,7 +121,7 @@ class RegistryConfig(FeastBaseModel): set to infinity by setting TTL to 0 seconds, which means the cache will only be loaded once and will never expire. Users can manually refresh the cache by calling feature_store.refresh_registry() """ - s3_additional_kwargs: Optional[Dict[str, str]] + s3_additional_kwargs: Optional[Dict[str, str]] = None """ Dict[str, str]: Extra arguments to pass to boto3 when writing the registry file to S3. """ @@ -142,7 +137,7 @@ class RepoConfig(FeastBaseModel): provider: StrictStr """ str: local or gcp or aws """ - _registry_config: Any = Field(alias="registry", default="data/registry.db") + registry_config: Any = Field(alias="registry", default="data/registry.db") """ Configures the registry. Can be: 1. str: a path to a file based registry (a local path, or remote object storage path, e.g. a GCS URI) @@ -150,19 +145,19 @@ class RepoConfig(FeastBaseModel): 3. SnowflakeRegistryConfig: Using a Snowflake table to store the registry """ - _online_config: Any = Field(alias="online_store") + online_config: Any = Field(None, alias="online_store") """ OnlineStoreConfig: Online store configuration (optional depending on provider) """ - _offline_config: Any = Field(alias="offline_store") + offline_config: Any = Field(None, alias="offline_store") """ OfflineStoreConfig: Offline store configuration (optional depending on provider) """ - _batch_engine_config: Any = Field(alias="batch_engine") + batch_engine_config: Any = Field(None, alias="batch_engine") """ BatchMaterializationEngine: Batch materialization configuration (optional depending on provider)""" - feature_server: Optional[Any] + feature_server: Optional[Any] = None """ FeatureServerConfig: Feature server configuration (optional depending on provider) """ - flags: Any + flags: Any = None """ Flags (deprecated field): Feature flags for experimental features """ repo_path: Optional[Path] = None @@ -187,42 +182,42 @@ def __init__(self, **data: Any): self._registry = None if "registry" not in data: raise FeastRegistryNotSetError() - self._registry_config = data["registry"] + self.registry_config = data["registry"] self._offline_store = None if "offline_store" in data: - self._offline_config = data["offline_store"] + self.offline_config = data["offline_store"] else: if data["provider"] == "local": - self._offline_config = "file" + self.offline_config = "file" elif data["provider"] == "gcp": - self._offline_config = "bigquery" + self.offline_config = "bigquery" elif data["provider"] == "aws": - self._offline_config = "redshift" + self.offline_config = "redshift" elif data["provider"] == "azure": - self._offline_config = "mssql" + self.offline_config = "mssql" self._online_store = None if "online_store" in data: - self._online_config = data["online_store"] + self.online_config = data["online_store"] else: if data["provider"] == "local": - self._online_config = "sqlite" + self.online_config = "sqlite" elif data["provider"] == "gcp": - self._online_config = "datastore" + self.online_config = "datastore" elif data["provider"] == "aws": - self._online_config = "dynamodb" + self.online_config = "dynamodb" elif data["provider"] == "rockset": - self._online_config = "rockset" + self.online_config = "rockset" self._batch_engine = None if "batch_engine" in data: - self._batch_engine_config = data["batch_engine"] + self.batch_engine_config = data["batch_engine"] elif "batch_engine_config" in data: - self._batch_engine_config = data["batch_engine_config"] + self.batch_engine_config = data["batch_engine_config"] else: # Defaults to using local in-process materialization engine. - self._batch_engine_config = "local" + self.batch_engine_config = "local" if isinstance(self.feature_server, Dict): self.feature_server = get_feature_server_config_from_type( @@ -242,71 +237,71 @@ def __init__(self, **data: Any): @property def registry(self): if not self._registry: - if isinstance(self._registry_config, Dict): - if "registry_type" in self._registry_config: + if isinstance(self.registry_config, Dict): + if "registry_type" in self.registry_config: self._registry = get_registry_config_from_type( - self._registry_config["registry_type"] - )(**self._registry_config) + self.registry_config["registry_type"] + )(**self.registry_config) else: # This may be a custom registry store, which does not need a 'registry_type' - self._registry = RegistryConfig(**self._registry_config) - elif isinstance(self._registry_config, str): + self._registry = RegistryConfig(**self.registry_config) + elif isinstance(self.registry_config, str): # User passed in just a path to file registry self._registry = get_registry_config_from_type("file")( - path=self._registry_config + path=self.registry_config ) - elif self._registry_config: - self._registry = self._registry_config + elif self.registry_config: + self._registry = self.registry_config return self._registry @property def offline_store(self): if not self._offline_store: - if isinstance(self._offline_config, Dict): + if isinstance(self.offline_config, Dict): self._offline_store = get_offline_config_from_type( - self._offline_config["type"] - )(**self._offline_config) - elif isinstance(self._offline_config, str): + self.offline_config["type"] + )(**self.offline_config) + elif isinstance(self.offline_config, str): self._offline_store = get_offline_config_from_type( - self._offline_config + self.offline_config )() - elif self._offline_config: - self._offline_store = self._offline_config + elif self.offline_config: + self._offline_store = self.offline_config return self._offline_store @property def online_store(self): if not self._online_store: - if isinstance(self._online_config, Dict): + if isinstance(self.online_config, Dict): self._online_store = get_online_config_from_type( - self._online_config["type"] - )(**self._online_config) - elif isinstance(self._online_config, str): - self._online_store = get_online_config_from_type(self._online_config)() - elif self._online_config: - self._online_store = self._online_config + self.online_config["type"] + )(**self.online_config) + elif isinstance(self.online_config, str): + self._online_store = get_online_config_from_type(self.online_config)() + elif self.online_config: + self._online_store = self.online_config return self._online_store @property def batch_engine(self): if not self._batch_engine: - if isinstance(self._batch_engine_config, Dict): + if isinstance(self.batch_engine_config, Dict): self._batch_engine = get_batch_engine_config_from_type( - self._batch_engine_config["type"] - )(**self._batch_engine_config) - elif isinstance(self._batch_engine_config, str): + self.batch_engine_config["type"] + )(**self.batch_engine_config) + elif isinstance(self.batch_engine_config, str): self._batch_engine = get_batch_engine_config_from_type( - self._batch_engine_config + self.batch_engine_config )() - elif self._batch_engine_config: + elif self.batch_engine_config: self._batch_engine = self._batch_engine return self._batch_engine - @root_validator(pre=True) + @model_validator(mode="before") @log_exceptions - def _validate_online_store_config(cls, values): + def _validate_online_store_config(cls, values: Any) -> Any: # This method will validate whether the online store configurations are set correctly. This explicit validation # is necessary because Pydantic Unions throw very verbose and cryptic exceptions. We also use this method to # impute the default online store type based on the selected provider. For the time being this method should be @@ -347,14 +342,12 @@ def _validate_online_store_config(cls, values): online_config_class = get_online_config_from_type(online_store_type) online_config_class(**values["online_store"]) except ValidationError as e: - raise ValidationError( - [ErrorWrapper(e, loc="online_store")], - model=RepoConfig, - ) + raise e return values - @root_validator(pre=True) - def _validate_offline_store_config(cls, values): + @model_validator(mode="before") + @classmethod + def _validate_offline_store_config(cls, values: Any) -> Any: # Set empty offline_store config if it isn't set explicitly if "offline_store" not in values: values["offline_store"] = dict() @@ -385,15 +378,13 @@ def _validate_offline_store_config(cls, values): offline_config_class = get_offline_config_from_type(offline_store_type) offline_config_class(**values["offline_store"]) except ValidationError as e: - raise ValidationError( - [ErrorWrapper(e, loc="offline_store")], - model=RepoConfig, - ) + raise e return values - @root_validator(pre=True) - def _validate_feature_server_config(cls, values): + @model_validator(mode="before") + @classmethod + def _validate_feature_server_config(cls, values: Any) -> Any: # Having no feature server is the default. if "feature_server" not in values: return values @@ -420,15 +411,13 @@ def _validate_feature_server_config(cls, values): ) feature_server_config_class(**values["feature_server"]) except ValidationError as e: - raise ValidationError( - [ErrorWrapper(e, loc="feature_server")], - model=RepoConfig, - ) + raise e return values - @validator("project") - def _validate_project_name(cls, v): + @field_validator("project") + @classmethod + def _validate_project_name(cls, v: str) -> str: from feast.repo_operations import is_valid_name if not is_valid_name(v): @@ -438,9 +427,10 @@ def _validate_project_name(cls, v): ) return v - @validator("flags") - def _validate_flags(cls, v): - if not isinstance(v, Dict): + @field_validator("flags") + @classmethod + def _validate_flags(cls, v: Optional[dict]) -> Optional[dict]: + if not isinstance(v, dict): return _logger.warning( @@ -463,8 +453,7 @@ def write_to_path(self, repo_path: Path): sort_keys=False, ) - class Config: - allow_population_by_field_name = True + model_config = ConfigDict(populate_by_name=True) class FeastConfigError(Exception): diff --git a/sdk/python/tests/integration/feature_repos/repo_configuration.py b/sdk/python/tests/integration/feature_repos/repo_configuration.py index 027dea2c58..47cef66083 100644 --- a/sdk/python/tests/integration/feature_repos/repo_configuration.py +++ b/sdk/python/tests/integration/feature_repos/repo_configuration.py @@ -465,7 +465,7 @@ def construct_test_environment( # Create feature_store.yaml out of the config with open(Path(repo_dir_name) / "feature_store.yaml", "w") as f: - yaml.safe_dump(json.loads(config.json()), f) + yaml.safe_dump(json.loads(config.model_dump_json(by_alias=True)), f) fs = FeatureStore(repo_dir_name) # We need to initialize the registry, because if nothing is applied in the test before tearing down diff --git a/sdk/python/tests/unit/infra/offline_stores/test_offline_store.py b/sdk/python/tests/unit/infra/offline_stores/test_offline_store.py index 220bdba0da..00619e78ea 100644 --- a/sdk/python/tests/unit/infra/offline_stores/test_offline_store.py +++ b/sdk/python/tests/unit/infra/offline_stores/test_offline_store.py @@ -118,6 +118,7 @@ def retrieval_job(request, environment): database="feast", s3_staging_location="s3://feast-integration-tests/redshift/tests/ingestion", iam_role="arn:aws:iam::402087665549:role/redshift_s3_access_role", + workgroup="", ) environment.test_repo_config.offline_store = offline_store_config return RedshiftRetrievalJob( diff --git a/sdk/python/tests/unit/infra/offline_stores/test_redshift.py b/sdk/python/tests/unit/infra/offline_stores/test_redshift.py index 049977489b..48ee99e89f 100644 --- a/sdk/python/tests/unit/infra/offline_stores/test_redshift.py +++ b/sdk/python/tests/unit/infra/offline_stores/test_redshift.py @@ -31,6 +31,7 @@ def test_offline_write_batch( user="user", iam_role="abcdef", s3_staging_location="s3://bucket/path", + workgroup="", ), ) diff --git a/sdk/python/tests/unit/infra/scaffolding/test_repo_config.py b/sdk/python/tests/unit/infra/scaffolding/test_repo_config.py index 42229f8683..11c56efb97 100644 --- a/sdk/python/tests/unit/infra/scaffolding/test_repo_config.py +++ b/sdk/python/tests/unit/infra/scaffolding/test_repo_config.py @@ -45,8 +45,7 @@ def test_nullable_online_store_aws(): entity_key_serialization_version: 2 """ ), - expect_error="__root__ -> offline_store -> __root__\n" - " please specify either cluster_id & user if using provisioned clusters, or workgroup if using serverless (type=value_error)", + expect_error="7 validation errors for RepoConfig\ncluster_id\n Field required", ) @@ -154,8 +153,7 @@ def test_extra_field(): path: "online_store.db" """ ), - expect_error="__root__ -> online_store -> that_field_should_not_be_here\n" - " extra fields not permitted (type=value_error.extra)", + expect_error="1 validation error for RepoConfig\nthat_field_should_not_be_here\n Extra inputs are not permitted", ) @@ -186,7 +184,7 @@ def test_bad_type(): path: 100500 """ ), - expect_error="__root__ -> online_store -> path\n str type expected", + expect_error="1 validation error for RepoConfig\npath\n Input should be a valid string", ) @@ -201,9 +199,7 @@ def test_no_project(): entity_key_serialization_version: 2 """ ), - expect_error="1 validation error for RepoConfig\n" - "project\n" - " field required (type=value_error.missing)", + expect_error="1 validation error for RepoConfig\nproject\n Field required", ) diff --git a/sdk/python/tests/utils/cli_repo_creator.py b/sdk/python/tests/utils/cli_repo_creator.py index 92b6dd992a..484962137c 100644 --- a/sdk/python/tests/utils/cli_repo_creator.py +++ b/sdk/python/tests/utils/cli_repo_creator.py @@ -11,6 +11,8 @@ from feast import cli from feast.feature_store import FeatureStore +#debug +import inspect def get_example_repo(example_repo_py) -> str: parent = Path(__file__).parent diff --git a/setup.py b/setup.py index 81ae63a7a4..51a78e5274 100644 --- a/setup.py +++ b/setup.py @@ -61,7 +61,7 @@ "protobuf<4.23.4,>3.20", "proto-plus>=1.20.0,<2", "pyarrow>=4", - "pydantic>=1,<2", + "pydantic>=1", "pygments>=2.12.0,<3", "PyYAML>=5.4.0,<7", "requests", @@ -126,7 +126,7 @@ "cassandra-driver>=3.24.0,<4", ] -GE_REQUIRED = ["great_expectations>=0.15.41,<0.16.0"] +GE_REQUIRED = ["great_expectations>=0.15.41"] AZURE_REQUIRED = [ "azure-storage-blob>=0.37.0", From 62a7f1fa5e1e6c4f7b9f46bc5d5b220b199e9d34 Mon Sep 17 00:00:00 2001 From: Shuchu Han Date: Wed, 7 Feb 2024 19:30:25 -0500 Subject: [PATCH 2/9] feat: fix the python lint check errors. Signed-off-by: Shuchu Han --- sdk/python/feast/importer.py | 2 +- .../infra/contrib/spark_kafka_processor.py | 4 ++- .../feast/infra/contrib/stream_processor.py | 6 +++- .../infra/feature_servers/base_config.py | 2 +- .../athena_offline_store/tests/data_source.py | 5 +-- .../contrib/mssql_offline_store/mssql.py | 4 +-- .../mssql_offline_store/tests/data_source.py | 4 +-- .../tests/data_source.py | 4 +-- .../spark_offline_store/tests/data_source.py | 4 +-- .../test_config/manual_tests.py | 2 +- .../trino_offline_store/tests/data_source.py | 6 ++-- .../infra/offline_stores/snowflake_source.py | 10 +++--- .../feast/infra/registry/base_registry.py | 36 +++++++++++++++++++ .../infra/utils/snowflake/snowflake_utils.py | 6 +--- sdk/python/feast/repo_config.py | 4 +-- sdk/python/tests/conftest.py | 5 +-- sdk/python/tests/foo_provider.py | 1 - .../feature_repos/repo_configuration.py | 14 ++++---- .../universal/data_source_creator.py | 9 ++--- .../universal/data_sources/bigquery.py | 4 +-- .../universal/data_sources/file.py | 12 ++++--- .../universal/data_sources/redshift.py | 5 +-- .../universal/data_sources/snowflake.py | 4 +-- .../feature_repos/universal/feature_views.py | 3 +- .../universal/online_store_creator.py | 5 ++- sdk/python/tests/unit/cli/test_cli_chdir.py | 21 +++++++---- .../offline_stores/test_offline_store.py | 4 ++- sdk/python/tests/utils/cli_repo_creator.py | 2 -- 28 files changed, 119 insertions(+), 69 deletions(-) diff --git a/sdk/python/feast/importer.py b/sdk/python/feast/importer.py index d1d7d62901..94a4526748 100644 --- a/sdk/python/feast/importer.py +++ b/sdk/python/feast/importer.py @@ -8,7 +8,7 @@ ) -def import_class(module_name: str, class_name: str, class_type: Optional[str] = None): +def import_class(module_name: str, class_name: str, class_type: str = ""): """ Dynamically loads and returns a class from a module. diff --git a/sdk/python/feast/infra/contrib/spark_kafka_processor.py b/sdk/python/feast/infra/contrib/spark_kafka_processor.py index bac1c28b06..fc4a34f17b 100644 --- a/sdk/python/feast/infra/contrib/spark_kafka_processor.py +++ b/sdk/python/feast/infra/contrib/spark_kafka_processor.py @@ -1,5 +1,5 @@ from types import MethodType -from typing import List, Optional +from typing import List, Optional, no_type_check import pandas as pd from pyspark.sql import DataFrame, SparkSession @@ -76,6 +76,8 @@ def ingest_stream_feature_view( online_store_query = self._write_stream_data(transformed_df, to) return online_store_query + # In the line 64 of __init__(), the "data_source" is assigned a stream_source (and has to be KafkaSource as in line 40). + @no_type_check def _ingest_stream_data(self) -> StreamTable: """Only supports json and avro formats currently.""" if self.format == "json": diff --git a/sdk/python/feast/infra/contrib/stream_processor.py b/sdk/python/feast/infra/contrib/stream_processor.py index df4e144f8c..c4620f4ca1 100644 --- a/sdk/python/feast/infra/contrib/stream_processor.py +++ b/sdk/python/feast/infra/contrib/stream_processor.py @@ -1,4 +1,4 @@ -from abc import ABC +from abc import ABC, abstractmethod from types import MethodType from typing import TYPE_CHECKING, Optional @@ -50,6 +50,7 @@ def __init__( self.sfv = sfv self.data_source = data_source + @abstractmethod def ingest_stream_feature_view(self, to: PushMode = PushMode.ONLINE) -> None: """ Ingests data from the stream source attached to the stream feature view; transforms the data @@ -57,12 +58,14 @@ def ingest_stream_feature_view(self, to: PushMode = PushMode.ONLINE) -> None: """ raise NotImplementedError + @abstractmethod def _ingest_stream_data(self) -> StreamTable: """ Ingests data into a StreamTable. """ raise NotImplementedError + @abstractmethod def _construct_transformation_plan(self, table: StreamTable) -> StreamTable: """ Applies transformations on top of StreamTable object. Since stream engines use lazy @@ -71,6 +74,7 @@ def _construct_transformation_plan(self, table: StreamTable) -> StreamTable: """ raise NotImplementedError + @abstractmethod def _write_stream_data(self, table: StreamTable, to: PushMode) -> None: """ Launches a job to persist stream data to the online store and/or offline store, depending diff --git a/sdk/python/feast/infra/feature_servers/base_config.py b/sdk/python/feast/infra/feature_servers/base_config.py index 756dd79b43..1a348032e1 100644 --- a/sdk/python/feast/infra/feature_servers/base_config.py +++ b/sdk/python/feast/infra/feature_servers/base_config.py @@ -30,5 +30,5 @@ class BaseFeatureServerConfig(FeastConfigBaseModel): enabled: StrictBool = False """Whether the feature server should be launched.""" - feature_logging: Optional[FeatureLoggingConfig] + feature_logging: Optional[FeatureLoggingConfig] = None """ Feature logging configuration """ diff --git a/sdk/python/feast/infra/offline_stores/contrib/athena_offline_store/tests/data_source.py b/sdk/python/feast/infra/offline_stores/contrib/athena_offline_store/tests/data_source.py index f68e109d6c..a8f05c1c4b 100644 --- a/sdk/python/feast/infra/offline_stores/contrib/athena_offline_store/tests/data_source.py +++ b/sdk/python/feast/infra/offline_stores/contrib/athena_offline_store/tests/data_source.py @@ -43,15 +43,16 @@ def __init__(self, project_name: str, *args, **kwargs): workgroup=workgroup, s3_staging_location=f"s3://{bucket_name}/test_dir", ) + self, def create_data_source( self, df: pd.DataFrame, destination_name: str, - suffix: Optional[str] = None, - timestamp_field="ts", + event_timestamp_column="ts", created_timestamp_column="created_ts", field_mapping: Optional[Dict[str, str]] = None, + timestamp_field: Optional[str] = "ts", ) -> DataSource: table_name = destination_name diff --git a/sdk/python/feast/infra/offline_stores/contrib/mssql_offline_store/mssql.py b/sdk/python/feast/infra/offline_stores/contrib/mssql_offline_store/mssql.py index a3d18a2ab2..67bae292c3 100644 --- a/sdk/python/feast/infra/offline_stores/contrib/mssql_offline_store/mssql.py +++ b/sdk/python/feast/infra/offline_stores/contrib/mssql_offline_store/mssql.py @@ -31,7 +31,7 @@ from feast.infra.provider import RetrievalJob from feast.infra.registry.base_registry import BaseRegistry from feast.on_demand_feature_view import OnDemandFeatureView -from feast.repo_config import FeastBaseModel, RepoConfig +from feast.repo_config import FeastConfigBaseModel, RepoConfig from feast.saved_dataset import SavedDatasetStorage from feast.type_map import pa_to_mssql_type from feast.usage import log_exceptions_and_usage @@ -42,7 +42,7 @@ EntitySchema = Dict[str, np.dtype] -class MsSqlServerOfflineStoreConfig(FeastBaseModel): +class MsSqlServerOfflineStoreConfig(FeastConfigBaseModel): """Offline store config for SQL Server""" type: Literal["mssql"] = "mssql" diff --git a/sdk/python/feast/infra/offline_stores/contrib/mssql_offline_store/tests/data_source.py b/sdk/python/feast/infra/offline_stores/contrib/mssql_offline_store/tests/data_source.py index 2604cf7c18..71ce56bdef 100644 --- a/sdk/python/feast/infra/offline_stores/contrib/mssql_offline_store/tests/data_source.py +++ b/sdk/python/feast/infra/offline_stores/contrib/mssql_offline_store/tests/data_source.py @@ -64,10 +64,10 @@ def create_data_source( self, df: pd.DataFrame, destination_name: str, - timestamp_field="ts", + event_timestamp_column="ts", created_timestamp_column="created_ts", field_mapping: Optional[Dict[str, str]] = None, - **kwargs, + timestamp_field: Optional[str] = "ts", ) -> DataSource: # Make sure the field mapping is correct and convert the datetime datasources. if timestamp_field in df: diff --git a/sdk/python/feast/infra/offline_stores/contrib/postgres_offline_store/tests/data_source.py b/sdk/python/feast/infra/offline_stores/contrib/postgres_offline_store/tests/data_source.py index 224fcea30f..46d5c20e97 100644 --- a/sdk/python/feast/infra/offline_stores/contrib/postgres_offline_store/tests/data_source.py +++ b/sdk/python/feast/infra/offline_stores/contrib/postgres_offline_store/tests/data_source.py @@ -82,10 +82,10 @@ def create_data_source( self, df: pd.DataFrame, destination_name: str, - suffix: Optional[str] = None, - timestamp_field="ts", + event_timestamp_column="ts", created_timestamp_column="created_ts", field_mapping: Optional[Dict[str, str]] = None, + timestamp_field: Optional[str] = "ts", ) -> DataSource: destination_name = self.get_prefixed_table_name(destination_name) diff --git a/sdk/python/feast/infra/offline_stores/contrib/spark_offline_store/tests/data_source.py b/sdk/python/feast/infra/offline_stores/contrib/spark_offline_store/tests/data_source.py index 7b4fda3b5f..2a36b152af 100644 --- a/sdk/python/feast/infra/offline_stores/contrib/spark_offline_store/tests/data_source.py +++ b/sdk/python/feast/infra/offline_stores/contrib/spark_offline_store/tests/data_source.py @@ -68,10 +68,10 @@ def create_data_source( self, df: pd.DataFrame, destination_name: str, - timestamp_field="ts", + event_timestamp_column="ts", created_timestamp_column="created_ts", field_mapping: Optional[Dict[str, str]] = None, - **kwargs, + timestamp_field: Optional[str] = "ts", ) -> DataSource: if timestamp_field in df: df[timestamp_field] = pd.to_datetime(df[timestamp_field], utc=True) diff --git a/sdk/python/feast/infra/offline_stores/contrib/trino_offline_store/test_config/manual_tests.py b/sdk/python/feast/infra/offline_stores/contrib/trino_offline_store/test_config/manual_tests.py index 7d31aa90fb..a31d368ea1 100644 --- a/sdk/python/feast/infra/offline_stores/contrib/trino_offline_store/test_config/manual_tests.py +++ b/sdk/python/feast/infra/offline_stores/contrib/trino_offline_store/test_config/manual_tests.py @@ -8,6 +8,6 @@ FULL_REPO_CONFIGS = [ IntegrationTestRepoConfig( provider="local", - offline_store_creator=TrinoSourceCreator, + offline_store_creator=TrinoSourceCreator, # type: ignore ), ] diff --git a/sdk/python/feast/infra/offline_stores/contrib/trino_offline_store/tests/data_source.py b/sdk/python/feast/infra/offline_stores/contrib/trino_offline_store/tests/data_source.py index a5aa53df7a..fcc0c8d0fa 100644 --- a/sdk/python/feast/infra/offline_stores/contrib/trino_offline_store/tests/data_source.py +++ b/sdk/python/feast/infra/offline_stores/contrib/trino_offline_store/tests/data_source.py @@ -81,10 +81,10 @@ def create_data_source( self, df: pd.DataFrame, destination_name: str, - suffix: Optional[str] = None, - timestamp_field="ts", + event_timestamp_column="ts", created_timestamp_column="created_ts", field_mapping: Optional[Dict[str, str]] = None, + timestamp_field: Optional[str] = "ts", ) -> DataSource: destination_name = self.get_prefixed_table_name(destination_name) self.client.execute_query( @@ -128,4 +128,6 @@ def create_offline_store_config(self) -> FeastConfigBaseModel: catalog="memory", dataset=self.project_name, connector={"type": "memory"}, + user="test", + auth=None, ) diff --git a/sdk/python/feast/infra/offline_stores/snowflake_source.py b/sdk/python/feast/infra/offline_stores/snowflake_source.py index e29197c68d..a8a7539ed3 100644 --- a/sdk/python/feast/infra/offline_stores/snowflake_source.py +++ b/sdk/python/feast/infra/offline_stores/snowflake_source.py @@ -1,5 +1,5 @@ import warnings -from typing import Any, Callable, Dict, Iterable, List, Optional, Tuple +from typing import Any, Callable, Dict, Iterable, List, Optional, Tuple, no_type_check from typeguard import typechecked @@ -202,6 +202,7 @@ def get_table_query_string(self) -> str: def source_datatype_to_feast_value_type() -> Callable[[str], ValueType]: return type_map.snowflake_type_to_feast_value_type + @no_type_check def get_table_column_names_and_types( self, config: RepoConfig ) -> Iterable[Tuple[str, str]]: @@ -279,12 +280,12 @@ def get_table_column_names_and_types( else: row["snowflake_type"] = "NUMBERwSCALE" - elif row["type_code"] in [5, 9, 12]: + elif row["type_code"] in {5, 9, 12}: error = snowflake_unsupported_map[row["type_code"]] raise NotImplementedError( f"The following Snowflake Data Type is not supported: {error}" ) - elif row["type_code"] in [1, 2, 3, 4, 6, 7, 8, 10, 11, 13]: + elif row["type_code"] in {1, 2, 3, 4, 6, 7, 8, 10, 11, 13}: row["snowflake_type"] = snowflake_type_code_map[row["type_code"]] else: raise NotImplementedError( @@ -292,7 +293,8 @@ def get_table_column_names_and_types( ) return [ - (column["column_name"], column["snowflake_type"]) for column in metadata + (str(column["column_name"]), str(column["snowflake_type"])) + for column in metadata ] diff --git a/sdk/python/feast/infra/registry/base_registry.py b/sdk/python/feast/infra/registry/base_registry.py index f89b079478..3d9d0c1091 100644 --- a/sdk/python/feast/infra/registry/base_registry.py +++ b/sdk/python/feast/infra/registry/base_registry.py @@ -51,6 +51,7 @@ def apply_entity(self, entity: Entity, project: str, commit: bool = True): project: Feast project that this entity belongs to commit: Whether the change should be persisted immediately """ + pass @abstractmethod def delete_entity(self, name: str, project: str, commit: bool = True): @@ -62,6 +63,7 @@ def delete_entity(self, name: str, project: str, commit: bool = True): project: Feast project that this entity belongs to commit: Whether the change should be persisted immediately """ + pass @abstractmethod def get_entity(self, name: str, project: str, allow_cache: bool = False) -> Entity: @@ -77,6 +79,7 @@ def get_entity(self, name: str, project: str, allow_cache: bool = False) -> Enti Returns either the specified entity, or raises an exception if none is found """ + pass @abstractmethod def list_entities(self, project: str, allow_cache: bool = False) -> List[Entity]: @@ -90,6 +93,7 @@ def list_entities(self, project: str, allow_cache: bool = False) -> List[Entity] Returns: List of entities """ + pass # Data source operations @abstractmethod @@ -104,6 +108,7 @@ def apply_data_source( project: Feast project that this data source belongs to commit: Whether to immediately commit to the registry """ + pass @abstractmethod def delete_data_source(self, name: str, project: str, commit: bool = True): @@ -115,6 +120,7 @@ def delete_data_source(self, name: str, project: str, commit: bool = True): project: Feast project that this data source belongs to commit: Whether the change should be persisted immediately """ + pass @abstractmethod def get_data_source( @@ -131,6 +137,7 @@ def get_data_source( Returns: Returns either the specified data source, or raises an exception if none is found """ + pass @abstractmethod def list_data_sources( @@ -146,6 +153,7 @@ def list_data_sources( Returns: List of data sources """ + pass # Feature service operations @abstractmethod @@ -159,6 +167,7 @@ def apply_feature_service( feature_service: A feature service that will be registered project: Feast project that this entity belongs to """ + pass @abstractmethod def delete_feature_service(self, name: str, project: str, commit: bool = True): @@ -170,6 +179,7 @@ def delete_feature_service(self, name: str, project: str, commit: bool = True): project: Feast project that this feature service belongs to commit: Whether the change should be persisted immediately """ + pass @abstractmethod def get_feature_service( @@ -187,6 +197,7 @@ def get_feature_service( Returns either the specified feature service, or raises an exception if none is found """ + pass @abstractmethod def list_feature_services( @@ -202,6 +213,7 @@ def list_feature_services( Returns: List of feature services """ + pass # Feature view operations @abstractmethod @@ -216,6 +228,7 @@ def apply_feature_view( project: Feast project that this feature view belongs to commit: Whether the change should be persisted immediately """ + pass @abstractmethod def delete_feature_view(self, name: str, project: str, commit: bool = True): @@ -227,6 +240,7 @@ def delete_feature_view(self, name: str, project: str, commit: bool = True): project: Feast project that this feature view belongs to commit: Whether the change should be persisted immediately """ + pass # stream feature view operations @abstractmethod @@ -245,6 +259,7 @@ def get_stream_feature_view( Returns either the specified feature view, or raises an exception if none is found """ + pass @abstractmethod def list_stream_feature_views( @@ -260,6 +275,7 @@ def list_stream_feature_views( Returns: List of stream feature views """ + pass # on demand feature view operations @abstractmethod @@ -278,6 +294,7 @@ def get_on_demand_feature_view( Returns either the specified on demand feature view, or raises an exception if none is found """ + pass @abstractmethod def list_on_demand_feature_views( @@ -293,6 +310,7 @@ def list_on_demand_feature_views( Returns: List of on demand feature views """ + pass # regular feature view operations @abstractmethod @@ -311,6 +329,7 @@ def get_feature_view( Returns either the specified feature view, or raises an exception if none is found """ + pass @abstractmethod def list_feature_views( @@ -326,6 +345,7 @@ def list_feature_views( Returns: List of feature views """ + pass # request feature view operations @abstractmethod @@ -344,6 +364,7 @@ def get_request_feature_view( Returns either the specified feature view, or raises an exception if none is found """ + pass @abstractmethod def list_request_feature_views( @@ -359,6 +380,7 @@ def list_request_feature_views( Returns: List of request feature views """ + pass @abstractmethod def apply_materialization( @@ -379,6 +401,7 @@ def apply_materialization( end_date (datetime): End date of the materialization interval to track commit: Whether the change should be persisted immediately """ + pass # Saved dataset operations @abstractmethod @@ -396,6 +419,7 @@ def apply_saved_dataset( project: Feast project that this dataset belongs to commit: Whether the change should be persisted immediately """ + pass @abstractmethod def get_saved_dataset( @@ -413,6 +437,7 @@ def get_saved_dataset( Returns either the specified SavedDataset, or raises an exception if none is found """ + pass def delete_saved_dataset(self, name: str, project: str, allow_cache: bool = False): """ @@ -427,6 +452,7 @@ def delete_saved_dataset(self, name: str, project: str, allow_cache: bool = Fals Returns either the specified SavedDataset, or raises an exception if none is found """ + pass @abstractmethod def list_saved_datasets( @@ -442,6 +468,7 @@ def list_saved_datasets( Returns: Returns the list of SavedDatasets """ + pass # Validation reference operations @abstractmethod @@ -459,6 +486,7 @@ def apply_validation_reference( project: Feast project that this dataset belongs to commit: Whether the change should be persisted immediately """ + pass @abstractmethod def delete_validation_reference(self, name: str, project: str, commit: bool = True): @@ -470,6 +498,7 @@ def delete_validation_reference(self, name: str, project: str, commit: bool = Tr project: Feast project that this object belongs to commit: Whether the change should be persisted immediately """ + pass @abstractmethod def get_validation_reference( @@ -487,6 +516,7 @@ def get_validation_reference( Returns either the specified ValidationReference, or raises an exception if none is found """ + pass # TODO: Needs to be implemented. def list_validation_references( @@ -519,6 +549,7 @@ def list_project_metadata( Returns: List of project metadata """ + raise NotImplementedError @abstractmethod def update_infra(self, infra: Infra, project: str, commit: bool = True): @@ -530,6 +561,7 @@ def update_infra(self, infra: Infra, project: str, commit: bool = True): project: Feast project that the Infra object refers to commit: Whether the change should be persisted immediately """ + pass @abstractmethod def get_infra(self, project: str, allow_cache: bool = False) -> Infra: @@ -543,6 +575,7 @@ def get_infra(self, project: str, allow_cache: bool = False) -> Infra: Returns: The stored Infra object. """ + pass @abstractmethod def apply_user_metadata( @@ -567,14 +600,17 @@ def proto(self) -> RegistryProto: Returns: The registry proto object. """ + pass @abstractmethod def commit(self): """Commits the state of the registry cache to the remote registry store.""" + pass @abstractmethod def refresh(self, project: Optional[str] = None): """Refreshes the state of the registry cache by fetching the registry state from the remote registry store.""" + pass @staticmethod def _message_to_sorted_dict(message: Message) -> Dict[str, Any]: diff --git a/sdk/python/feast/infra/utils/snowflake/snowflake_utils.py b/sdk/python/feast/infra/utils/snowflake/snowflake_utils.py index 8eb5177ac2..8548e4dbd8 100644 --- a/sdk/python/feast/infra/utils/snowflake/snowflake_utils.py +++ b/sdk/python/feast/infra/utils/snowflake/snowflake_utils.py @@ -43,11 +43,7 @@ class GetSnowflakeConnection: - def __init__( - self, - config: str, - autocommit=True, - ): + def __init__(self, config: Any, autocommit=True): self.config = config self.autocommit = autocommit diff --git a/sdk/python/feast/repo_config.py b/sdk/python/feast/repo_config.py index 38e5ac50d3..110b2afec2 100644 --- a/sdk/python/feast/repo_config.py +++ b/sdk/python/feast/repo_config.py @@ -346,7 +346,6 @@ def _validate_online_store_config(cls, values: Any) -> Any: return values @model_validator(mode="before") - @classmethod def _validate_offline_store_config(cls, values: Any) -> Any: # Set empty offline_store config if it isn't set explicitly if "offline_store" not in values: @@ -383,7 +382,6 @@ def _validate_offline_store_config(cls, values: Any) -> Any: return values @model_validator(mode="before") - @classmethod def _validate_feature_server_config(cls, values: Any) -> Any: # Having no feature server is the default. if "feature_server" not in values: @@ -431,7 +429,7 @@ def _validate_project_name(cls, v: str) -> str: @classmethod def _validate_flags(cls, v: Optional[dict]) -> Optional[dict]: if not isinstance(v, dict): - return + return v _logger.warning( "Flags are no longer necessary in Feast. Experimental features will log warnings instead." diff --git a/sdk/python/tests/conftest.py b/sdk/python/tests/conftest.py index 728bd9b34f..743a1ce4a0 100644 --- a/sdk/python/tests/conftest.py +++ b/sdk/python/tests/conftest.py @@ -18,7 +18,7 @@ from datetime import datetime, timedelta from multiprocessing import Process from sys import platform -from typing import Any, Dict, List, Tuple +from typing import Any, Dict, List, Tuple, no_type_check import pandas as pd import pytest @@ -187,9 +187,10 @@ def environment(request, worker_id): e.online_store_creator.teardown() -_config_cache = {} +_config_cache: Any = {} +@no_type_check def pytest_generate_tests(metafunc: pytest.Metafunc): """ This function receives each test function (wrapped in Metafunc) diff --git a/sdk/python/tests/foo_provider.py b/sdk/python/tests/foo_provider.py index ba256a3813..1663760b67 100644 --- a/sdk/python/tests/foo_provider.py +++ b/sdk/python/tests/foo_provider.py @@ -7,7 +7,6 @@ from tqdm import tqdm from feast import Entity, FeatureService, FeatureView, RepoConfig -from feast.infra.offline_stores.offline_store import RetrievalJob from feast.infra.provider import Provider from feast.infra.registry.base_registry import BaseRegistry from feast.protos.feast.types.EntityKey_pb2 import EntityKey as EntityKeyProto diff --git a/sdk/python/tests/integration/feature_repos/repo_configuration.py b/sdk/python/tests/integration/feature_repos/repo_configuration.py index 47cef66083..f745bafa13 100644 --- a/sdk/python/tests/integration/feature_repos/repo_configuration.py +++ b/sdk/python/tests/integration/feature_repos/repo_configuration.py @@ -99,7 +99,7 @@ "host": os.getenv("ROCKSET_APISERVER", "api.rs2.usw2.rockset.com"), } -OFFLINE_STORE_TO_PROVIDER_CONFIG: Dict[str, DataSourceCreator] = { +OFFLINE_STORE_TO_PROVIDER_CONFIG: Dict[str, Tuple[str, Type[DataSourceCreator]]] = { "file": ("local", FileDataSourceCreator), "bigquery": ("gcp", BigQueryDataSourceCreator), "redshift": ("aws", RedshiftDataSourceCreator), @@ -111,7 +111,7 @@ ] AVAILABLE_ONLINE_STORES: Dict[ - str, Tuple[Union[str, Dict[str, str]], Optional[Type[OnlineStoreCreator]]] + str, Tuple[Union[str, Dict[Any, Any]], Optional[Type[OnlineStoreCreator]]] ] = { "sqlite": ({"type": "sqlite"}, None), } @@ -169,7 +169,7 @@ AVAILABLE_ONLINE_STORES = { c.online_store["type"] if isinstance(c.online_store, dict) - else c.online_store: (c.online_store, c.online_store_creator) + else c.online_store: (c.online_store, c.online_store_creator) # type: ignore for c in FULL_REPO_CONFIGS } @@ -328,7 +328,7 @@ class UniversalFeatureViews: customer: FeatureView global_fv: FeatureView driver: FeatureView - driver_odfv: OnDemandFeatureView + driver_odfv: Optional[OnDemandFeatureView] order: FeatureView location: FeatureView field_mapping: FeatureView @@ -410,9 +410,7 @@ def construct_test_environment( online_creator = test_repo_config.online_store_creator( project, fixture_request=fixture_request ) - online_store = ( - test_repo_config.online_store - ) = online_creator.create_online_store() + online_store = online_creator.create_online_store() else: online_creator = None online_store = test_repo_config.online_store @@ -422,7 +420,7 @@ def construct_test_environment( AwsLambdaFeatureServerConfig, ) - feature_server = AwsLambdaFeatureServerConfig( + feature_server: Any = AwsLambdaFeatureServerConfig( enabled=True, execution_role_name=os.getenv( "AWS_LAMBDA_ROLE", diff --git a/sdk/python/tests/integration/feature_repos/universal/data_source_creator.py b/sdk/python/tests/integration/feature_repos/universal/data_source_creator.py index d64463606f..54be44fd1f 100644 --- a/sdk/python/tests/integration/feature_repos/universal/data_source_creator.py +++ b/sdk/python/tests/integration/feature_repos/universal/data_source_creator.py @@ -42,19 +42,20 @@ def create_data_source( A Data source object, pointing to a table or file that is uploaded/persisted for the purpose of the test. """ - ... + pass @abstractmethod def create_offline_store_config(self) -> FeastConfigBaseModel: - ... + pass @abstractmethod def create_saved_dataset_destination(self) -> SavedDatasetStorage: - ... + pass + @abstractmethod def create_logged_features_destination(self) -> LoggingDestination: raise NotImplementedError @abstractmethod def teardown(self): - ... + pass diff --git a/sdk/python/tests/integration/feature_repos/universal/data_sources/bigquery.py b/sdk/python/tests/integration/feature_repos/universal/data_sources/bigquery.py index 215d19ba7f..6122d8fd9c 100644 --- a/sdk/python/tests/integration/feature_repos/universal/data_sources/bigquery.py +++ b/sdk/python/tests/integration/feature_repos/universal/data_sources/bigquery.py @@ -64,10 +64,10 @@ def create_data_source( self, df: pd.DataFrame, destination_name: str, - timestamp_field="ts", + event_timestamp_column="ts", created_timestamp_column="created_ts", field_mapping: Optional[Dict[str, str]] = None, - **kwargs, + timestamp_field: Optional[str] = "ts", ) -> DataSource: destination_name = self.get_prefixed_table_name(destination_name) diff --git a/sdk/python/tests/integration/feature_repos/universal/data_sources/file.py b/sdk/python/tests/integration/feature_repos/universal/data_sources/file.py index 3263785683..d65740278b 100644 --- a/sdk/python/tests/integration/feature_repos/universal/data_sources/file.py +++ b/sdk/python/tests/integration/feature_repos/universal/data_sources/file.py @@ -39,9 +39,10 @@ def create_data_source( self, df: pd.DataFrame, destination_name: str, - timestamp_field="ts", + event_timestamp_column="ts", created_timestamp_column="created_ts", field_mapping: Optional[Dict[str, str]] = None, + timestamp_field: Optional[str] = "ts", ) -> DataSource: destination_name = self.get_prefixed_table_name(destination_name) @@ -94,9 +95,10 @@ def create_data_source( self, df: pd.DataFrame, destination_name: str, - timestamp_field="ts", + event_timestamp_column="ts", created_timestamp_column="created_ts", field_mapping: Optional[Dict[str, str]] = None, + timestamp_field: Optional[str] = "ts", ) -> DataSource: destination_name = self.get_prefixed_table_name(destination_name) @@ -167,11 +169,11 @@ def _upload_parquet_file(self, df, file_name, minio_endpoint): def create_data_source( self, df: pd.DataFrame, - destination_name: Optional[str] = None, - suffix: Optional[str] = None, - timestamp_field="ts", + destination_name: str, + event_timestamp_column="ts", created_timestamp_column="created_ts", field_mapping: Optional[Dict[str, str]] = None, + timestamp_field: Optional[str] = "ts", ) -> DataSource: filename = f"{destination_name}.parquet" port = self.minio.get_exposed_port("9000") diff --git a/sdk/python/tests/integration/feature_repos/universal/data_sources/redshift.py b/sdk/python/tests/integration/feature_repos/universal/data_sources/redshift.py index e6f20d6125..5a4e3f1085 100644 --- a/sdk/python/tests/integration/feature_repos/universal/data_sources/redshift.py +++ b/sdk/python/tests/integration/feature_repos/universal/data_sources/redshift.py @@ -42,16 +42,17 @@ def __init__(self, project_name: str, *args, **kwargs): iam_role=os.getenv( "AWS_IAM_ROLE", "arn:aws:iam::402087665549:role/redshift_s3_access_role" ), + workgroup="", ) def create_data_source( self, df: pd.DataFrame, destination_name: str, - suffix: Optional[str] = None, - timestamp_field="ts", + event_timestamp_column="ts", created_timestamp_column="created_ts", field_mapping: Optional[Dict[str, str]] = None, + timestamp_field: Optional[str] = "ts", ) -> DataSource: destination_name = self.get_prefixed_table_name(destination_name) diff --git a/sdk/python/tests/integration/feature_repos/universal/data_sources/snowflake.py b/sdk/python/tests/integration/feature_repos/universal/data_sources/snowflake.py index 1414291a18..1481b11a10 100644 --- a/sdk/python/tests/integration/feature_repos/universal/data_sources/snowflake.py +++ b/sdk/python/tests/integration/feature_repos/universal/data_sources/snowflake.py @@ -48,10 +48,10 @@ def create_data_source( self, df: pd.DataFrame, destination_name: str, - suffix: Optional[str] = None, - timestamp_field="ts", + event_timestamp_column="ts", created_timestamp_column="created_ts", field_mapping: Optional[Dict[str, str]] = None, + timestamp_field: Optional[str] = "ts", ) -> DataSource: destination_name = self.get_prefixed_table_name(destination_name) diff --git a/sdk/python/tests/integration/feature_repos/universal/feature_views.py b/sdk/python/tests/integration/feature_repos/universal/feature_views.py index 5938a0c936..9bb8aae77f 100644 --- a/sdk/python/tests/integration/feature_repos/universal/feature_views.py +++ b/sdk/python/tests/integration/feature_repos/universal/feature_views.py @@ -14,6 +14,7 @@ StreamFeatureView, ) from feast.data_source import DataSource, RequestSource +from feast.feature_view_projection import FeatureViewProjection from feast.types import Array, FeastType, Float32, Float64, Int32, Int64 from tests.integration.feature_repos.universal.entities import ( customer, @@ -55,7 +56,7 @@ def conv_rate_plus_100(features_df: pd.DataFrame) -> pd.DataFrame: def conv_rate_plus_100_feature_view( - sources: Dict[str, Union[RequestSource, FeatureView]], + sources: List[Union[FeatureView, RequestSource, FeatureViewProjection]], infer_features: bool = False, features: Optional[List[Field]] = None, ) -> OnDemandFeatureView: diff --git a/sdk/python/tests/integration/feature_repos/universal/online_store_creator.py b/sdk/python/tests/integration/feature_repos/universal/online_store_creator.py index 10a8143739..fed5e8cfe9 100644 --- a/sdk/python/tests/integration/feature_repos/universal/online_store_creator.py +++ b/sdk/python/tests/integration/feature_repos/universal/online_store_creator.py @@ -1,6 +1,4 @@ -from abc import ABC - -from feast.repo_config import FeastConfigBaseModel +from abc import ABC, abstractmethod class OnlineStoreCreator(ABC): @@ -10,5 +8,6 @@ def __init__(self, project_name: str, **kwargs): def create_online_store(self) -> FeastConfigBaseModel: raise NotImplementedError + @abstractmethod def teardown(self): raise NotImplementedError diff --git a/sdk/python/tests/unit/cli/test_cli_chdir.py b/sdk/python/tests/unit/cli/test_cli_chdir.py index cf1d031227..02e93fb0cc 100644 --- a/sdk/python/tests/unit/cli/test_cli_chdir.py +++ b/sdk/python/tests/unit/cli/test_cli_chdir.py @@ -18,14 +18,16 @@ def test_cli_chdir() -> None: repo_path = temp_path / "my_project" / "feature_repo" assert result.returncode == 0 - result = runner.run(["--chdir", repo_path, "apply"], cwd=temp_path) + result = runner.run(["--chdir", str(repo_path), "apply"], cwd=temp_path) assert result.returncode == 0 - result = runner.run(["--chdir", repo_path, "entities", "list"], cwd=temp_path) + result = runner.run( + ["--chdir", str(repo_path), "entities", "list"], cwd=temp_path + ) assert result.returncode == 0 result = runner.run( - ["--chdir", repo_path, "feature-views", "list"], cwd=temp_path + ["--chdir", str(repo_path), "feature-views", "list"], cwd=temp_path ) assert result.returncode == 0 @@ -34,7 +36,7 @@ def test_cli_chdir() -> None: result = runner.run( [ "--chdir", - repo_path, + str(repo_path), "materialize", start_date.isoformat(), end_date.isoformat(), @@ -44,13 +46,18 @@ def test_cli_chdir() -> None: assert result.returncode == 0 result = runner.run( - ["--chdir", repo_path, "materialize-incremental", end_date.isoformat()], + [ + "--chdir", + str(repo_path), + "materialize-incremental", + end_date.isoformat(), + ], cwd=temp_path, ) assert result.returncode == 0 - result = runner.run(["--chdir", repo_path, "registry-dump"], cwd=temp_path) + result = runner.run(["--chdir", str(repo_path), "registry-dump"], cwd=temp_path) assert result.returncode == 0 - result = runner.run(["--chdir", repo_path, "teardown"], cwd=temp_path) + result = runner.run(["--chdir", str(repo_path), "teardown"], cwd=temp_path) assert result.returncode == 0 diff --git a/sdk/python/tests/unit/infra/offline_stores/test_offline_store.py b/sdk/python/tests/unit/infra/offline_stores/test_offline_store.py index 00619e78ea..cbeee3457e 100644 --- a/sdk/python/tests/unit/infra/offline_stores/test_offline_store.py +++ b/sdk/python/tests/unit/infra/offline_stores/test_offline_store.py @@ -1,4 +1,4 @@ -from typing import List, Optional +from typing import List, Optional, no_type_check from unittest.mock import MagicMock, patch import pandas as pd @@ -60,11 +60,13 @@ def _to_arrow_internal(self, timeout: Optional[int] = None) -> pyarrow.Table: """ return pyarrow.Table() + @no_type_check @property def full_feature_names(self) -> bool: """Returns True if full feature names should be applied to the results of the query.""" return False + @no_type_check @property def on_demand_feature_views(self) -> List[OnDemandFeatureView]: """Returns a list containing all the on demand feature views to be handled.""" diff --git a/sdk/python/tests/utils/cli_repo_creator.py b/sdk/python/tests/utils/cli_repo_creator.py index 484962137c..92b6dd992a 100644 --- a/sdk/python/tests/utils/cli_repo_creator.py +++ b/sdk/python/tests/utils/cli_repo_creator.py @@ -11,8 +11,6 @@ from feast import cli from feast.feature_store import FeatureStore -#debug -import inspect def get_example_repo(example_repo_py) -> str: parent = Path(__file__).parent From f2d22255f34de0c0b1e2a0ef2e6e0a836313489d Mon Sep 17 00:00:00 2001 From: Shuchu Han Date: Wed, 7 Feb 2024 19:39:39 -0500 Subject: [PATCH 3/9] feat: update the requirements. Signed-off-by: Shuchu Han --- .../requirements/py3.10-ci-requirements.txt | 997 ---------------- .../requirements/py3.10-requirements.txt | 224 ---- .../requirements/py3.8-ci-requirements.txt | 1019 ----------------- .../requirements/py3.8-requirements.txt | 232 ---- .../requirements/py3.9-ci-requirements.txt | 1011 ---------------- .../requirements/py3.9-requirements.txt | 227 ---- 6 files changed, 3710 deletions(-) delete mode 100644 sdk/python/requirements/py3.10-ci-requirements.txt delete mode 100644 sdk/python/requirements/py3.10-requirements.txt delete mode 100644 sdk/python/requirements/py3.8-ci-requirements.txt delete mode 100644 sdk/python/requirements/py3.8-requirements.txt delete mode 100644 sdk/python/requirements/py3.9-ci-requirements.txt delete mode 100644 sdk/python/requirements/py3.9-requirements.txt diff --git a/sdk/python/requirements/py3.10-ci-requirements.txt b/sdk/python/requirements/py3.10-ci-requirements.txt deleted file mode 100644 index 9435a68deb..0000000000 --- a/sdk/python/requirements/py3.10-ci-requirements.txt +++ /dev/null @@ -1,997 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# pip-compile --extra=ci --output-file=sdk/python/requirements/py3.10-ci-requirements.txt -# -alabaster==0.7.13 - # via sphinx -altair==4.2.0 - # via great-expectations -anyio==4.0.0 - # via - # httpx - # jupyter-server - # starlette - # watchfiles -appdirs==1.4.4 - # via fissix -argon2-cffi==23.1.0 - # via jupyter-server -argon2-cffi-bindings==21.2.0 - # via argon2-cffi -arrow==1.3.0 - # via isoduration -asn1crypto==1.5.1 - # via snowflake-connector-python -assertpy==1.1 - # via feast (setup.py) -asttokens==2.4.1 - # via stack-data -async-lru==2.0.4 - # via jupyterlab -async-timeout==4.0.3 - # via redis -attrs==23.1.0 - # via - # bowler - # jsonschema - # referencing -avro==1.10.0 - # via feast (setup.py) -azure-core==1.29.5 - # via - # azure-identity - # azure-storage-blob -azure-identity==1.15.0 - # via feast (setup.py) -azure-storage-blob==12.19.0 - # via feast (setup.py) -babel==2.13.1 - # via - # jupyterlab-server - # sphinx -beautifulsoup4==4.12.2 - # via nbconvert -black==22.12.0 - # via feast (setup.py) -bleach==6.1.0 - # via nbconvert -boto3==1.29.2 - # via - # feast (setup.py) - # moto -botocore==1.32.2 - # via - # boto3 - # moto - # s3transfer -bowler==0.9.0 - # via feast (setup.py) -build==1.0.3 - # via - # feast (setup.py) - # pip-tools -bytewax==0.15.1 - # via feast (setup.py) -cachecontrol==0.13.1 - # via firebase-admin -cachetools==5.3.2 - # via google-auth -cassandra-driver==3.28.0 - # via feast (setup.py) -certifi==2023.7.22 - # via - # httpcore - # httpx - # kubernetes - # minio - # requests - # snowflake-connector-python -cffi==1.16.0 - # via - # argon2-cffi-bindings - # cryptography - # snowflake-connector-python -cfgv==3.4.0 - # via pre-commit -charset-normalizer==3.3.2 - # via - # requests - # snowflake-connector-python -click==8.1.7 - # via - # black - # bowler - # dask - # feast (setup.py) - # geomet - # great-expectations - # moreorless - # pip-tools - # uvicorn -cloudpickle==3.0.0 - # via dask -colorama==0.4.6 - # via - # feast (setup.py) - # great-expectations -comm==0.2.0 - # via - # ipykernel - # ipywidgets -coverage[toml]==7.3.2 - # via pytest-cov -cryptography==41.0.6 - # via - # azure-identity - # azure-storage-blob - # feast (setup.py) - # great-expectations - # moto - # msal - # pyjwt - # pyopenssl - # snowflake-connector-python - # types-pyopenssl - # types-redis -dask==2023.11.0 - # via feast (setup.py) -db-dtypes==1.1.1 - # via google-cloud-bigquery -debugpy==1.8.0 - # via ipykernel -decorator==5.1.1 - # via ipython -defusedxml==0.7.1 - # via nbconvert -deprecation==2.1.0 - # via testcontainers -dill==0.3.7 - # via - # bytewax - # feast (setup.py) - # multiprocess -distlib==0.3.7 - # via virtualenv -docker==6.1.3 - # via - # feast (setup.py) - # testcontainers -docutils==0.19 - # via sphinx -entrypoints==0.4 - # via altair -exceptiongroup==1.1.3 - # via - # anyio - # ipython - # pytest -execnet==2.0.2 - # via pytest-xdist -executing==2.0.1 - # via stack-data -fastapi==0.109.1 - # via feast (setup.py) -fastavro==1.9.0 - # via - # feast (setup.py) - # pandavro -fastjsonschema==2.19.0 - # via nbformat -filelock==3.13.1 - # via - # snowflake-connector-python - # virtualenv -firebase-admin==5.4.0 - # via feast (setup.py) -fissix==21.11.13 - # via bowler -flake8==6.0.0 - # via feast (setup.py) -fqdn==1.5.1 - # via jsonschema -fsspec==2023.9.2 - # via - # dask - # feast (setup.py) -geojson==2.5.0 - # via rockset -geomet==0.2.1.post1 - # via cassandra-driver -google-api-core[grpc]==2.14.0 - # via - # feast (setup.py) - # firebase-admin - # google-api-python-client - # google-cloud-bigquery - # google-cloud-bigquery-storage - # google-cloud-bigtable - # google-cloud-core - # google-cloud-datastore - # google-cloud-firestore - # google-cloud-storage -google-api-python-client==2.108.0 - # via firebase-admin -google-auth==2.23.4 - # via - # google-api-core - # google-api-python-client - # google-auth-httplib2 - # google-cloud-core - # google-cloud-storage - # kubernetes -google-auth-httplib2==0.1.1 - # via google-api-python-client -google-cloud-bigquery[pandas]==3.12.0 - # via feast (setup.py) -google-cloud-bigquery-storage==2.22.0 - # via feast (setup.py) -google-cloud-bigtable==2.21.0 - # via feast (setup.py) -google-cloud-core==2.3.3 - # via - # google-cloud-bigquery - # google-cloud-bigtable - # google-cloud-datastore - # google-cloud-firestore - # google-cloud-storage -google-cloud-datastore==2.18.0 - # via feast (setup.py) -google-cloud-firestore==2.13.1 - # via firebase-admin -google-cloud-storage==2.13.0 - # via - # feast (setup.py) - # firebase-admin -google-crc32c==1.5.0 - # via - # google-cloud-storage - # google-resumable-media -google-resumable-media==2.6.0 - # via - # google-cloud-bigquery - # google-cloud-storage -googleapis-common-protos[grpc]==1.61.0 - # via - # feast (setup.py) - # google-api-core - # grpc-google-iam-v1 - # grpcio-status -great-expectations==0.15.50 - # via feast (setup.py) -greenlet==3.0.1 - # via sqlalchemy -grpc-google-iam-v1==0.12.7 - # via google-cloud-bigtable -grpcio==1.59.2 - # via - # feast (setup.py) - # google-api-core - # google-cloud-bigquery - # googleapis-common-protos - # grpc-google-iam-v1 - # grpcio-health-checking - # grpcio-reflection - # grpcio-status - # grpcio-testing - # grpcio-tools -grpcio-health-checking==1.59.2 - # via feast (setup.py) -grpcio-reflection==1.59.2 - # via feast (setup.py) -grpcio-status==1.59.2 - # via google-api-core -grpcio-testing==1.59.2 - # via feast (setup.py) -grpcio-tools==1.59.2 - # via feast (setup.py) -gunicorn==21.2.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.2.3 - # via feast (setup.py) -httpcore==1.0.2 - # via httpx -httplib2==0.22.0 - # via - # google-api-python-client - # google-auth-httplib2 -httptools==0.6.1 - # via uvicorn -httpx==0.25.1 - # via feast (setup.py) -identify==2.5.31 - # via pre-commit -idna==3.4 - # via - # anyio - # httpx - # jsonschema - # requests - # snowflake-connector-python -imagesize==1.4.1 - # via sphinx -importlib-metadata==6.8.0 - # via - # dask - # feast (setup.py) - # great-expectations -importlib-resources==6.1.1 - # via feast (setup.py) -iniconfig==2.0.0 - # via pytest -ipykernel==6.26.0 - # via jupyterlab -ipython==8.17.2 - # via - # great-expectations - # ipykernel - # ipywidgets -ipywidgets==8.1.1 - # via great-expectations -isodate==0.6.1 - # via azure-storage-blob -isoduration==20.11.0 - # via jsonschema -isort==5.12.0 - # via feast (setup.py) -jedi==0.19.1 - # via ipython -jinja2==3.1.3 - # via - # altair - # feast (setup.py) - # great-expectations - # jupyter-server - # jupyterlab - # jupyterlab-server - # moto - # nbconvert - # sphinx -jmespath==1.0.1 - # via - # boto3 - # botocore -json5==0.9.14 - # via jupyterlab-server -jsonpatch==1.33 - # via great-expectations -jsonpointer==2.4 - # via - # jsonpatch - # jsonschema -jsonschema[format-nongpl]==4.20.0 - # via - # altair - # feast (setup.py) - # great-expectations - # jupyter-events - # jupyterlab-server - # nbformat -jsonschema-specifications==2023.11.1 - # via jsonschema -jupyter-client==8.6.0 - # via - # ipykernel - # jupyter-server - # nbclient -jupyter-core==5.5.0 - # via - # ipykernel - # jupyter-client - # jupyter-server - # jupyterlab - # nbclient - # nbconvert - # nbformat -jupyter-events==0.9.0 - # via jupyter-server -jupyter-lsp==2.2.2 - # via jupyterlab -jupyter-server==2.11.2 - # via - # jupyter-lsp - # jupyterlab - # jupyterlab-server - # notebook - # notebook-shim -jupyter-server-terminals==0.4.4 - # via jupyter-server -jupyterlab==4.0.11 - # via notebook -jupyterlab-pygments==0.2.2 - # via nbconvert -jupyterlab-server==2.25.1 - # via - # jupyterlab - # notebook -jupyterlab-widgets==3.0.9 - # via ipywidgets -kubernetes==20.13.0 - # via feast (setup.py) -locket==1.0.0 - # via partd -makefun==1.15.2 - # via great-expectations -markupsafe==2.1.3 - # via - # jinja2 - # nbconvert - # werkzeug -marshmallow==3.20.1 - # via great-expectations -matplotlib-inline==0.1.6 - # via - # ipykernel - # ipython -mccabe==0.7.0 - # via flake8 -minio==7.1.0 - # via feast (setup.py) -mistune==3.0.2 - # via - # great-expectations - # nbconvert -mmh3==4.0.1 - # via feast (setup.py) -mock==2.0.0 - # via feast (setup.py) -moreorless==0.4.0 - # via bowler -moto==4.2.9 - # via feast (setup.py) -msal==1.25.0 - # via - # azure-identity - # msal-extensions -msal-extensions==1.0.0 - # via azure-identity -msgpack==1.0.7 - # via cachecontrol -multiprocess==0.70.15 - # via bytewax -mypy==1.8.0 - # via - # feast (setup.py) - # sqlalchemy -mypy-extensions==1.0.0 - # via - # black - # mypy -mypy-protobuf==3.1.0 - # via feast (setup.py) -nbclient==0.9.0 - # via nbconvert -nbconvert==7.11.0 - # via jupyter-server -nbformat==5.9.2 - # via - # great-expectations - # jupyter-server - # nbclient - # nbconvert -nest-asyncio==1.5.8 - # via ipykernel -nodeenv==1.8.0 - # via pre-commit -notebook==7.0.6 - # via great-expectations -notebook-shim==0.2.3 - # via - # jupyterlab - # notebook -numpy==1.24.4 - # via - # altair - # db-dtypes - # feast (setup.py) - # great-expectations - # pandas - # pandavro - # pyarrow - # scipy -oauthlib==3.2.2 - # via requests-oauthlib -overrides==7.4.0 - # via jupyter-server -packaging==23.2 - # via - # build - # dask - # db-dtypes - # deprecation - # docker - # google-cloud-bigquery - # great-expectations - # gunicorn - # ipykernel - # jupyter-server - # jupyterlab - # jupyterlab-server - # marshmallow - # nbconvert - # pytest - # snowflake-connector-python - # sphinx -pandas==1.5.3 - # via - # altair - # db-dtypes - # feast (setup.py) - # google-cloud-bigquery - # great-expectations - # pandavro - # snowflake-connector-python -pandavro==1.5.2 - # via feast (setup.py) -pandocfilters==1.5.0 - # via nbconvert -parso==0.8.3 - # via jedi -partd==1.4.1 - # via dask -pathspec==0.11.2 - # via black -pbr==6.0.0 - # via mock -pexpect==4.8.0 - # via ipython -pip-tools==7.3.0 - # via feast (setup.py) -platformdirs==3.11.0 - # via - # black - # jupyter-core - # snowflake-connector-python - # virtualenv -pluggy==1.3.0 - # via pytest -ply==3.11 - # via thriftpy2 -portalocker==2.8.2 - # via msal-extensions -pre-commit==3.3.1 - # via feast (setup.py) -prometheus-client==0.18.0 - # via jupyter-server -prompt-toolkit==3.0.41 - # via ipython -proto-plus==1.22.3 - # via - # feast (setup.py) - # google-cloud-bigquery - # google-cloud-bigquery-storage - # google-cloud-bigtable - # google-cloud-datastore - # google-cloud-firestore -protobuf==4.23.3 - # via - # feast (setup.py) - # google-api-core - # google-cloud-bigquery - # google-cloud-bigquery-storage - # google-cloud-bigtable - # google-cloud-datastore - # google-cloud-firestore - # googleapis-common-protos - # grpc-google-iam-v1 - # grpcio-health-checking - # grpcio-reflection - # grpcio-status - # grpcio-testing - # grpcio-tools - # mypy-protobuf - # proto-plus -psutil==5.9.0 - # via - # feast (setup.py) - # ipykernel -psycopg2-binary==2.9.9 - # via feast (setup.py) -ptyprocess==0.7.0 - # via - # pexpect - # terminado -pure-eval==0.2.2 - # via stack-data -py==1.11.0 - # via feast (setup.py) -py-cpuinfo==9.0.0 - # via pytest-benchmark -py4j==0.10.9.7 - # via pyspark -pyarrow==14.0.1 - # via - # db-dtypes - # feast (setup.py) - # google-cloud-bigquery - # snowflake-connector-python -pyasn1==0.5.0 - # via - # pyasn1-modules - # rsa -pyasn1-modules==0.3.0 - # via google-auth -pybindgen==0.22.1 - # via feast (setup.py) -pycodestyle==2.10.0 - # via flake8 -pycparser==2.21 - # via cffi -pydantic==1.10.13 - # via - # fastapi - # feast (setup.py) - # great-expectations -pyflakes==3.0.1 - # via flake8 -pygments==2.16.1 - # via - # feast (setup.py) - # ipython - # nbconvert - # sphinx -pyjwt[crypto]==2.8.0 - # via - # msal - # snowflake-connector-python -pymssql==2.2.10 - # via feast (setup.py) -pymysql==1.1.0 - # via feast (setup.py) -pyodbc==5.0.1 - # via feast (setup.py) -pyopenssl==23.3.0 - # via snowflake-connector-python -pyparsing==3.1.1 - # via - # great-expectations - # httplib2 -pyproject-hooks==1.0.0 - # via build -pyspark==3.5.0 - # via feast (setup.py) -pytest==7.4.3 - # via - # feast (setup.py) - # pytest-benchmark - # pytest-cov - # pytest-lazy-fixture - # pytest-mock - # pytest-ordering - # pytest-timeout - # pytest-xdist -pytest-benchmark==3.4.1 - # via feast (setup.py) -pytest-cov==4.1.0 - # 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.4.0 - # via feast (setup.py) -python-dateutil==2.8.2 - # via - # arrow - # botocore - # google-cloud-bigquery - # great-expectations - # jupyter-client - # kubernetes - # moto - # pandas - # rockset - # trino -python-dotenv==1.0.0 - # via uvicorn -python-json-logger==2.0.7 - # via jupyter-events -pytz==2023.3.post1 - # via - # great-expectations - # pandas - # snowflake-connector-python - # trino -pyyaml==6.0.1 - # via - # dask - # feast (setup.py) - # jupyter-events - # kubernetes - # pre-commit - # responses - # uvicorn -pyzmq==25.1.1 - # via - # ipykernel - # jupyter-client - # jupyter-server -redis==4.6.0 - # via feast (setup.py) -referencing==0.31.0 - # via - # jsonschema - # jsonschema-specifications - # jupyter-events -regex==2023.10.3 - # via feast (setup.py) -requests==2.31.0 - # via - # azure-core - # cachecontrol - # docker - # feast (setup.py) - # google-api-core - # google-cloud-bigquery - # google-cloud-storage - # great-expectations - # jupyterlab-server - # kubernetes - # moto - # msal - # requests-oauthlib - # responses - # snowflake-connector-python - # sphinx - # trino -requests-oauthlib==1.3.1 - # via kubernetes -responses==0.24.1 - # via moto -rfc3339-validator==0.1.4 - # via - # jsonschema - # jupyter-events -rfc3986-validator==0.1.1 - # via - # jsonschema - # jupyter-events -rockset==2.1.0 - # via feast (setup.py) -rpds-py==0.13.0 - # via - # jsonschema - # referencing -rsa==4.9 - # via google-auth -ruamel-yaml==0.17.17 - # via great-expectations -s3transfer==0.7.0 - # via boto3 -scipy==1.11.3 - # via great-expectations -send2trash==1.8.2 - # via jupyter-server -six==1.16.0 - # via - # asttokens - # azure-core - # bleach - # cassandra-driver - # geomet - # happybase - # isodate - # kubernetes - # mock - # pandavro - # python-dateutil - # rfc3339-validator - # thriftpy2 -sniffio==1.3.0 - # via - # anyio - # httpx -snowballstemmer==2.2.0 - # via sphinx -snowflake-connector-python[pandas]==3.5.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 - # sphinxcontrib-devhelp - # sphinxcontrib-htmlhelp - # sphinxcontrib-qthelp - # sphinxcontrib-serializinghtml -sphinxcontrib-applehelp==1.0.7 - # via sphinx -sphinxcontrib-devhelp==1.0.5 - # via sphinx -sphinxcontrib-htmlhelp==2.0.4 - # via sphinx -sphinxcontrib-jsmath==1.0.1 - # via sphinx -sphinxcontrib-qthelp==1.0.6 - # via sphinx -sphinxcontrib-serializinghtml==1.1.9 - # via sphinx -sqlalchemy[mypy]==1.4.50 - # via feast (setup.py) -sqlalchemy2-stubs==0.0.2a37 - # via sqlalchemy -stack-data==0.6.3 - # via ipython -starlette==0.35.1 - # via fastapi -tabulate==0.9.0 - # via feast (setup.py) -tenacity==8.2.3 - # via feast (setup.py) -terminado==0.18.0 - # via - # jupyter-server - # jupyter-server-terminals -testcontainers==3.7.1 - # via feast (setup.py) -thriftpy2==0.4.17 - # via happybase -tinycss2==1.2.1 - # via nbconvert -toml==0.10.2 - # via feast (setup.py) -tomli==2.0.1 - # via - # black - # build - # coverage - # jupyterlab - # mypy - # pip-tools - # pyproject-hooks - # pytest -tomlkit==0.12.3 - # via snowflake-connector-python -toolz==0.12.0 - # via - # altair - # dask - # partd -tornado==6.3.3 - # via - # ipykernel - # jupyter-client - # jupyter-server - # jupyterlab - # notebook - # terminado -tqdm==4.66.1 - # via - # feast (setup.py) - # great-expectations -traitlets==5.13.0 - # via - # comm - # ipykernel - # ipython - # ipywidgets - # jupyter-client - # jupyter-core - # jupyter-events - # jupyter-server - # jupyterlab - # matplotlib-inline - # nbclient - # nbconvert - # nbformat -trino==0.327.0 - # via feast (setup.py) -typeguard==2.13.3 - # via feast (setup.py) -types-protobuf==3.19.22 - # via - # feast (setup.py) - # mypy-protobuf -types-pymysql==1.1.0.1 - # via feast (setup.py) -types-pyopenssl==23.3.0.0 - # via types-redis -types-python-dateutil==2.8.19.14 - # via - # arrow - # feast (setup.py) -types-pytz==2023.3.1.1 - # via feast (setup.py) -types-pyyaml==6.0.12.12 - # via feast (setup.py) -types-redis==4.6.0.10 - # via feast (setup.py) -types-requests==2.30.0.0 - # via feast (setup.py) -types-setuptools==68.2.0.1 - # via feast (setup.py) -types-tabulate==0.9.0.3 - # via feast (setup.py) -types-urllib3==1.26.25.14 - # via types-requests -typing-extensions==4.8.0 - # via - # async-lru - # azure-core - # azure-storage-blob - # fastapi - # great-expectations - # mypy - # pydantic - # snowflake-connector-python - # sqlalchemy2-stubs - # uvicorn -tzlocal==5.2 - # via - # great-expectations - # trino -uri-template==1.3.0 - # via jsonschema -uritemplate==4.1.1 - # via google-api-python-client -urllib3==1.26.18 - # via - # botocore - # docker - # feast (setup.py) - # great-expectations - # kubernetes - # minio - # requests - # responses - # rockset - # snowflake-connector-python -uvicorn[standard]==0.24.0.post1 - # via feast (setup.py) -uvloop==0.19.0 - # via uvicorn -virtualenv==20.23.0 - # via - # feast (setup.py) - # pre-commit -volatile==2.1.0 - # via bowler -watchfiles==0.21.0 - # via uvicorn -wcwidth==0.2.10 - # via prompt-toolkit -webcolors==1.13 - # via jsonschema -webencodings==0.5.1 - # via - # bleach - # tinycss2 -websocket-client==1.6.4 - # via - # docker - # jupyter-server - # kubernetes -websockets==12.0 - # via uvicorn -werkzeug==3.0.1 - # via moto -wheel==0.41.3 - # via pip-tools -widgetsnbextension==4.0.9 - # via ipywidgets -wrapt==1.16.0 - # via testcontainers -xmltodict==0.13.0 - # via moto -zipp==3.17.0 - # via importlib-metadata - -# The following packages are considered to be unsafe in a requirements file: -# pip -# setuptools diff --git a/sdk/python/requirements/py3.10-requirements.txt b/sdk/python/requirements/py3.10-requirements.txt deleted file mode 100644 index 5d5d451e14..0000000000 --- a/sdk/python/requirements/py3.10-requirements.txt +++ /dev/null @@ -1,224 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# pip-compile --output-file=sdk/python/requirements/py3.10-requirements.txt -# -anyio==4.0.0 - # via - # httpx - # starlette - # watchfiles -appdirs==1.4.4 - # via fissix -attrs==23.1.0 - # via - # bowler - # jsonschema - # referencing -bowler==0.9.0 - # via feast (setup.py) -certifi==2023.7.22 - # via - # httpcore - # httpx - # requests -charset-normalizer==3.3.2 - # via requests -click==8.1.7 - # via - # bowler - # dask - # feast (setup.py) - # moreorless - # uvicorn -cloudpickle==3.0.0 - # via dask -colorama==0.4.6 - # via feast (setup.py) -dask==2023.11.0 - # via feast (setup.py) -dill==0.3.7 - # via feast (setup.py) -exceptiongroup==1.1.3 - # via anyio -fastapi==0.109.1 - # via feast (setup.py) -fastavro==1.9.0 - # via - # feast (setup.py) - # pandavro -fissix==21.11.13 - # via bowler -fsspec==2023.10.0 - # via dask -greenlet==3.0.1 - # via sqlalchemy -grpcio==1.59.2 - # via - # feast (setup.py) - # grpcio-health-checking - # grpcio-reflection - # grpcio-tools -grpcio-health-checking==1.59.2 - # via feast (setup.py) -grpcio-reflection==1.59.2 - # via feast (setup.py) -grpcio-tools==1.59.2 - # via feast (setup.py) -gunicorn==21.2.0 - # via feast (setup.py) -h11==0.14.0 - # via - # httpcore - # uvicorn -httpcore==1.0.2 - # via httpx -httptools==0.6.1 - # via uvicorn -httpx==0.25.1 - # via feast (setup.py) -idna==3.4 - # via - # anyio - # httpx - # requests -importlib-metadata==6.8.0 - # via - # dask - # feast (setup.py) -importlib-resources==6.1.1 - # via feast (setup.py) -jinja2==3.1.3 - # via feast (setup.py) -jsonschema==4.20.0 - # via feast (setup.py) -jsonschema-specifications==2023.11.1 - # via jsonschema -locket==1.0.0 - # via partd -markupsafe==2.1.3 - # via jinja2 -mmh3==4.0.1 - # via feast (setup.py) -moreorless==0.4.0 - # via bowler -mypy==1.7.0 - # via sqlalchemy -mypy-extensions==1.0.0 - # via mypy -mypy-protobuf==3.1.0 - # via feast (setup.py) -numpy==1.24.4 - # via - # feast (setup.py) - # pandas - # pandavro - # pyarrow -packaging==23.2 - # via - # dask - # gunicorn -pandas==1.5.3 - # via - # feast (setup.py) - # pandavro -pandavro==1.5.2 - # via feast (setup.py) -partd==1.4.1 - # via dask -proto-plus==1.22.3 - # via feast (setup.py) -protobuf==4.23.3 - # via - # feast (setup.py) - # grpcio-health-checking - # grpcio-reflection - # grpcio-tools - # mypy-protobuf - # proto-plus -pyarrow==14.0.1 - # via feast (setup.py) -pydantic==1.10.13 - # via - # fastapi - # feast (setup.py) -pygments==2.16.1 - # via feast (setup.py) -python-dateutil==2.8.2 - # via pandas -python-dotenv==1.0.0 - # via uvicorn -pytz==2023.3.post1 - # via pandas -pyyaml==6.0.1 - # via - # dask - # feast (setup.py) - # uvicorn -referencing==0.31.0 - # via - # jsonschema - # jsonschema-specifications -requests==2.31.0 - # via feast (setup.py) -rpds-py==0.13.0 - # via - # jsonschema - # referencing -six==1.16.0 - # via - # pandavro - # python-dateutil -sniffio==1.3.0 - # via - # anyio - # httpx -sqlalchemy[mypy]==1.4.50 - # via feast (setup.py) -sqlalchemy2-stubs==0.0.2a37 - # via sqlalchemy -starlette==0.35.1 - # via fastapi -tabulate==0.9.0 - # via feast (setup.py) -tenacity==8.2.3 - # via feast (setup.py) -toml==0.10.2 - # via feast (setup.py) -tomli==2.0.1 - # via mypy -toolz==0.12.0 - # via - # dask - # partd -tqdm==4.66.1 - # via feast (setup.py) -typeguard==2.13.3 - # via feast (setup.py) -types-protobuf==4.24.0.4 - # via mypy-protobuf -typing-extensions==4.8.0 - # via - # fastapi - # mypy - # pydantic - # sqlalchemy2-stubs - # uvicorn -urllib3==2.1.0 - # via requests -uvicorn[standard]==0.24.0.post1 - # via feast (setup.py) -uvloop==0.19.0 - # via uvicorn -volatile==2.1.0 - # via bowler -watchfiles==0.21.0 - # via uvicorn -websockets==12.0 - # via uvicorn -zipp==3.17.0 - # via importlib-metadata - -# The following packages are considered to be unsafe in a requirements file: -# setuptools diff --git a/sdk/python/requirements/py3.8-ci-requirements.txt b/sdk/python/requirements/py3.8-ci-requirements.txt deleted file mode 100644 index 808a58e11b..0000000000 --- a/sdk/python/requirements/py3.8-ci-requirements.txt +++ /dev/null @@ -1,1019 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --extra=ci --output-file=sdk/python/requirements/py3.8-ci-requirements.txt -# -alabaster==0.7.13 - # via sphinx -altair==4.2.0 - # via great-expectations -anyio==4.0.0 - # via - # httpx - # jupyter-server - # starlette - # watchfiles -appdirs==1.4.4 - # via fissix -argon2-cffi==23.1.0 - # via jupyter-server -argon2-cffi-bindings==21.2.0 - # via argon2-cffi -arrow==1.3.0 - # via isoduration -asn1crypto==1.5.1 - # via snowflake-connector-python -assertpy==1.1 - # via feast (setup.py) -asttokens==2.4.1 - # via stack-data -async-lru==2.0.4 - # via jupyterlab -async-timeout==4.0.3 - # via redis -attrs==23.1.0 - # via - # bowler - # jsonschema - # referencing -avro==1.10.0 - # via feast (setup.py) -azure-core==1.29.5 - # via - # azure-identity - # azure-storage-blob -azure-identity==1.15.0 - # via feast (setup.py) -azure-storage-blob==12.19.0 - # via feast (setup.py) -babel==2.13.1 - # via - # jupyterlab-server - # sphinx -backcall==0.2.0 - # via ipython -backports-zoneinfo==0.2.1 - # via - # trino - # tzlocal -beautifulsoup4==4.12.2 - # via nbconvert -black==22.12.0 - # via feast (setup.py) -bleach==6.1.0 - # via nbconvert -boto3==1.29.2 - # via - # feast (setup.py) - # moto -botocore==1.32.2 - # via - # boto3 - # moto - # s3transfer -bowler==0.9.0 - # via feast (setup.py) -build==1.0.3 - # via - # feast (setup.py) - # pip-tools -bytewax==0.15.1 - # via feast (setup.py) -cachecontrol==0.13.1 - # via firebase-admin -cachetools==5.3.2 - # via google-auth -cassandra-driver==3.28.0 - # via feast (setup.py) -certifi==2023.7.22 - # via - # httpcore - # httpx - # kubernetes - # minio - # requests - # snowflake-connector-python -cffi==1.16.0 - # via - # argon2-cffi-bindings - # cryptography - # snowflake-connector-python -cfgv==3.4.0 - # via pre-commit -charset-normalizer==3.3.2 - # via - # requests - # snowflake-connector-python -click==8.1.7 - # via - # black - # bowler - # dask - # feast (setup.py) - # geomet - # great-expectations - # moreorless - # pip-tools - # uvicorn -cloudpickle==3.0.0 - # via dask -colorama==0.4.6 - # via - # feast (setup.py) - # great-expectations -comm==0.2.0 - # via - # ipykernel - # ipywidgets -coverage[toml]==7.3.2 - # via pytest-cov -cryptography==41.0.6 - # via - # azure-identity - # azure-storage-blob - # feast (setup.py) - # great-expectations - # moto - # msal - # pyjwt - # pyopenssl - # snowflake-connector-python - # types-pyopenssl - # types-redis -dask==2023.5.0 - # via feast (setup.py) -db-dtypes==1.1.1 - # via google-cloud-bigquery -debugpy==1.8.0 - # via ipykernel -decorator==5.1.1 - # via ipython -defusedxml==0.7.1 - # via nbconvert -deprecation==2.1.0 - # via testcontainers -dill==0.3.7 - # via - # bytewax - # feast (setup.py) - # multiprocess -distlib==0.3.7 - # via virtualenv -docker==6.1.3 - # via - # feast (setup.py) - # testcontainers -docutils==0.19 - # via sphinx -entrypoints==0.4 - # via altair -exceptiongroup==1.1.3 - # via - # anyio - # pytest -execnet==2.0.2 - # via pytest-xdist -executing==2.0.1 - # via stack-data -fastapi==0.109.1 - # via feast (setup.py) -fastavro==1.9.0 - # via - # feast (setup.py) - # pandavro -fastjsonschema==2.19.0 - # via nbformat -filelock==3.13.1 - # via - # snowflake-connector-python - # virtualenv -firebase-admin==5.4.0 - # via feast (setup.py) -fissix==21.11.13 - # via bowler -flake8==6.0.0 - # via feast (setup.py) -fqdn==1.5.1 - # via jsonschema -fsspec==2023.9.2 - # via - # dask - # feast (setup.py) -geojson==2.5.0 - # via rockset -geomet==0.2.1.post1 - # via cassandra-driver -google-api-core[grpc]==2.14.0 - # via - # feast (setup.py) - # firebase-admin - # google-api-python-client - # google-cloud-bigquery - # google-cloud-bigquery-storage - # google-cloud-bigtable - # google-cloud-core - # google-cloud-datastore - # google-cloud-firestore - # google-cloud-storage -google-api-python-client==2.108.0 - # via firebase-admin -google-auth==2.23.4 - # via - # google-api-core - # google-api-python-client - # google-auth-httplib2 - # google-cloud-core - # google-cloud-storage - # kubernetes -google-auth-httplib2==0.1.1 - # via google-api-python-client -google-cloud-bigquery[pandas]==3.12.0 - # via feast (setup.py) -google-cloud-bigquery-storage==2.22.0 - # via feast (setup.py) -google-cloud-bigtable==2.21.0 - # via feast (setup.py) -google-cloud-core==2.3.3 - # via - # google-cloud-bigquery - # google-cloud-bigtable - # google-cloud-datastore - # google-cloud-firestore - # google-cloud-storage -google-cloud-datastore==2.18.0 - # via feast (setup.py) -google-cloud-firestore==2.13.1 - # via firebase-admin -google-cloud-storage==2.13.0 - # via - # feast (setup.py) - # firebase-admin -google-crc32c==1.5.0 - # via - # google-cloud-storage - # google-resumable-media -google-resumable-media==2.6.0 - # via - # google-cloud-bigquery - # google-cloud-storage -googleapis-common-protos[grpc]==1.61.0 - # via - # feast (setup.py) - # google-api-core - # grpc-google-iam-v1 - # grpcio-status -great-expectations==0.15.50 - # via feast (setup.py) -greenlet==3.0.1 - # via sqlalchemy -grpc-google-iam-v1==0.12.7 - # via google-cloud-bigtable -grpcio==1.59.2 - # via - # feast (setup.py) - # google-api-core - # google-cloud-bigquery - # googleapis-common-protos - # grpc-google-iam-v1 - # grpcio-health-checking - # grpcio-reflection - # grpcio-status - # grpcio-testing - # grpcio-tools -grpcio-health-checking==1.59.2 - # via feast (setup.py) -grpcio-reflection==1.59.2 - # via feast (setup.py) -grpcio-status==1.59.2 - # via google-api-core -grpcio-testing==1.59.2 - # via feast (setup.py) -grpcio-tools==1.59.2 - # via feast (setup.py) -gunicorn==21.2.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.2.3 - # via feast (setup.py) -httpcore==1.0.2 - # via httpx -httplib2==0.22.0 - # via - # google-api-python-client - # google-auth-httplib2 -httptools==0.6.1 - # via uvicorn -httpx==0.25.1 - # via feast (setup.py) -identify==2.5.31 - # via pre-commit -idna==3.4 - # via - # anyio - # httpx - # jsonschema - # requests - # snowflake-connector-python -imagesize==1.4.1 - # via sphinx -importlib-metadata==6.8.0 - # via - # build - # dask - # feast (setup.py) - # great-expectations - # jupyter-client - # jupyter-lsp - # jupyterlab - # jupyterlab-server - # nbconvert - # sphinx -importlib-resources==6.1.1 - # via - # feast (setup.py) - # jsonschema - # jsonschema-specifications - # jupyterlab -iniconfig==2.0.0 - # via pytest -ipykernel==6.26.0 - # via jupyterlab -ipython==8.12.3 - # via - # great-expectations - # ipykernel - # ipywidgets -ipywidgets==8.1.1 - # via great-expectations -isodate==0.6.1 - # via azure-storage-blob -isoduration==20.11.0 - # via jsonschema -isort==5.12.0 - # via feast (setup.py) -jedi==0.19.1 - # via ipython -jinja2==3.1.3 - # via - # altair - # feast (setup.py) - # great-expectations - # jupyter-server - # jupyterlab - # jupyterlab-server - # moto - # nbconvert - # sphinx -jmespath==1.0.1 - # via - # boto3 - # botocore -json5==0.9.14 - # via jupyterlab-server -jsonpatch==1.33 - # via great-expectations -jsonpointer==2.4 - # via - # jsonpatch - # jsonschema -jsonschema[format-nongpl]==4.20.0 - # via - # altair - # feast (setup.py) - # great-expectations - # jupyter-events - # jupyterlab-server - # nbformat -jsonschema-specifications==2023.11.1 - # via jsonschema -jupyter-client==8.6.0 - # via - # ipykernel - # jupyter-server - # nbclient -jupyter-core==5.5.0 - # via - # ipykernel - # jupyter-client - # jupyter-server - # jupyterlab - # nbclient - # nbconvert - # nbformat -jupyter-events==0.9.0 - # via jupyter-server -jupyter-lsp==2.2.2 - # via jupyterlab -jupyter-server==2.11.2 - # via - # jupyter-lsp - # jupyterlab - # jupyterlab-server - # notebook - # notebook-shim -jupyter-server-terminals==0.4.4 - # via jupyter-server -jupyterlab==4.0.11 - # via notebook -jupyterlab-pygments==0.2.2 - # via nbconvert -jupyterlab-server==2.25.1 - # via - # jupyterlab - # notebook -jupyterlab-widgets==3.0.9 - # via ipywidgets -kubernetes==20.13.0 - # via feast (setup.py) -locket==1.0.0 - # via partd -makefun==1.15.2 - # via great-expectations -markupsafe==2.1.3 - # via - # jinja2 - # nbconvert - # werkzeug -marshmallow==3.20.1 - # via great-expectations -matplotlib-inline==0.1.6 - # via - # ipykernel - # ipython -mccabe==0.7.0 - # via flake8 -minio==7.1.0 - # via feast (setup.py) -mistune==3.0.2 - # via - # great-expectations - # nbconvert -mmh3==4.0.1 - # via feast (setup.py) -mock==2.0.0 - # via feast (setup.py) -moreorless==0.4.0 - # via bowler -moto==4.2.9 - # via feast (setup.py) -msal==1.25.0 - # via - # azure-identity - # msal-extensions -msal-extensions==1.0.0 - # via azure-identity -msgpack==1.0.7 - # via cachecontrol -multiprocess==0.70.15 - # via bytewax -mypy==1.8.0 - # via - # feast (setup.py) - # sqlalchemy -mypy-extensions==1.0.0 - # via - # black - # mypy -mypy-protobuf==3.1.0 - # via feast (setup.py) -nbclient==0.9.0 - # via nbconvert -nbconvert==7.11.0 - # via jupyter-server -nbformat==5.9.2 - # via - # great-expectations - # jupyter-server - # nbclient - # nbconvert -nest-asyncio==1.5.8 - # via ipykernel -nodeenv==1.8.0 - # via pre-commit -notebook==7.0.6 - # via great-expectations -notebook-shim==0.2.3 - # via - # jupyterlab - # notebook -numpy==1.24.4 - # via - # altair - # db-dtypes - # feast (setup.py) - # great-expectations - # pandas - # pandavro - # pyarrow - # scipy -oauthlib==3.2.2 - # via requests-oauthlib -overrides==7.4.0 - # via jupyter-server -packaging==23.2 - # via - # build - # dask - # db-dtypes - # deprecation - # docker - # google-cloud-bigquery - # great-expectations - # gunicorn - # ipykernel - # jupyter-server - # jupyterlab - # jupyterlab-server - # marshmallow - # nbconvert - # pytest - # snowflake-connector-python - # sphinx -pandas==1.5.3 - # via - # altair - # db-dtypes - # feast (setup.py) - # google-cloud-bigquery - # great-expectations - # pandavro - # snowflake-connector-python -pandavro==1.5.2 - # via feast (setup.py) -pandocfilters==1.5.0 - # via nbconvert -parso==0.8.3 - # via jedi -partd==1.4.1 - # via dask -pathspec==0.11.2 - # via black -pbr==6.0.0 - # via mock -pexpect==4.8.0 - # via ipython -pickleshare==0.7.5 - # via ipython -pip-tools==7.3.0 - # via feast (setup.py) -pkgutil-resolve-name==1.3.10 - # via jsonschema -platformdirs==3.11.0 - # via - # black - # jupyter-core - # snowflake-connector-python - # virtualenv -pluggy==1.3.0 - # via pytest -ply==3.11 - # via thriftpy2 -portalocker==2.8.2 - # via msal-extensions -pre-commit==3.3.1 - # via feast (setup.py) -prometheus-client==0.18.0 - # via jupyter-server -prompt-toolkit==3.0.41 - # via ipython -proto-plus==1.22.3 - # via - # feast (setup.py) - # google-cloud-bigquery - # google-cloud-bigquery-storage - # google-cloud-bigtable - # google-cloud-datastore - # google-cloud-firestore -protobuf==4.23.3 - # via - # feast (setup.py) - # google-api-core - # google-cloud-bigquery - # google-cloud-bigquery-storage - # google-cloud-bigtable - # google-cloud-datastore - # google-cloud-firestore - # googleapis-common-protos - # grpc-google-iam-v1 - # grpcio-health-checking - # grpcio-reflection - # grpcio-status - # grpcio-testing - # grpcio-tools - # mypy-protobuf - # proto-plus -psutil==5.9.0 - # via - # feast (setup.py) - # ipykernel -psycopg2-binary==2.9.9 - # via feast (setup.py) -ptyprocess==0.7.0 - # via - # pexpect - # terminado -pure-eval==0.2.2 - # via stack-data -py==1.11.0 - # via feast (setup.py) -py-cpuinfo==9.0.0 - # via pytest-benchmark -py4j==0.10.9.7 - # via pyspark -pyarrow==14.0.1 - # via - # db-dtypes - # feast (setup.py) - # google-cloud-bigquery - # snowflake-connector-python -pyasn1==0.5.0 - # via - # pyasn1-modules - # rsa -pyasn1-modules==0.3.0 - # via google-auth -pybindgen==0.22.1 - # via feast (setup.py) -pycodestyle==2.10.0 - # via flake8 -pycparser==2.21 - # via cffi -pydantic==1.10.13 - # via - # fastapi - # feast (setup.py) - # great-expectations -pyflakes==3.0.1 - # via flake8 -pygments==2.16.1 - # via - # feast (setup.py) - # ipython - # nbconvert - # sphinx -pyjwt[crypto]==2.8.0 - # via - # msal - # snowflake-connector-python -pymssql==2.2.10 - # via feast (setup.py) -pymysql==1.1.0 - # via feast (setup.py) -pyodbc==5.0.1 - # via feast (setup.py) -pyopenssl==23.3.0 - # via snowflake-connector-python -pyparsing==3.1.1 - # via - # great-expectations - # httplib2 -pyproject-hooks==1.0.0 - # via build -pyspark==3.5.0 - # via feast (setup.py) -pytest==7.4.3 - # via - # feast (setup.py) - # pytest-benchmark - # pytest-cov - # pytest-lazy-fixture - # pytest-mock - # pytest-ordering - # pytest-timeout - # pytest-xdist -pytest-benchmark==3.4.1 - # via feast (setup.py) -pytest-cov==4.1.0 - # 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.4.0 - # via feast (setup.py) -python-dateutil==2.8.2 - # via - # arrow - # botocore - # google-cloud-bigquery - # great-expectations - # jupyter-client - # kubernetes - # moto - # pandas - # rockset - # trino -python-dotenv==1.0.0 - # via uvicorn -python-json-logger==2.0.7 - # via jupyter-events -pytz==2023.3.post1 - # via - # babel - # great-expectations - # pandas - # snowflake-connector-python - # trino -pyyaml==6.0.1 - # via - # dask - # feast (setup.py) - # jupyter-events - # kubernetes - # pre-commit - # responses - # uvicorn -pyzmq==25.1.1 - # via - # ipykernel - # jupyter-client - # jupyter-server -redis==4.6.0 - # via feast (setup.py) -referencing==0.31.0 - # via - # jsonschema - # jsonschema-specifications - # jupyter-events -regex==2023.10.3 - # via feast (setup.py) -requests==2.31.0 - # via - # azure-core - # cachecontrol - # docker - # feast (setup.py) - # google-api-core - # google-cloud-bigquery - # google-cloud-storage - # great-expectations - # jupyterlab-server - # kubernetes - # moto - # msal - # requests-oauthlib - # responses - # snowflake-connector-python - # sphinx - # trino -requests-oauthlib==1.3.1 - # via kubernetes -responses==0.24.1 - # via moto -rfc3339-validator==0.1.4 - # via - # jsonschema - # jupyter-events -rfc3986-validator==0.1.1 - # via - # jsonschema - # jupyter-events -rockset==2.1.0 - # via feast (setup.py) -rpds-py==0.13.0 - # via - # jsonschema - # referencing -rsa==4.9 - # via google-auth -ruamel-yaml==0.17.17 - # via great-expectations -ruamel-yaml-clib==0.2.8 - # via ruamel-yaml -s3transfer==0.7.0 - # via boto3 -scipy==1.10.1 - # via great-expectations -send2trash==1.8.2 - # via jupyter-server -six==1.16.0 - # via - # asttokens - # azure-core - # bleach - # cassandra-driver - # geomet - # happybase - # isodate - # kubernetes - # mock - # pandavro - # python-dateutil - # rfc3339-validator - # thriftpy2 -sniffio==1.3.0 - # via - # anyio - # httpx -snowballstemmer==2.2.0 - # via sphinx -snowflake-connector-python[pandas]==3.5.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.4 - # via sphinx -sphinxcontrib-devhelp==1.0.2 - # via sphinx -sphinxcontrib-htmlhelp==2.0.1 - # via sphinx -sphinxcontrib-jsmath==1.0.1 - # via sphinx -sphinxcontrib-qthelp==1.0.3 - # via sphinx -sphinxcontrib-serializinghtml==1.1.5 - # via sphinx -sqlalchemy[mypy]==1.4.50 - # via feast (setup.py) -sqlalchemy2-stubs==0.0.2a37 - # via sqlalchemy -stack-data==0.6.3 - # via ipython -starlette==0.35.1 - # via fastapi -tabulate==0.9.0 - # via feast (setup.py) -tenacity==8.2.3 - # via feast (setup.py) -terminado==0.18.0 - # via - # jupyter-server - # jupyter-server-terminals -testcontainers==3.7.1 - # via feast (setup.py) -thriftpy2==0.4.17 - # via happybase -tinycss2==1.2.1 - # via nbconvert -toml==0.10.2 - # via feast (setup.py) -tomli==2.0.1 - # via - # black - # build - # coverage - # jupyterlab - # mypy - # pip-tools - # pyproject-hooks - # pytest -tomlkit==0.12.3 - # via snowflake-connector-python -toolz==0.12.0 - # via - # altair - # dask - # partd -tornado==6.3.3 - # via - # ipykernel - # jupyter-client - # jupyter-server - # jupyterlab - # notebook - # terminado -tqdm==4.66.1 - # via - # feast (setup.py) - # great-expectations -traitlets==5.13.0 - # via - # comm - # ipykernel - # ipython - # ipywidgets - # jupyter-client - # jupyter-core - # jupyter-events - # jupyter-server - # jupyterlab - # matplotlib-inline - # nbclient - # nbconvert - # nbformat -trino==0.327.0 - # via feast (setup.py) -typeguard==2.13.3 - # via feast (setup.py) -types-protobuf==3.19.22 - # via - # feast (setup.py) - # mypy-protobuf -types-pymysql==1.1.0.1 - # via feast (setup.py) -types-pyopenssl==23.3.0.0 - # via types-redis -types-python-dateutil==2.8.19.14 - # via - # arrow - # feast (setup.py) -types-pytz==2023.3.1.1 - # via feast (setup.py) -types-pyyaml==6.0.12.12 - # via feast (setup.py) -types-redis==4.6.0.10 - # via feast (setup.py) -types-requests==2.30.0.0 - # via feast (setup.py) -types-setuptools==68.2.0.1 - # via feast (setup.py) -types-tabulate==0.9.0.3 - # via feast (setup.py) -types-urllib3==1.26.25.14 - # via types-requests -typing-extensions==4.8.0 - # via - # async-lru - # azure-core - # azure-storage-blob - # black - # fastapi - # great-expectations - # ipython - # mypy - # pydantic - # snowflake-connector-python - # sqlalchemy2-stubs - # starlette - # uvicorn -tzlocal==5.2 - # via - # great-expectations - # trino -uri-template==1.3.0 - # via jsonschema -uritemplate==4.1.1 - # via google-api-python-client -urllib3==1.26.18 - # via - # botocore - # docker - # feast (setup.py) - # great-expectations - # kubernetes - # minio - # requests - # responses - # rockset - # snowflake-connector-python -uvicorn[standard]==0.24.0.post1 - # via feast (setup.py) -uvloop==0.19.0 - # via uvicorn -virtualenv==20.23.0 - # via - # feast (setup.py) - # pre-commit -volatile==2.1.0 - # via bowler -watchfiles==0.21.0 - # via uvicorn -wcwidth==0.2.10 - # via prompt-toolkit -webcolors==1.13 - # via jsonschema -webencodings==0.5.1 - # via - # bleach - # tinycss2 -websocket-client==1.6.4 - # via - # docker - # jupyter-server - # kubernetes -websockets==12.0 - # via uvicorn -werkzeug==3.0.1 - # via moto -wheel==0.41.3 - # via pip-tools -widgetsnbextension==4.0.9 - # via ipywidgets -wrapt==1.16.0 - # via testcontainers -xmltodict==0.13.0 - # via moto -zipp==3.17.0 - # via - # importlib-metadata - # importlib-resources - -# The following packages are considered to be unsafe in a requirements file: -# pip -# setuptools diff --git a/sdk/python/requirements/py3.8-requirements.txt b/sdk/python/requirements/py3.8-requirements.txt deleted file mode 100644 index 163fa4c9a8..0000000000 --- a/sdk/python/requirements/py3.8-requirements.txt +++ /dev/null @@ -1,232 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --output-file=sdk/python/requirements/py3.8-requirements.txt -# -anyio==4.0.0 - # via - # httpx - # starlette - # watchfiles -appdirs==1.4.4 - # via fissix -attrs==23.1.0 - # via - # bowler - # jsonschema - # referencing -bowler==0.9.0 - # via feast (setup.py) -certifi==2023.7.22 - # via - # httpcore - # httpx - # requests -charset-normalizer==3.3.2 - # via requests -click==8.1.7 - # via - # bowler - # dask - # feast (setup.py) - # moreorless - # uvicorn -cloudpickle==3.0.0 - # via dask -colorama==0.4.6 - # via feast (setup.py) -dask==2023.5.0 - # via feast (setup.py) -dill==0.3.7 - # via feast (setup.py) -exceptiongroup==1.1.3 - # via anyio -fastapi==0.109.1 - # via feast (setup.py) -fastavro==1.9.0 - # via - # feast (setup.py) - # pandavro -fissix==21.11.13 - # via bowler -fsspec==2023.10.0 - # via dask -greenlet==3.0.1 - # via sqlalchemy -grpcio==1.59.2 - # via - # feast (setup.py) - # grpcio-health-checking - # grpcio-reflection - # grpcio-tools -grpcio-health-checking==1.59.2 - # via feast (setup.py) -grpcio-reflection==1.59.2 - # via feast (setup.py) -grpcio-tools==1.59.2 - # via feast (setup.py) -gunicorn==21.2.0 - # via feast (setup.py) -h11==0.14.0 - # via - # httpcore - # uvicorn -httpcore==1.0.2 - # via httpx -httptools==0.6.1 - # via uvicorn -httpx==0.25.1 - # via feast (setup.py) -idna==3.4 - # via - # anyio - # httpx - # requests -importlib-metadata==6.8.0 - # via - # dask - # feast (setup.py) -importlib-resources==6.1.1 - # via - # feast (setup.py) - # jsonschema - # jsonschema-specifications -jinja2==3.1.3 - # via feast (setup.py) -jsonschema==4.20.0 - # via feast (setup.py) -jsonschema-specifications==2023.11.1 - # via jsonschema -locket==1.0.0 - # via partd -markupsafe==2.1.3 - # via jinja2 -mmh3==4.0.1 - # via feast (setup.py) -moreorless==0.4.0 - # via bowler -mypy==1.7.0 - # via sqlalchemy -mypy-extensions==1.0.0 - # via mypy -mypy-protobuf==3.1.0 - # via feast (setup.py) -numpy==1.24.4 - # via - # feast (setup.py) - # pandas - # pandavro - # pyarrow -packaging==23.2 - # via - # dask - # gunicorn -pandas==1.5.3 - # via - # feast (setup.py) - # pandavro -pandavro==1.5.2 - # via feast (setup.py) -partd==1.4.1 - # via dask -pkgutil-resolve-name==1.3.10 - # via jsonschema -proto-plus==1.22.3 - # via feast (setup.py) -protobuf==4.23.3 - # via - # feast (setup.py) - # grpcio-health-checking - # grpcio-reflection - # grpcio-tools - # mypy-protobuf - # proto-plus -pyarrow==14.0.1 - # via feast (setup.py) -pydantic==1.10.13 - # via - # fastapi - # feast (setup.py) -pygments==2.16.1 - # via feast (setup.py) -python-dateutil==2.8.2 - # via pandas -python-dotenv==1.0.0 - # via uvicorn -pytz==2023.3.post1 - # via pandas -pyyaml==6.0.1 - # via - # dask - # feast (setup.py) - # uvicorn -referencing==0.31.0 - # via - # jsonschema - # jsonschema-specifications -requests==2.31.0 - # via feast (setup.py) -rpds-py==0.13.0 - # via - # jsonschema - # referencing -six==1.16.0 - # via - # pandavro - # python-dateutil -sniffio==1.3.0 - # via - # anyio - # httpx -sqlalchemy[mypy]==1.4.50 - # via feast (setup.py) -sqlalchemy2-stubs==0.0.2a37 - # via sqlalchemy -starlette==0.35.1 - # via fastapi -tabulate==0.9.0 - # via feast (setup.py) -tenacity==8.2.3 - # via feast (setup.py) -toml==0.10.2 - # via feast (setup.py) -tomli==2.0.1 - # via mypy -toolz==0.12.0 - # via - # dask - # partd -tqdm==4.66.1 - # via feast (setup.py) -typeguard==2.13.3 - # via feast (setup.py) -types-protobuf==4.24.0.4 - # via mypy-protobuf -typing-extensions==4.8.0 - # via - # fastapi - # mypy - # pydantic - # sqlalchemy2-stubs - # starlette - # uvicorn -urllib3==2.1.0 - # via requests -uvicorn[standard]==0.24.0.post1 - # via feast (setup.py) -uvloop==0.19.0 - # via uvicorn -volatile==2.1.0 - # via bowler -watchfiles==0.21.0 - # via uvicorn -websockets==12.0 - # via uvicorn -zipp==3.17.0 - # via - # importlib-metadata - # importlib-resources - -# The following packages are considered to be unsafe in a requirements file: -# setuptools diff --git a/sdk/python/requirements/py3.9-ci-requirements.txt b/sdk/python/requirements/py3.9-ci-requirements.txt deleted file mode 100644 index f9d7ac3fb9..0000000000 --- a/sdk/python/requirements/py3.9-ci-requirements.txt +++ /dev/null @@ -1,1011 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --extra=ci --output-file=sdk/python/requirements/py3.9-ci-requirements.txt -# -alabaster==0.7.13 - # via sphinx -altair==4.2.0 - # via great-expectations -anyio==4.0.0 - # via - # httpx - # jupyter-server - # starlette - # watchfiles -appdirs==1.4.4 - # via fissix -argon2-cffi==23.1.0 - # via jupyter-server -argon2-cffi-bindings==21.2.0 - # via argon2-cffi -arrow==1.3.0 - # via isoduration -asn1crypto==1.5.1 - # via snowflake-connector-python -assertpy==1.1 - # via feast (setup.py) -asttokens==2.4.1 - # via stack-data -async-lru==2.0.4 - # via jupyterlab -async-timeout==4.0.3 - # via redis -attrs==23.1.0 - # via - # bowler - # jsonschema - # referencing -avro==1.10.0 - # via feast (setup.py) -azure-core==1.29.5 - # via - # azure-identity - # azure-storage-blob -azure-identity==1.15.0 - # via feast (setup.py) -azure-storage-blob==12.19.0 - # via feast (setup.py) -babel==2.13.1 - # via - # jupyterlab-server - # sphinx -beautifulsoup4==4.12.2 - # via nbconvert -black==22.12.0 - # via feast (setup.py) -bleach==6.1.0 - # via nbconvert -boto3==1.29.2 - # via - # feast (setup.py) - # moto -botocore==1.32.2 - # via - # boto3 - # moto - # s3transfer -bowler==0.9.0 - # via feast (setup.py) -build==1.0.3 - # via - # feast (setup.py) - # pip-tools -bytewax==0.15.1 - # via feast (setup.py) -cachecontrol==0.13.1 - # via firebase-admin -cachetools==5.3.2 - # via google-auth -cassandra-driver==3.28.0 - # via feast (setup.py) -certifi==2023.7.22 - # via - # httpcore - # httpx - # kubernetes - # minio - # requests - # snowflake-connector-python -cffi==1.16.0 - # via - # argon2-cffi-bindings - # cryptography - # snowflake-connector-python -cfgv==3.4.0 - # via pre-commit -charset-normalizer==3.3.2 - # via - # requests - # snowflake-connector-python -click==8.1.7 - # via - # black - # bowler - # dask - # feast (setup.py) - # geomet - # great-expectations - # moreorless - # pip-tools - # uvicorn -cloudpickle==3.0.0 - # via dask -colorama==0.4.6 - # via - # feast (setup.py) - # great-expectations -comm==0.2.0 - # via - # ipykernel - # ipywidgets -coverage[toml]==7.3.2 - # via pytest-cov -cryptography==41.0.6 - # via - # azure-identity - # azure-storage-blob - # feast (setup.py) - # great-expectations - # moto - # msal - # pyjwt - # pyopenssl - # snowflake-connector-python - # types-pyopenssl - # types-redis -dask==2023.11.0 - # via feast (setup.py) -db-dtypes==1.1.1 - # via google-cloud-bigquery -debugpy==1.8.0 - # via ipykernel -decorator==5.1.1 - # via ipython -defusedxml==0.7.1 - # via nbconvert -deprecation==2.1.0 - # via testcontainers -dill==0.3.7 - # via - # bytewax - # feast (setup.py) - # multiprocess -distlib==0.3.7 - # via virtualenv -docker==6.1.3 - # via - # feast (setup.py) - # testcontainers -docutils==0.19 - # via sphinx -entrypoints==0.4 - # via altair -exceptiongroup==1.1.3 - # via - # anyio - # ipython - # pytest -execnet==2.0.2 - # via pytest-xdist -executing==2.0.1 - # via stack-data -fastapi==0.109.1 - # via feast (setup.py) -fastavro==1.9.0 - # via - # feast (setup.py) - # pandavro -fastjsonschema==2.19.0 - # via nbformat -filelock==3.13.1 - # via - # snowflake-connector-python - # virtualenv -firebase-admin==5.4.0 - # via feast (setup.py) -fissix==21.11.13 - # via bowler -flake8==6.0.0 - # via feast (setup.py) -fqdn==1.5.1 - # via jsonschema -fsspec==2023.9.2 - # via - # dask - # feast (setup.py) -geojson==2.5.0 - # via rockset -geomet==0.2.1.post1 - # via cassandra-driver -google-api-core[grpc]==2.14.0 - # via - # feast (setup.py) - # firebase-admin - # google-api-python-client - # google-cloud-bigquery - # google-cloud-bigquery-storage - # google-cloud-bigtable - # google-cloud-core - # google-cloud-datastore - # google-cloud-firestore - # google-cloud-storage -google-api-python-client==2.108.0 - # via firebase-admin -google-auth==2.23.4 - # via - # google-api-core - # google-api-python-client - # google-auth-httplib2 - # google-cloud-core - # google-cloud-storage - # kubernetes -google-auth-httplib2==0.1.1 - # via google-api-python-client -google-cloud-bigquery[pandas]==3.12.0 - # via feast (setup.py) -google-cloud-bigquery-storage==2.22.0 - # via feast (setup.py) -google-cloud-bigtable==2.21.0 - # via feast (setup.py) -google-cloud-core==2.3.3 - # via - # google-cloud-bigquery - # google-cloud-bigtable - # google-cloud-datastore - # google-cloud-firestore - # google-cloud-storage -google-cloud-datastore==2.18.0 - # via feast (setup.py) -google-cloud-firestore==2.13.1 - # via firebase-admin -google-cloud-storage==2.13.0 - # via - # feast (setup.py) - # firebase-admin -google-crc32c==1.5.0 - # via - # google-cloud-storage - # google-resumable-media -google-resumable-media==2.6.0 - # via - # google-cloud-bigquery - # google-cloud-storage -googleapis-common-protos[grpc]==1.61.0 - # via - # feast (setup.py) - # google-api-core - # grpc-google-iam-v1 - # grpcio-status -great-expectations==0.15.50 - # via feast (setup.py) -greenlet==3.0.1 - # via sqlalchemy -grpc-google-iam-v1==0.12.7 - # via google-cloud-bigtable -grpcio==1.59.2 - # via - # feast (setup.py) - # google-api-core - # google-cloud-bigquery - # googleapis-common-protos - # grpc-google-iam-v1 - # grpcio-health-checking - # grpcio-reflection - # grpcio-status - # grpcio-testing - # grpcio-tools -grpcio-health-checking==1.59.2 - # via feast (setup.py) -grpcio-reflection==1.59.2 - # via feast (setup.py) -grpcio-status==1.59.2 - # via google-api-core -grpcio-testing==1.59.2 - # via feast (setup.py) -grpcio-tools==1.59.2 - # via feast (setup.py) -gunicorn==21.2.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.2.3 - # via feast (setup.py) -httpcore==1.0.2 - # via httpx -httplib2==0.22.0 - # via - # google-api-python-client - # google-auth-httplib2 -httptools==0.6.1 - # via uvicorn -httpx==0.25.1 - # via feast (setup.py) -identify==2.5.31 - # via pre-commit -idna==3.4 - # via - # anyio - # httpx - # jsonschema - # requests - # snowflake-connector-python -imagesize==1.4.1 - # via sphinx -importlib-metadata==6.8.0 - # via - # build - # dask - # feast (setup.py) - # great-expectations - # jupyter-client - # jupyter-lsp - # jupyterlab - # jupyterlab-server - # nbconvert - # sphinx -importlib-resources==6.1.1 - # via feast (setup.py) -iniconfig==2.0.0 - # via pytest -ipykernel==6.26.0 - # via jupyterlab -ipython==8.17.2 - # via - # great-expectations - # ipykernel - # ipywidgets -ipywidgets==8.1.1 - # via great-expectations -isodate==0.6.1 - # via azure-storage-blob -isoduration==20.11.0 - # via jsonschema -isort==5.12.0 - # via feast (setup.py) -jedi==0.19.1 - # via ipython -jinja2==3.1.3 - # via - # altair - # feast (setup.py) - # great-expectations - # jupyter-server - # jupyterlab - # jupyterlab-server - # moto - # nbconvert - # sphinx -jmespath==1.0.1 - # via - # boto3 - # botocore -json5==0.9.14 - # via jupyterlab-server -jsonpatch==1.33 - # via great-expectations -jsonpointer==2.4 - # via - # jsonpatch - # jsonschema -jsonschema[format-nongpl]==4.20.0 - # via - # altair - # feast (setup.py) - # great-expectations - # jupyter-events - # jupyterlab-server - # nbformat -jsonschema-specifications==2023.11.1 - # via jsonschema -jupyter-client==8.6.0 - # via - # ipykernel - # jupyter-server - # nbclient -jupyter-core==5.5.0 - # via - # ipykernel - # jupyter-client - # jupyter-server - # jupyterlab - # nbclient - # nbconvert - # nbformat -jupyter-events==0.9.0 - # via jupyter-server -jupyter-lsp==2.2.2 - # via jupyterlab -jupyter-server==2.11.2 - # via - # jupyter-lsp - # jupyterlab - # jupyterlab-server - # notebook - # notebook-shim -jupyter-server-terminals==0.4.4 - # via jupyter-server -jupyterlab==4.0.11 - # via notebook -jupyterlab-pygments==0.2.2 - # via nbconvert -jupyterlab-server==2.25.1 - # via - # jupyterlab - # notebook -jupyterlab-widgets==3.0.9 - # via ipywidgets -kubernetes==20.13.0 - # via feast (setup.py) -locket==1.0.0 - # via partd -makefun==1.15.2 - # via great-expectations -markupsafe==2.1.3 - # via - # jinja2 - # nbconvert - # werkzeug -marshmallow==3.20.1 - # via great-expectations -matplotlib-inline==0.1.6 - # via - # ipykernel - # ipython -mccabe==0.7.0 - # via flake8 -minio==7.1.0 - # via feast (setup.py) -mistune==3.0.2 - # via - # great-expectations - # nbconvert -mmh3==4.0.1 - # via feast (setup.py) -mock==2.0.0 - # via feast (setup.py) -moreorless==0.4.0 - # via bowler -moto==4.2.9 - # via feast (setup.py) -msal==1.25.0 - # via - # azure-identity - # msal-extensions -msal-extensions==1.0.0 - # via azure-identity -msgpack==1.0.7 - # via cachecontrol -multiprocess==0.70.15 - # via bytewax -mypy==1.8.0 - # via - # feast (setup.py) - # sqlalchemy -mypy-extensions==1.0.0 - # via - # black - # mypy -mypy-protobuf==3.1.0 - # via feast (setup.py) -nbclient==0.9.0 - # via nbconvert -nbconvert==7.11.0 - # via jupyter-server -nbformat==5.9.2 - # via - # great-expectations - # jupyter-server - # nbclient - # nbconvert -nest-asyncio==1.5.8 - # via ipykernel -nodeenv==1.8.0 - # via pre-commit -notebook==7.0.6 - # via great-expectations -notebook-shim==0.2.3 - # via - # jupyterlab - # notebook -numpy==1.24.4 - # via - # altair - # db-dtypes - # feast (setup.py) - # great-expectations - # pandas - # pandavro - # pyarrow - # scipy -oauthlib==3.2.2 - # via requests-oauthlib -overrides==7.4.0 - # via jupyter-server -packaging==23.2 - # via - # build - # dask - # db-dtypes - # deprecation - # docker - # google-cloud-bigquery - # great-expectations - # gunicorn - # ipykernel - # jupyter-server - # jupyterlab - # jupyterlab-server - # marshmallow - # nbconvert - # pytest - # snowflake-connector-python - # sphinx -pandas==1.5.3 - # via - # altair - # db-dtypes - # feast (setup.py) - # google-cloud-bigquery - # great-expectations - # pandavro - # snowflake-connector-python -pandavro==1.5.2 - # via feast (setup.py) -pandocfilters==1.5.0 - # via nbconvert -parso==0.8.3 - # via jedi -partd==1.4.1 - # via dask -pathspec==0.11.2 - # via black -pbr==6.0.0 - # via mock -pexpect==4.8.0 - # via ipython -pip-tools==7.3.0 - # via feast (setup.py) -platformdirs==3.11.0 - # via - # black - # jupyter-core - # snowflake-connector-python - # virtualenv -pluggy==1.3.0 - # via pytest -ply==3.11 - # via thriftpy2 -portalocker==2.8.2 - # via msal-extensions -pre-commit==3.3.1 - # via feast (setup.py) -prometheus-client==0.18.0 - # via jupyter-server -prompt-toolkit==3.0.41 - # via ipython -proto-plus==1.22.3 - # via - # feast (setup.py) - # google-cloud-bigquery - # google-cloud-bigquery-storage - # google-cloud-bigtable - # google-cloud-datastore - # google-cloud-firestore -protobuf==4.23.3 - # via - # feast (setup.py) - # google-api-core - # google-cloud-bigquery - # google-cloud-bigquery-storage - # google-cloud-bigtable - # google-cloud-datastore - # google-cloud-firestore - # googleapis-common-protos - # grpc-google-iam-v1 - # grpcio-health-checking - # grpcio-reflection - # grpcio-status - # grpcio-testing - # grpcio-tools - # mypy-protobuf - # proto-plus -psutil==5.9.0 - # via - # feast (setup.py) - # ipykernel -psycopg2-binary==2.9.9 - # via feast (setup.py) -ptyprocess==0.7.0 - # via - # pexpect - # terminado -pure-eval==0.2.2 - # via stack-data -py==1.11.0 - # via feast (setup.py) -py-cpuinfo==9.0.0 - # via pytest-benchmark -py4j==0.10.9.7 - # via pyspark -pyarrow==14.0.1 - # via - # db-dtypes - # feast (setup.py) - # google-cloud-bigquery - # snowflake-connector-python -pyasn1==0.5.0 - # via - # pyasn1-modules - # rsa -pyasn1-modules==0.3.0 - # via google-auth -pybindgen==0.22.1 - # via feast (setup.py) -pycodestyle==2.10.0 - # via flake8 -pycparser==2.21 - # via cffi -pydantic==1.10.13 - # via - # fastapi - # feast (setup.py) - # great-expectations -pyflakes==3.0.1 - # via flake8 -pygments==2.16.1 - # via - # feast (setup.py) - # ipython - # nbconvert - # sphinx -pyjwt[crypto]==2.8.0 - # via - # msal - # snowflake-connector-python -pymssql==2.2.10 - # via feast (setup.py) -pymysql==1.1.0 - # via feast (setup.py) -pyodbc==5.0.1 - # via feast (setup.py) -pyopenssl==23.3.0 - # via snowflake-connector-python -pyparsing==3.1.1 - # via - # great-expectations - # httplib2 -pyproject-hooks==1.0.0 - # via build -pyspark==3.5.0 - # via feast (setup.py) -pytest==7.4.3 - # via - # feast (setup.py) - # pytest-benchmark - # pytest-cov - # pytest-lazy-fixture - # pytest-mock - # pytest-ordering - # pytest-timeout - # pytest-xdist -pytest-benchmark==3.4.1 - # via feast (setup.py) -pytest-cov==4.1.0 - # 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.4.0 - # via feast (setup.py) -python-dateutil==2.8.2 - # via - # arrow - # botocore - # google-cloud-bigquery - # great-expectations - # jupyter-client - # kubernetes - # moto - # pandas - # rockset - # trino -python-dotenv==1.0.0 - # via uvicorn -python-json-logger==2.0.7 - # via jupyter-events -pytz==2023.3.post1 - # via - # great-expectations - # pandas - # snowflake-connector-python - # trino -pyyaml==6.0.1 - # via - # dask - # feast (setup.py) - # jupyter-events - # kubernetes - # pre-commit - # responses - # uvicorn -pyzmq==25.1.1 - # via - # ipykernel - # jupyter-client - # jupyter-server -redis==4.6.0 - # via feast (setup.py) -referencing==0.31.0 - # via - # jsonschema - # jsonschema-specifications - # jupyter-events -regex==2023.10.3 - # via feast (setup.py) -requests==2.31.0 - # via - # azure-core - # cachecontrol - # docker - # feast (setup.py) - # google-api-core - # google-cloud-bigquery - # google-cloud-storage - # great-expectations - # jupyterlab-server - # kubernetes - # moto - # msal - # requests-oauthlib - # responses - # snowflake-connector-python - # sphinx - # trino -requests-oauthlib==1.3.1 - # via kubernetes -responses==0.24.1 - # via moto -rfc3339-validator==0.1.4 - # via - # jsonschema - # jupyter-events -rfc3986-validator==0.1.1 - # via - # jsonschema - # jupyter-events -rockset==2.1.0 - # via feast (setup.py) -rpds-py==0.13.0 - # via - # jsonschema - # referencing -rsa==4.9 - # via google-auth -ruamel-yaml==0.17.17 - # via great-expectations -ruamel-yaml-clib==0.2.8 - # via ruamel-yaml -s3transfer==0.7.0 - # via boto3 -scipy==1.11.3 - # via great-expectations -send2trash==1.8.2 - # via jupyter-server -six==1.16.0 - # via - # asttokens - # azure-core - # bleach - # cassandra-driver - # geomet - # happybase - # isodate - # kubernetes - # mock - # pandavro - # python-dateutil - # rfc3339-validator - # thriftpy2 -sniffio==1.3.0 - # via - # anyio - # httpx -snowballstemmer==2.2.0 - # via sphinx -snowflake-connector-python[pandas]==3.5.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 - # sphinxcontrib-devhelp - # sphinxcontrib-htmlhelp - # sphinxcontrib-qthelp - # sphinxcontrib-serializinghtml -sphinxcontrib-applehelp==1.0.7 - # via sphinx -sphinxcontrib-devhelp==1.0.5 - # via sphinx -sphinxcontrib-htmlhelp==2.0.4 - # via sphinx -sphinxcontrib-jsmath==1.0.1 - # via sphinx -sphinxcontrib-qthelp==1.0.6 - # via sphinx -sphinxcontrib-serializinghtml==1.1.9 - # via sphinx -sqlalchemy[mypy]==1.4.50 - # via feast (setup.py) -sqlalchemy2-stubs==0.0.2a37 - # via sqlalchemy -stack-data==0.6.3 - # via ipython -starlette==0.35.1 - # via fastapi -tabulate==0.9.0 - # via feast (setup.py) -tenacity==8.2.3 - # via feast (setup.py) -terminado==0.18.0 - # via - # jupyter-server - # jupyter-server-terminals -testcontainers==3.7.1 - # via feast (setup.py) -thriftpy2==0.4.17 - # via happybase -tinycss2==1.2.1 - # via nbconvert -toml==0.10.2 - # via feast (setup.py) -tomli==2.0.1 - # via - # black - # build - # coverage - # jupyterlab - # mypy - # pip-tools - # pyproject-hooks - # pytest -tomlkit==0.12.3 - # via snowflake-connector-python -toolz==0.12.0 - # via - # altair - # dask - # partd -tornado==6.3.3 - # via - # ipykernel - # jupyter-client - # jupyter-server - # jupyterlab - # notebook - # terminado -tqdm==4.66.1 - # via - # feast (setup.py) - # great-expectations -traitlets==5.13.0 - # via - # comm - # ipykernel - # ipython - # ipywidgets - # jupyter-client - # jupyter-core - # jupyter-events - # jupyter-server - # jupyterlab - # matplotlib-inline - # nbclient - # nbconvert - # nbformat -trino==0.327.0 - # via feast (setup.py) -typeguard==2.13.3 - # via feast (setup.py) -types-protobuf==3.19.22 - # via - # feast (setup.py) - # mypy-protobuf -types-pymysql==1.1.0.1 - # via feast (setup.py) -types-pyopenssl==23.3.0.0 - # via types-redis -types-python-dateutil==2.8.19.14 - # via - # arrow - # feast (setup.py) -types-pytz==2023.3.1.1 - # via feast (setup.py) -types-pyyaml==6.0.12.12 - # via feast (setup.py) -types-redis==4.6.0.10 - # via feast (setup.py) -types-requests==2.30.0.0 - # via feast (setup.py) -types-setuptools==68.2.0.1 - # via feast (setup.py) -types-tabulate==0.9.0.3 - # via feast (setup.py) -types-urllib3==1.26.25.14 - # via types-requests -typing-extensions==4.8.0 - # via - # async-lru - # azure-core - # azure-storage-blob - # black - # fastapi - # great-expectations - # ipython - # mypy - # pydantic - # snowflake-connector-python - # sqlalchemy2-stubs - # starlette - # uvicorn -tzlocal==5.2 - # via - # great-expectations - # trino -uri-template==1.3.0 - # via jsonschema -uritemplate==4.1.1 - # via google-api-python-client -urllib3==1.26.18 - # via - # botocore - # docker - # feast (setup.py) - # great-expectations - # kubernetes - # minio - # requests - # responses - # rockset - # snowflake-connector-python -uvicorn[standard]==0.24.0.post1 - # via feast (setup.py) -uvloop==0.19.0 - # via uvicorn -virtualenv==20.23.0 - # via - # feast (setup.py) - # pre-commit -volatile==2.1.0 - # via bowler -watchfiles==0.21.0 - # via uvicorn -wcwidth==0.2.10 - # via prompt-toolkit -webcolors==1.13 - # via jsonschema -webencodings==0.5.1 - # via - # bleach - # tinycss2 -websocket-client==1.6.4 - # via - # docker - # jupyter-server - # kubernetes -websockets==12.0 - # via uvicorn -werkzeug==3.0.1 - # via moto -wheel==0.41.3 - # via pip-tools -widgetsnbextension==4.0.9 - # via ipywidgets -wrapt==1.16.0 - # via testcontainers -xmltodict==0.13.0 - # via moto -zipp==3.17.0 - # via - # importlib-metadata - # importlib-resources - -# The following packages are considered to be unsafe in a requirements file: -# pip -# setuptools diff --git a/sdk/python/requirements/py3.9-requirements.txt b/sdk/python/requirements/py3.9-requirements.txt deleted file mode 100644 index 4d9b8f107d..0000000000 --- a/sdk/python/requirements/py3.9-requirements.txt +++ /dev/null @@ -1,227 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --output-file=sdk/python/requirements/py3.9-requirements.txt -# -anyio==4.0.0 - # via - # httpx - # starlette - # watchfiles -appdirs==1.4.4 - # via fissix -attrs==23.1.0 - # via - # bowler - # jsonschema - # referencing -bowler==0.9.0 - # via feast (setup.py) -certifi==2023.7.22 - # via - # httpcore - # httpx - # requests -charset-normalizer==3.3.2 - # via requests -click==8.1.7 - # via - # bowler - # dask - # feast (setup.py) - # moreorless - # uvicorn -cloudpickle==3.0.0 - # via dask -colorama==0.4.6 - # via feast (setup.py) -dask==2023.11.0 - # via feast (setup.py) -dill==0.3.7 - # via feast (setup.py) -exceptiongroup==1.1.3 - # via anyio -fastapi==0.109.1 - # via feast (setup.py) -fastavro==1.9.0 - # via - # feast (setup.py) - # pandavro -fissix==21.11.13 - # via bowler -fsspec==2023.10.0 - # via dask -greenlet==3.0.1 - # via sqlalchemy -grpcio==1.59.2 - # via - # feast (setup.py) - # grpcio-health-checking - # grpcio-reflection - # grpcio-tools -grpcio-health-checking==1.59.2 - # via feast (setup.py) -grpcio-reflection==1.59.2 - # via feast (setup.py) -grpcio-tools==1.59.2 - # via feast (setup.py) -gunicorn==21.2.0 - # via feast (setup.py) -h11==0.14.0 - # via - # httpcore - # uvicorn -httpcore==1.0.2 - # via httpx -httptools==0.6.1 - # via uvicorn -httpx==0.25.1 - # via feast (setup.py) -idna==3.4 - # via - # anyio - # httpx - # requests -importlib-metadata==6.8.0 - # via - # dask - # feast (setup.py) -importlib-resources==6.1.1 - # via feast (setup.py) -jinja2==3.1.3 - # via feast (setup.py) -jsonschema==4.20.0 - # via feast (setup.py) -jsonschema-specifications==2023.11.1 - # via jsonschema -locket==1.0.0 - # via partd -markupsafe==2.1.3 - # via jinja2 -mmh3==4.0.1 - # via feast (setup.py) -moreorless==0.4.0 - # via bowler -mypy==1.7.0 - # via sqlalchemy -mypy-extensions==1.0.0 - # via mypy -mypy-protobuf==3.1.0 - # via feast (setup.py) -numpy==1.24.4 - # via - # feast (setup.py) - # pandas - # pandavro - # pyarrow -packaging==23.2 - # via - # dask - # gunicorn -pandas==1.5.3 - # via - # feast (setup.py) - # pandavro -pandavro==1.5.2 - # via feast (setup.py) -partd==1.4.1 - # via dask -proto-plus==1.22.3 - # via feast (setup.py) -protobuf==4.23.3 - # via - # feast (setup.py) - # grpcio-health-checking - # grpcio-reflection - # grpcio-tools - # mypy-protobuf - # proto-plus -pyarrow==14.0.1 - # via feast (setup.py) -pydantic==1.10.13 - # via - # fastapi - # feast (setup.py) -pygments==2.16.1 - # via feast (setup.py) -python-dateutil==2.8.2 - # via pandas -python-dotenv==1.0.0 - # via uvicorn -pytz==2023.3.post1 - # via pandas -pyyaml==6.0.1 - # via - # dask - # feast (setup.py) - # uvicorn -referencing==0.31.0 - # via - # jsonschema - # jsonschema-specifications -requests==2.31.0 - # via feast (setup.py) -rpds-py==0.13.0 - # via - # jsonschema - # referencing -six==1.16.0 - # via - # pandavro - # python-dateutil -sniffio==1.3.0 - # via - # anyio - # httpx -sqlalchemy[mypy]==1.4.50 - # via feast (setup.py) -sqlalchemy2-stubs==0.0.2a37 - # via sqlalchemy -starlette==0.35.1 - # via fastapi -tabulate==0.9.0 - # via feast (setup.py) -tenacity==8.2.3 - # via feast (setup.py) -toml==0.10.2 - # via feast (setup.py) -tomli==2.0.1 - # via mypy -toolz==0.12.0 - # via - # dask - # partd -tqdm==4.66.1 - # via feast (setup.py) -typeguard==2.13.3 - # via feast (setup.py) -types-protobuf==4.24.0.4 - # via mypy-protobuf -typing-extensions==4.8.0 - # via - # fastapi - # mypy - # pydantic - # sqlalchemy2-stubs - # starlette - # uvicorn -urllib3==2.1.0 - # via requests -uvicorn[standard]==0.24.0.post1 - # via feast (setup.py) -uvloop==0.19.0 - # via uvicorn -volatile==2.1.0 - # via bowler -watchfiles==0.21.0 - # via uvicorn -websockets==12.0 - # via uvicorn -zipp==3.17.0 - # via - # importlib-metadata - # importlib-resources - -# The following packages are considered to be unsafe in a requirements file: -# setuptools From 497af8e2f62bdd8270ae6c50ba7756f31a8572ae Mon Sep 17 00:00:00 2001 From: Shuchu Han Date: Wed, 7 Feb 2024 21:34:13 -0500 Subject: [PATCH 4/9] feat: fix few type checking errors. Signed-off-by: Shuchu Han --- .../contrib/spark_offline_store/tests/data_source.py | 5 +++++ sdk/python/feast/infra/offline_stores/offline_store.py | 4 ++-- .../tests/unit/infra/offline_stores/test_offline_store.py | 8 +++----- sdk/python/tests/utils/e2e_test_validation.py | 2 +- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/sdk/python/feast/infra/offline_stores/contrib/spark_offline_store/tests/data_source.py b/sdk/python/feast/infra/offline_stores/contrib/spark_offline_store/tests/data_source.py index 2a36b152af..b978521885 100644 --- a/sdk/python/feast/infra/offline_stores/contrib/spark_offline_store/tests/data_source.py +++ b/sdk/python/feast/infra/offline_stores/contrib/spark_offline_store/tests/data_source.py @@ -9,6 +9,7 @@ from pyspark.sql import SparkSession from feast.data_source import DataSource +from feast.feature_logging import LoggingDestination from feast.infra.offline_stores.contrib.spark_offline_store.spark import ( SparkOfflineStoreConfig, ) @@ -119,3 +120,7 @@ def create_saved_dataset_destination(self) -> SavedDatasetSparkStorage: def get_prefixed_table_name(self, suffix: str) -> str: return f"{self.project_name}_{suffix}" + + def create_logged_features_destination(self) -> LoggingDestination: + # No implementation of LoggingDestination for Spark offline store. + return None # type: ignore diff --git a/sdk/python/feast/infra/offline_stores/offline_store.py b/sdk/python/feast/infra/offline_stores/offline_store.py index 30135feccb..ea0682ab7e 100644 --- a/sdk/python/feast/infra/offline_stores/offline_store.py +++ b/sdk/python/feast/infra/offline_stores/offline_store.py @@ -146,11 +146,11 @@ def to_arrow( return pyarrow.Table.from_pandas(features_df) - def to_sql(self) -> str: + def to_sql(self) -> str: # type: ignore """ Return RetrievalJob generated SQL statement if applicable. """ - raise NotImplementedError + pass def _to_df_internal(self, timeout: Optional[int] = None) -> pd.DataFrame: """ diff --git a/sdk/python/tests/unit/infra/offline_stores/test_offline_store.py b/sdk/python/tests/unit/infra/offline_stores/test_offline_store.py index cbeee3457e..f93237fce5 100644 --- a/sdk/python/tests/unit/infra/offline_stores/test_offline_store.py +++ b/sdk/python/tests/unit/infra/offline_stores/test_offline_store.py @@ -1,4 +1,4 @@ -from typing import List, Optional, no_type_check +from typing import List, Optional from unittest.mock import MagicMock, patch import pandas as pd @@ -60,15 +60,13 @@ def _to_arrow_internal(self, timeout: Optional[int] = None) -> pyarrow.Table: """ return pyarrow.Table() - @no_type_check @property - def full_feature_names(self) -> bool: + def full_feature_names(self) -> bool: # type: ignore """Returns True if full feature names should be applied to the results of the query.""" return False - @no_type_check @property - def on_demand_feature_views(self) -> List[OnDemandFeatureView]: + def on_demand_feature_views(self) -> List[OnDemandFeatureView]: # type: ignore """Returns a list containing all the on demand feature views to be handled.""" return [] diff --git a/sdk/python/tests/utils/e2e_test_validation.py b/sdk/python/tests/utils/e2e_test_validation.py index bacc8c1720..d8c769f12c 100644 --- a/sdk/python/tests/utils/e2e_test_validation.py +++ b/sdk/python/tests/utils/e2e_test_validation.py @@ -193,7 +193,7 @@ def make_feature_store_yaml( repo_path=str(Path(repo_dir_name)), entity_key_serialization_version=2, ) - config_dict = config.dict() + config_dict = config.model_dump(by_alias=True) if ( isinstance(config_dict["online_store"], dict) and "redis_type" in config_dict["online_store"] From 6f0e0ce866f9850e9567602d675347affc04a270 Mon Sep 17 00:00:00 2001 From: Shuchu Han Date: Wed, 7 Feb 2024 22:01:34 -0500 Subject: [PATCH 5/9] fix: downgrade the version of moto to moto<5. Signed-off-by: Shuchu Han --- .../requirements/py3.10-ci-requirements.txt | 1006 ++++++++++++++++ .../requirements/py3.8-ci-requirements.txt | 1036 +++++++++++++++++ .../requirements/py3.9-ci-requirements.txt | 1021 ++++++++++++++++ 3 files changed, 3063 insertions(+) create mode 100644 sdk/python/requirements/py3.10-ci-requirements.txt create mode 100644 sdk/python/requirements/py3.8-ci-requirements.txt create mode 100644 sdk/python/requirements/py3.9-ci-requirements.txt diff --git a/sdk/python/requirements/py3.10-ci-requirements.txt b/sdk/python/requirements/py3.10-ci-requirements.txt new file mode 100644 index 0000000000..5f328a2104 --- /dev/null +++ b/sdk/python/requirements/py3.10-ci-requirements.txt @@ -0,0 +1,1006 @@ +# +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: +# +# pip-compile --extra=ci --output-file=sdk/python/requirements/py3.10-ci-requirements.txt +# +alabaster==0.7.16 + # via sphinx +altair==4.2.2 + # via great-expectations +annotated-types==0.6.0 + # via pydantic +anyio==4.2.0 + # via + # httpx + # jupyter-server + # starlette + # watchfiles +appdirs==1.4.4 + # via fissix +argon2-cffi==23.1.0 + # via jupyter-server +argon2-cffi-bindings==21.2.0 + # via argon2-cffi +arrow==1.3.0 + # via isoduration +asn1crypto==1.5.1 + # via snowflake-connector-python +assertpy==1.1 + # via feast (setup.py) +asttokens==2.4.1 + # via stack-data +async-lru==2.0.4 + # via jupyterlab +async-timeout==4.0.3 + # via redis +attrs==23.2.0 + # via + # bowler + # jsonschema + # referencing +avro==1.10.0 + # via feast (setup.py) +azure-core==1.30.0 + # via + # azure-identity + # azure-storage-blob +azure-identity==1.15.0 + # via feast (setup.py) +azure-storage-blob==12.19.0 + # via feast (setup.py) +babel==2.14.0 + # via + # jupyterlab-server + # sphinx +beautifulsoup4==4.12.3 + # via nbconvert +black==22.12.0 + # via feast (setup.py) +bleach==6.1.0 + # via nbconvert +boto3==1.34.37 + # via + # feast (setup.py) + # moto +botocore==1.34.37 + # via + # boto3 + # moto + # s3transfer +bowler==0.9.0 + # via feast (setup.py) +build==1.0.3 + # via + # feast (setup.py) + # pip-tools +bytewax==0.15.1 + # via feast (setup.py) +cachecontrol==0.14.0 + # via firebase-admin +cachetools==5.3.2 + # via google-auth +cassandra-driver==3.29.0 + # via feast (setup.py) +certifi==2024.2.2 + # via + # httpcore + # httpx + # kubernetes + # minio + # requests + # snowflake-connector-python +cffi==1.16.0 + # via + # argon2-cffi-bindings + # cryptography + # snowflake-connector-python +cfgv==3.4.0 + # via pre-commit +charset-normalizer==3.3.2 + # via + # requests + # snowflake-connector-python +click==8.1.7 + # via + # black + # bowler + # dask + # feast (setup.py) + # geomet + # great-expectations + # moreorless + # pip-tools + # uvicorn +cloudpickle==3.0.0 + # via dask +colorama==0.4.6 + # via + # feast (setup.py) + # great-expectations +comm==0.2.1 + # via + # ipykernel + # ipywidgets +coverage[toml]==7.4.1 + # via + # coverage + # pytest-cov +cryptography==41.0.7 + # via + # azure-identity + # azure-storage-blob + # feast (setup.py) + # great-expectations + # moto + # msal + # pyjwt + # pyopenssl + # snowflake-connector-python + # types-pyopenssl + # types-redis +dask==2024.1.1 + # via feast (setup.py) +db-dtypes==1.2.0 + # via google-cloud-bigquery +debugpy==1.8.0 + # via ipykernel +decorator==5.1.1 + # via ipython +defusedxml==0.7.1 + # via nbconvert +deprecation==2.1.0 + # via testcontainers +dill==0.3.8 + # via + # bytewax + # feast (setup.py) + # multiprocess +distlib==0.3.8 + # via virtualenv +docker==7.0.0 + # via + # feast (setup.py) + # testcontainers +docutils==0.19 + # via sphinx +entrypoints==0.4 + # via altair +exceptiongroup==1.2.0 + # via + # anyio + # ipython + # pytest +execnet==2.0.2 + # via pytest-xdist +executing==2.0.1 + # via stack-data +fastapi==0.109.2 + # via feast (setup.py) +fastavro==1.9.3 + # via + # feast (setup.py) + # pandavro +fastjsonschema==2.19.1 + # via nbformat +filelock==3.13.1 + # via + # snowflake-connector-python + # virtualenv +firebase-admin==5.4.0 + # via feast (setup.py) +fissix==21.11.13 + # via bowler +flake8==6.0.0 + # via feast (setup.py) +fqdn==1.5.1 + # via jsonschema +fsspec==2023.9.2 + # via + # dask + # feast (setup.py) +geojson==2.5.0 + # via rockset +geomet==0.2.1.post1 + # via cassandra-driver +google-api-core[grpc]==2.16.2 + # via + # feast (setup.py) + # firebase-admin + # google-api-python-client + # google-cloud-bigquery + # google-cloud-bigquery-storage + # google-cloud-bigtable + # google-cloud-core + # google-cloud-datastore + # google-cloud-firestore + # google-cloud-storage +google-api-python-client==2.116.0 + # via firebase-admin +google-auth==2.27.0 + # via + # google-api-core + # google-api-python-client + # google-auth-httplib2 + # google-cloud-core + # google-cloud-storage + # kubernetes +google-auth-httplib2==0.2.0 + # via google-api-python-client +google-cloud-bigquery[pandas]==3.12.0 + # via + # feast (setup.py) + # google-cloud-bigquery +google-cloud-bigquery-storage==2.24.0 + # via feast (setup.py) +google-cloud-bigtable==2.23.0 + # via feast (setup.py) +google-cloud-core==2.4.1 + # via + # google-cloud-bigquery + # google-cloud-bigtable + # google-cloud-datastore + # google-cloud-firestore + # google-cloud-storage +google-cloud-datastore==2.19.0 + # via feast (setup.py) +google-cloud-firestore==2.14.0 + # via firebase-admin +google-cloud-storage==2.14.0 + # via + # feast (setup.py) + # firebase-admin +google-crc32c==1.5.0 + # via + # google-cloud-storage + # google-resumable-media +google-resumable-media==2.7.0 + # via + # google-cloud-bigquery + # google-cloud-storage +googleapis-common-protos[grpc]==1.62.0 + # via + # feast (setup.py) + # google-api-core + # grpc-google-iam-v1 + # grpcio-status +great-expectations==0.18.8 + # via feast (setup.py) +greenlet==3.0.3 + # via sqlalchemy +grpc-google-iam-v1==0.13.0 + # via google-cloud-bigtable +grpcio==1.60.1 + # via + # feast (setup.py) + # google-api-core + # google-cloud-bigquery + # googleapis-common-protos + # grpc-google-iam-v1 + # grpcio-health-checking + # grpcio-reflection + # grpcio-status + # grpcio-testing + # grpcio-tools +grpcio-health-checking==1.60.1 + # via feast (setup.py) +grpcio-reflection==1.60.1 + # via feast (setup.py) +grpcio-status==1.60.1 + # via google-api-core +grpcio-testing==1.60.1 + # via feast (setup.py) +grpcio-tools==1.60.1 + # via feast (setup.py) +gunicorn==21.2.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.2 + # via httpx +httplib2==0.22.0 + # via + # google-api-python-client + # google-auth-httplib2 +httptools==0.6.1 + # via uvicorn +httpx==0.26.0 + # via + # feast (setup.py) + # jupyterlab +identify==2.5.33 + # via pre-commit +idna==3.6 + # via + # anyio + # httpx + # jsonschema + # requests + # snowflake-connector-python +imagesize==1.4.1 + # via sphinx +importlib-metadata==6.11.0 + # via + # dask + # feast (setup.py) +importlib-resources==6.1.1 + # via feast (setup.py) +iniconfig==2.0.0 + # via pytest +ipykernel==6.29.2 + # via jupyterlab +ipython==8.21.0 + # via + # great-expectations + # ipykernel + # ipywidgets +ipywidgets==8.1.1 + # via great-expectations +isodate==0.6.1 + # via azure-storage-blob +isoduration==20.11.0 + # via jsonschema +isort==5.13.2 + # via feast (setup.py) +jedi==0.19.1 + # via ipython +jinja2==3.1.3 + # via + # altair + # feast (setup.py) + # great-expectations + # jupyter-server + # jupyterlab + # jupyterlab-server + # moto + # nbconvert + # sphinx +jmespath==1.0.1 + # via + # boto3 + # botocore +json5==0.9.14 + # via jupyterlab-server +jsonpatch==1.33 + # via great-expectations +jsonpointer==2.4 + # via + # jsonpatch + # jsonschema +jsonschema[format-nongpl]==4.21.1 + # via + # altair + # feast (setup.py) + # great-expectations + # jupyter-events + # jupyterlab-server + # nbformat +jsonschema-specifications==2023.12.1 + # via jsonschema +jupyter-client==8.6.0 + # via + # ipykernel + # jupyter-server + # nbclient +jupyter-core==5.7.1 + # via + # ipykernel + # jupyter-client + # jupyter-server + # jupyterlab + # nbclient + # nbconvert + # nbformat +jupyter-events==0.9.0 + # via jupyter-server +jupyter-lsp==2.2.2 + # via jupyterlab +jupyter-server==2.12.5 + # via + # jupyter-lsp + # jupyterlab + # jupyterlab-server + # notebook + # notebook-shim +jupyter-server-terminals==0.5.2 + # via jupyter-server +jupyterlab==4.1.0 + # via notebook +jupyterlab-pygments==0.3.0 + # via nbconvert +jupyterlab-server==2.25.2 + # via + # jupyterlab + # notebook +jupyterlab-widgets==3.0.9 + # via ipywidgets +kubernetes==20.13.0 + # via feast (setup.py) +locket==1.0.0 + # via partd +makefun==1.15.2 + # via great-expectations +markupsafe==2.1.5 + # via + # jinja2 + # nbconvert + # werkzeug +marshmallow==3.20.2 + # via great-expectations +matplotlib-inline==0.1.6 + # via + # ipykernel + # ipython +mccabe==0.7.0 + # via flake8 +minio==7.1.0 + # via feast (setup.py) +mistune==3.0.2 + # via + # great-expectations + # nbconvert +mmh3==4.1.0 + # via feast (setup.py) +mock==2.0.0 + # via feast (setup.py) +moreorless==0.4.0 + # via bowler +moto==4.2.14 + # via feast (setup.py) +msal==1.26.0 + # via + # azure-identity + # msal-extensions +msal-extensions==1.1.0 + # via azure-identity +msgpack==1.0.7 + # via cachecontrol +multiprocess==0.70.16 + # via bytewax +mypy==1.1.1 + # via + # feast (setup.py) + # sqlalchemy +mypy-extensions==1.0.0 + # via + # black + # mypy +mypy-protobuf==3.1.0 + # via feast (setup.py) +nbclient==0.9.0 + # via nbconvert +nbconvert==7.16.0 + # via jupyter-server +nbformat==5.9.2 + # via + # great-expectations + # jupyter-server + # nbclient + # nbconvert +nest-asyncio==1.6.0 + # via ipykernel +nodeenv==1.8.0 + # via pre-commit +notebook==7.0.7 + # via great-expectations +notebook-shim==0.2.3 + # via + # jupyterlab + # notebook +numpy==1.24.4 + # via + # altair + # db-dtypes + # feast (setup.py) + # great-expectations + # pandas + # pandavro + # pyarrow + # scipy +oauthlib==3.2.2 + # via requests-oauthlib +overrides==7.7.0 + # via jupyter-server +packaging==23.2 + # via + # build + # dask + # db-dtypes + # deprecation + # docker + # google-cloud-bigquery + # great-expectations + # gunicorn + # ipykernel + # jupyter-server + # jupyterlab + # jupyterlab-server + # marshmallow + # msal-extensions + # nbconvert + # pytest + # snowflake-connector-python + # sphinx +pandas==1.5.3 + # via + # altair + # db-dtypes + # feast (setup.py) + # google-cloud-bigquery + # great-expectations + # pandavro + # snowflake-connector-python +pandavro==1.5.2 + # via feast (setup.py) +pandocfilters==1.5.1 + # via nbconvert +parso==0.8.3 + # via jedi +partd==1.4.1 + # via dask +pathspec==0.12.1 + # via black +pbr==6.0.0 + # via mock +pexpect==4.9.0 + # via ipython +pip-tools==7.3.0 + # via feast (setup.py) +platformdirs==3.11.0 + # via + # black + # jupyter-core + # snowflake-connector-python + # virtualenv +pluggy==1.4.0 + # via pytest +ply==3.11 + # via thriftpy2 +portalocker==2.8.2 + # via msal-extensions +pre-commit==3.3.1 + # via feast (setup.py) +prometheus-client==0.19.0 + # via jupyter-server +prompt-toolkit==3.0.43 + # via ipython +proto-plus==1.23.0 + # via + # feast (setup.py) + # google-cloud-bigquery + # google-cloud-bigquery-storage + # google-cloud-bigtable + # google-cloud-datastore + # google-cloud-firestore +protobuf==4.23.3 + # via + # feast (setup.py) + # google-api-core + # google-cloud-bigquery + # google-cloud-bigquery-storage + # google-cloud-bigtable + # google-cloud-datastore + # google-cloud-firestore + # googleapis-common-protos + # grpc-google-iam-v1 + # grpcio-health-checking + # grpcio-reflection + # grpcio-status + # grpcio-testing + # grpcio-tools + # mypy-protobuf + # proto-plus +psutil==5.9.0 + # via + # feast (setup.py) + # ipykernel +psycopg2-binary==2.9.9 + # via feast (setup.py) +ptyprocess==0.7.0 + # via + # pexpect + # terminado +pure-eval==0.2.2 + # via stack-data +py==1.11.0 + # via feast (setup.py) +py-cpuinfo==9.0.0 + # via pytest-benchmark +py4j==0.10.9.7 + # via pyspark +pyarrow==15.0.0 + # via + # db-dtypes + # feast (setup.py) + # google-cloud-bigquery + # snowflake-connector-python +pyasn1==0.5.1 + # via + # pyasn1-modules + # rsa +pyasn1-modules==0.3.0 + # via google-auth +pybindgen==0.22.1 + # via feast (setup.py) +pycodestyle==2.10.0 + # via flake8 +pycparser==2.21 + # via cffi +pydantic==2.6.1 + # via + # fastapi + # feast (setup.py) + # great-expectations +pydantic-core==2.16.2 + # via pydantic +pyflakes==3.0.1 + # via flake8 +pygments==2.17.2 + # via + # feast (setup.py) + # ipython + # nbconvert + # sphinx +pyjwt[crypto]==2.8.0 + # via + # msal + # snowflake-connector-python +pymssql==2.2.11 + # via feast (setup.py) +pymysql==1.1.0 + # via feast (setup.py) +pyodbc==5.1.0 + # via feast (setup.py) +pyopenssl==23.3.0 + # via snowflake-connector-python +pyparsing==3.1.1 + # via + # great-expectations + # httplib2 +pyproject-hooks==1.0.0 + # via build +pyspark==3.5.0 + # via feast (setup.py) +pytest==7.4.4 + # via + # feast (setup.py) + # pytest-benchmark + # pytest-cov + # pytest-lazy-fixture + # pytest-mock + # pytest-ordering + # pytest-timeout + # pytest-xdist +pytest-benchmark==3.4.1 + # via feast (setup.py) +pytest-cov==4.1.0 + # 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.5.0 + # via feast (setup.py) +python-dateutil==2.8.2 + # via + # arrow + # botocore + # google-cloud-bigquery + # great-expectations + # jupyter-client + # kubernetes + # moto + # pandas + # rockset + # trino +python-dotenv==1.0.1 + # via uvicorn +python-json-logger==2.0.7 + # via jupyter-events +pytz==2024.1 + # via + # great-expectations + # pandas + # snowflake-connector-python + # trino +pyyaml==6.0.1 + # via + # dask + # feast (setup.py) + # jupyter-events + # kubernetes + # pre-commit + # responses + # uvicorn +pyzmq==25.1.2 + # via + # ipykernel + # jupyter-client + # jupyter-server +redis==4.6.0 + # via feast (setup.py) +referencing==0.33.0 + # via + # jsonschema + # jsonschema-specifications + # jupyter-events +regex==2023.12.25 + # via feast (setup.py) +requests==2.31.0 + # via + # azure-core + # cachecontrol + # docker + # feast (setup.py) + # google-api-core + # google-cloud-bigquery + # google-cloud-storage + # great-expectations + # jupyterlab-server + # kubernetes + # moto + # msal + # requests-oauthlib + # responses + # snowflake-connector-python + # sphinx + # trino +requests-oauthlib==1.3.1 + # via kubernetes +responses==0.24.1 + # via moto +rfc3339-validator==0.1.4 + # via + # jsonschema + # jupyter-events +rfc3986-validator==0.1.1 + # via + # jsonschema + # jupyter-events +rockset==2.1.0 + # via feast (setup.py) +rpds-py==0.17.1 + # via + # jsonschema + # referencing +rsa==4.9 + # via google-auth +ruamel-yaml==0.17.17 + # via great-expectations +s3transfer==0.10.0 + # via boto3 +scipy==1.12.0 + # via great-expectations +send2trash==1.8.2 + # via jupyter-server +six==1.16.0 + # via + # asttokens + # azure-core + # bleach + # geomet + # happybase + # isodate + # kubernetes + # mock + # pandavro + # python-dateutil + # rfc3339-validator + # thriftpy2 +sniffio==1.3.0 + # via + # anyio + # httpx +snowballstemmer==2.2.0 + # via sphinx +snowflake-connector-python[pandas]==3.7.0 + # via + # feast (setup.py) + # snowflake-connector-python +sortedcontainers==2.4.0 + # via snowflake-connector-python +soupsieve==2.5 + # via beautifulsoup4 +sphinx==6.2.1 + # via feast (setup.py) +sphinxcontrib-applehelp==1.0.8 + # via sphinx +sphinxcontrib-devhelp==1.0.6 + # via sphinx +sphinxcontrib-htmlhelp==2.0.5 + # via sphinx +sphinxcontrib-jsmath==1.0.1 + # via sphinx +sphinxcontrib-qthelp==1.0.7 + # via sphinx +sphinxcontrib-serializinghtml==1.1.10 + # via sphinx +sqlalchemy[mypy]==1.4.51 + # via + # feast (setup.py) + # sqlalchemy +sqlalchemy2-stubs==0.0.2a38 + # via sqlalchemy +stack-data==0.6.3 + # via ipython +starlette==0.36.3 + # via fastapi +tabulate==0.9.0 + # via feast (setup.py) +tenacity==8.2.3 + # via feast (setup.py) +terminado==0.18.0 + # via + # jupyter-server + # jupyter-server-terminals +testcontainers==3.7.1 + # via feast (setup.py) +thriftpy2==0.4.17 + # via happybase +tinycss2==1.2.1 + # via nbconvert +toml==0.10.2 + # via feast (setup.py) +tomli==2.0.1 + # via + # black + # build + # coverage + # jupyterlab + # mypy + # pip-tools + # pyproject-hooks + # pytest +tomlkit==0.12.3 + # via snowflake-connector-python +toolz==0.12.1 + # via + # altair + # dask + # partd +tornado==6.4 + # via + # ipykernel + # jupyter-client + # jupyter-server + # jupyterlab + # notebook + # terminado +tqdm==4.66.1 + # via + # feast (setup.py) + # great-expectations +traitlets==5.14.1 + # via + # comm + # ipykernel + # ipython + # ipywidgets + # jupyter-client + # jupyter-core + # jupyter-events + # jupyter-server + # jupyterlab + # matplotlib-inline + # nbclient + # nbconvert + # nbformat +trino==0.327.0 + # via feast (setup.py) +typeguard==2.13.3 + # via feast (setup.py) +types-protobuf==3.19.22 + # via + # feast (setup.py) + # mypy-protobuf +types-pymysql==1.1.0.1 + # via feast (setup.py) +types-pyopenssl==24.0.0.20240130 + # via types-redis +types-python-dateutil==2.8.19.20240106 + # via + # arrow + # feast (setup.py) +types-pytz==2024.1.0.20240203 + # via feast (setup.py) +types-pyyaml==6.0.12.12 + # via feast (setup.py) +types-redis==4.6.0.20240106 + # via feast (setup.py) +types-requests==2.30.0.0 + # via feast (setup.py) +types-setuptools==69.0.0.20240125 + # via feast (setup.py) +types-tabulate==0.9.0.20240106 + # via feast (setup.py) +types-urllib3==1.26.25.14 + # via types-requests +typing-extensions==4.9.0 + # via + # anyio + # async-lru + # azure-core + # azure-storage-blob + # fastapi + # great-expectations + # mypy + # pydantic + # pydantic-core + # snowflake-connector-python + # sqlalchemy2-stubs + # uvicorn +tzlocal==5.2 + # via + # great-expectations + # trino +uri-template==1.3.0 + # via jsonschema +uritemplate==4.1.1 + # via google-api-python-client +urllib3==1.26.18 + # via + # botocore + # docker + # feast (setup.py) + # great-expectations + # kubernetes + # minio + # requests + # responses + # rockset +uvicorn[standard]==0.27.0.post1 + # via + # feast (setup.py) + # uvicorn +uvloop==0.19.0 + # via uvicorn +virtualenv==20.23.0 + # via + # feast (setup.py) + # pre-commit +volatile==2.1.0 + # via bowler +watchfiles==0.21.0 + # via uvicorn +wcwidth==0.2.13 + # via prompt-toolkit +webcolors==1.13 + # via jsonschema +webencodings==0.5.1 + # via + # bleach + # tinycss2 +websocket-client==1.7.0 + # via + # jupyter-server + # kubernetes +websockets==12.0 + # via uvicorn +werkzeug==3.0.1 + # via moto +wheel==0.42.0 + # via pip-tools +widgetsnbextension==4.0.9 + # via ipywidgets +wrapt==1.16.0 + # via testcontainers +xmltodict==0.13.0 + # via moto +zipp==3.17.0 + # via importlib-metadata + +# The following packages are considered to be unsafe in a requirements file: +# pip +# setuptools diff --git a/sdk/python/requirements/py3.8-ci-requirements.txt b/sdk/python/requirements/py3.8-ci-requirements.txt new file mode 100644 index 0000000000..71af2a5922 --- /dev/null +++ b/sdk/python/requirements/py3.8-ci-requirements.txt @@ -0,0 +1,1036 @@ +# +# This file is autogenerated by pip-compile with Python 3.8 +# by the following command: +# +# pip-compile --extra=ci --output-file=sdk/python/requirements/py3.8-ci-requirements.txt +# +alabaster==0.7.13 + # via sphinx +altair==4.2.2 + # via great-expectations +annotated-types==0.6.0 + # via pydantic +anyio==4.2.0 + # via + # httpx + # jupyter-server + # starlette + # watchfiles +appdirs==1.4.4 + # via fissix +argon2-cffi==23.1.0 + # via jupyter-server +argon2-cffi-bindings==21.2.0 + # via argon2-cffi +arrow==1.3.0 + # via isoduration +asn1crypto==1.5.1 + # via snowflake-connector-python +assertpy==1.1 + # via feast (setup.py) +asttokens==2.4.1 + # via stack-data +async-lru==2.0.4 + # via jupyterlab +async-timeout==4.0.3 + # via redis +attrs==23.2.0 + # via + # bowler + # jsonschema + # referencing +avro==1.10.0 + # via feast (setup.py) +azure-core==1.30.0 + # via + # azure-identity + # azure-storage-blob +azure-identity==1.15.0 + # via feast (setup.py) +azure-storage-blob==12.19.0 + # via feast (setup.py) +babel==2.14.0 + # via + # jupyterlab-server + # sphinx +backcall==0.2.0 + # via ipython +backports-zoneinfo==0.2.1 + # via + # trino + # tzlocal +beautifulsoup4==4.12.3 + # via nbconvert +black==22.12.0 + # via feast (setup.py) +bleach==6.1.0 + # via nbconvert +boto3==1.34.37 + # via + # feast (setup.py) + # moto +botocore==1.34.37 + # via + # boto3 + # moto + # s3transfer +bowler==0.9.0 + # via feast (setup.py) +build==1.0.3 + # via + # feast (setup.py) + # pip-tools +bytewax==0.15.1 + # via feast (setup.py) +cachecontrol==0.14.0 + # via firebase-admin +cachetools==5.3.2 + # via google-auth +cassandra-driver==3.29.0 + # via feast (setup.py) +certifi==2024.2.2 + # via + # httpcore + # httpx + # kubernetes + # minio + # requests + # snowflake-connector-python +cffi==1.16.0 + # via + # argon2-cffi-bindings + # cryptography + # snowflake-connector-python +cfgv==3.4.0 + # via pre-commit +charset-normalizer==3.3.2 + # via + # requests + # snowflake-connector-python +click==8.1.7 + # via + # black + # bowler + # dask + # feast (setup.py) + # geomet + # great-expectations + # moreorless + # pip-tools + # uvicorn +cloudpickle==3.0.0 + # via dask +colorama==0.4.6 + # via + # feast (setup.py) + # great-expectations +comm==0.2.1 + # via + # ipykernel + # ipywidgets +coverage[toml]==7.4.1 + # via + # coverage + # pytest-cov +cryptography==41.0.7 + # via + # azure-identity + # azure-storage-blob + # feast (setup.py) + # great-expectations + # moto + # msal + # pyjwt + # pyopenssl + # snowflake-connector-python + # types-pyopenssl + # types-redis +dask==2023.5.0 + # via feast (setup.py) +db-dtypes==1.2.0 + # via google-cloud-bigquery +debugpy==1.8.0 + # via ipykernel +decorator==5.1.1 + # via ipython +defusedxml==0.7.1 + # via nbconvert +deprecation==2.1.0 + # via testcontainers +dill==0.3.8 + # via + # bytewax + # feast (setup.py) + # multiprocess +distlib==0.3.8 + # via virtualenv +docker==7.0.0 + # via + # feast (setup.py) + # testcontainers +docutils==0.19 + # via sphinx +entrypoints==0.4 + # via altair +exceptiongroup==1.2.0 + # via + # anyio + # pytest +execnet==2.0.2 + # via pytest-xdist +executing==2.0.1 + # via stack-data +fastapi==0.109.2 + # via feast (setup.py) +fastavro==1.9.3 + # via + # feast (setup.py) + # pandavro +fastjsonschema==2.19.1 + # via nbformat +filelock==3.13.1 + # via + # snowflake-connector-python + # virtualenv +firebase-admin==5.4.0 + # via feast (setup.py) +fissix==21.11.13 + # via bowler +flake8==6.0.0 + # via feast (setup.py) +fqdn==1.5.1 + # via jsonschema +fsspec==2023.9.2 + # via + # dask + # feast (setup.py) +geojson==2.5.0 + # via rockset +geomet==0.2.1.post1 + # via cassandra-driver +google-api-core[grpc]==2.16.2 + # via + # feast (setup.py) + # firebase-admin + # google-api-python-client + # google-cloud-bigquery + # google-cloud-bigquery-storage + # google-cloud-bigtable + # google-cloud-core + # google-cloud-datastore + # google-cloud-firestore + # google-cloud-storage +google-api-python-client==2.116.0 + # via firebase-admin +google-auth==2.27.0 + # via + # google-api-core + # google-api-python-client + # google-auth-httplib2 + # google-cloud-core + # google-cloud-storage + # kubernetes +google-auth-httplib2==0.2.0 + # via google-api-python-client +google-cloud-bigquery[pandas]==3.12.0 + # via + # feast (setup.py) + # google-cloud-bigquery +google-cloud-bigquery-storage==2.24.0 + # via feast (setup.py) +google-cloud-bigtable==2.23.0 + # via feast (setup.py) +google-cloud-core==2.4.1 + # via + # google-cloud-bigquery + # google-cloud-bigtable + # google-cloud-datastore + # google-cloud-firestore + # google-cloud-storage +google-cloud-datastore==2.19.0 + # via feast (setup.py) +google-cloud-firestore==2.14.0 + # via firebase-admin +google-cloud-storage==2.14.0 + # via + # feast (setup.py) + # firebase-admin +google-crc32c==1.5.0 + # via + # google-cloud-storage + # google-resumable-media +google-resumable-media==2.7.0 + # via + # google-cloud-bigquery + # google-cloud-storage +googleapis-common-protos[grpc]==1.62.0 + # via + # feast (setup.py) + # google-api-core + # grpc-google-iam-v1 + # grpcio-status +great-expectations==0.18.8 + # via feast (setup.py) +greenlet==3.0.3 + # via sqlalchemy +grpc-google-iam-v1==0.13.0 + # via google-cloud-bigtable +grpcio==1.60.1 + # via + # feast (setup.py) + # google-api-core + # google-cloud-bigquery + # googleapis-common-protos + # grpc-google-iam-v1 + # grpcio-health-checking + # grpcio-reflection + # grpcio-status + # grpcio-testing + # grpcio-tools +grpcio-health-checking==1.60.1 + # via feast (setup.py) +grpcio-reflection==1.60.1 + # via feast (setup.py) +grpcio-status==1.60.1 + # via google-api-core +grpcio-testing==1.60.1 + # via feast (setup.py) +grpcio-tools==1.60.1 + # via feast (setup.py) +gunicorn==21.2.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.2 + # via httpx +httplib2==0.22.0 + # via + # google-api-python-client + # google-auth-httplib2 +httptools==0.6.1 + # via uvicorn +httpx==0.26.0 + # via + # feast (setup.py) + # jupyterlab +identify==2.5.33 + # via pre-commit +idna==3.6 + # via + # anyio + # httpx + # jsonschema + # requests + # snowflake-connector-python +imagesize==1.4.1 + # via sphinx +importlib-metadata==6.11.0 + # via + # build + # dask + # feast (setup.py) + # jupyter-client + # jupyter-lsp + # jupyterlab + # jupyterlab-server + # nbconvert + # sphinx +importlib-resources==6.1.1 + # via + # feast (setup.py) + # jsonschema + # jsonschema-specifications + # jupyterlab +iniconfig==2.0.0 + # via pytest +ipykernel==6.29.2 + # via jupyterlab +ipython==8.12.3 + # via + # great-expectations + # ipykernel + # ipywidgets +ipywidgets==8.1.1 + # via great-expectations +isodate==0.6.1 + # via azure-storage-blob +isoduration==20.11.0 + # via jsonschema +isort==5.13.2 + # via feast (setup.py) +jedi==0.19.1 + # via ipython +jinja2==3.1.3 + # via + # altair + # feast (setup.py) + # great-expectations + # jupyter-server + # jupyterlab + # jupyterlab-server + # moto + # nbconvert + # sphinx +jmespath==1.0.1 + # via + # boto3 + # botocore +json5==0.9.14 + # via jupyterlab-server +jsonpatch==1.33 + # via great-expectations +jsonpointer==2.4 + # via + # jsonpatch + # jsonschema +jsonschema[format-nongpl]==4.21.1 + # via + # altair + # feast (setup.py) + # great-expectations + # jupyter-events + # jupyterlab-server + # nbformat +jsonschema-specifications==2023.12.1 + # via jsonschema +jupyter-client==8.6.0 + # via + # ipykernel + # jupyter-server + # nbclient +jupyter-core==5.7.1 + # via + # ipykernel + # jupyter-client + # jupyter-server + # jupyterlab + # nbclient + # nbconvert + # nbformat +jupyter-events==0.9.0 + # via jupyter-server +jupyter-lsp==2.2.2 + # via jupyterlab +jupyter-server==2.12.5 + # via + # jupyter-lsp + # jupyterlab + # jupyterlab-server + # notebook + # notebook-shim +jupyter-server-terminals==0.5.2 + # via jupyter-server +jupyterlab==4.1.0 + # via notebook +jupyterlab-pygments==0.3.0 + # via nbconvert +jupyterlab-server==2.25.2 + # via + # jupyterlab + # notebook +jupyterlab-widgets==3.0.9 + # via ipywidgets +kubernetes==20.13.0 + # via feast (setup.py) +locket==1.0.0 + # via partd +makefun==1.15.2 + # via great-expectations +markupsafe==2.1.5 + # via + # jinja2 + # nbconvert + # werkzeug +marshmallow==3.20.2 + # via great-expectations +matplotlib-inline==0.1.6 + # via + # ipykernel + # ipython +mccabe==0.7.0 + # via flake8 +minio==7.1.0 + # via feast (setup.py) +mistune==3.0.2 + # via + # great-expectations + # nbconvert +mmh3==4.1.0 + # via feast (setup.py) +mock==2.0.0 + # via feast (setup.py) +moreorless==0.4.0 + # via bowler +moto==4.2.14 + # via feast (setup.py) +msal==1.26.0 + # via + # azure-identity + # msal-extensions +msal-extensions==1.1.0 + # via azure-identity +msgpack==1.0.7 + # via cachecontrol +multiprocess==0.70.16 + # via bytewax +mypy==1.1.1 + # via + # feast (setup.py) + # sqlalchemy +mypy-extensions==1.0.0 + # via + # black + # mypy +mypy-protobuf==3.1.0 + # via feast (setup.py) +nbclient==0.9.0 + # via nbconvert +nbconvert==7.16.0 + # via jupyter-server +nbformat==5.9.2 + # via + # great-expectations + # jupyter-server + # nbclient + # nbconvert +nest-asyncio==1.6.0 + # via ipykernel +nodeenv==1.8.0 + # via pre-commit +notebook==7.0.7 + # via great-expectations +notebook-shim==0.2.3 + # via + # jupyterlab + # notebook +numpy==1.24.4 + # via + # altair + # db-dtypes + # feast (setup.py) + # great-expectations + # pandas + # pandavro + # pyarrow + # scipy +oauthlib==3.2.2 + # via requests-oauthlib +overrides==7.7.0 + # via jupyter-server +packaging==23.2 + # via + # build + # dask + # db-dtypes + # deprecation + # docker + # google-cloud-bigquery + # great-expectations + # gunicorn + # ipykernel + # jupyter-server + # jupyterlab + # jupyterlab-server + # marshmallow + # msal-extensions + # nbconvert + # pytest + # snowflake-connector-python + # sphinx +pandas==1.5.3 + # via + # altair + # db-dtypes + # feast (setup.py) + # google-cloud-bigquery + # great-expectations + # pandavro + # snowflake-connector-python +pandavro==1.5.2 + # via feast (setup.py) +pandocfilters==1.5.1 + # via nbconvert +parso==0.8.3 + # via jedi +partd==1.4.1 + # via dask +pathspec==0.12.1 + # via black +pbr==6.0.0 + # via mock +pexpect==4.9.0 + # via ipython +pickleshare==0.7.5 + # via ipython +pip-tools==7.3.0 + # via feast (setup.py) +pkgutil-resolve-name==1.3.10 + # via jsonschema +platformdirs==3.11.0 + # via + # black + # jupyter-core + # snowflake-connector-python + # virtualenv +pluggy==1.4.0 + # via pytest +ply==3.11 + # via thriftpy2 +portalocker==2.8.2 + # via msal-extensions +pre-commit==3.3.1 + # via feast (setup.py) +prometheus-client==0.19.0 + # via jupyter-server +prompt-toolkit==3.0.43 + # via ipython +proto-plus==1.23.0 + # via + # feast (setup.py) + # google-cloud-bigquery + # google-cloud-bigquery-storage + # google-cloud-bigtable + # google-cloud-datastore + # google-cloud-firestore +protobuf==4.23.3 + # via + # feast (setup.py) + # google-api-core + # google-cloud-bigquery + # google-cloud-bigquery-storage + # google-cloud-bigtable + # google-cloud-datastore + # google-cloud-firestore + # googleapis-common-protos + # grpc-google-iam-v1 + # grpcio-health-checking + # grpcio-reflection + # grpcio-status + # grpcio-testing + # grpcio-tools + # mypy-protobuf + # proto-plus +psutil==5.9.0 + # via + # feast (setup.py) + # ipykernel +psycopg2-binary==2.9.9 + # via feast (setup.py) +ptyprocess==0.7.0 + # via + # pexpect + # terminado +pure-eval==0.2.2 + # via stack-data +py==1.11.0 + # via feast (setup.py) +py-cpuinfo==9.0.0 + # via pytest-benchmark +py4j==0.10.9.7 + # via pyspark +pyarrow==15.0.0 + # via + # db-dtypes + # feast (setup.py) + # google-cloud-bigquery + # snowflake-connector-python +pyasn1==0.5.1 + # via + # pyasn1-modules + # rsa +pyasn1-modules==0.3.0 + # via google-auth +pybindgen==0.22.1 + # via feast (setup.py) +pycodestyle==2.10.0 + # via flake8 +pycparser==2.21 + # via cffi +pydantic==2.6.1 + # via + # fastapi + # feast (setup.py) + # great-expectations +pydantic-core==2.16.2 + # via pydantic +pyflakes==3.0.1 + # via flake8 +pygments==2.17.2 + # via + # feast (setup.py) + # ipython + # nbconvert + # sphinx +pyjwt[crypto]==2.8.0 + # via + # msal + # snowflake-connector-python +pymssql==2.2.11 + # via feast (setup.py) +pymysql==1.1.0 + # via feast (setup.py) +pyodbc==5.1.0 + # via feast (setup.py) +pyopenssl==23.3.0 + # via snowflake-connector-python +pyparsing==3.1.1 + # via + # great-expectations + # httplib2 +pyproject-hooks==1.0.0 + # via build +pyspark==3.5.0 + # via feast (setup.py) +pytest==7.4.4 + # via + # feast (setup.py) + # pytest-benchmark + # pytest-cov + # pytest-lazy-fixture + # pytest-mock + # pytest-ordering + # pytest-timeout + # pytest-xdist +pytest-benchmark==3.4.1 + # via feast (setup.py) +pytest-cov==4.1.0 + # 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.5.0 + # via feast (setup.py) +python-dateutil==2.8.2 + # via + # arrow + # botocore + # google-cloud-bigquery + # great-expectations + # jupyter-client + # kubernetes + # moto + # pandas + # rockset + # trino +python-dotenv==1.0.1 + # via uvicorn +python-json-logger==2.0.7 + # via jupyter-events +pytz==2024.1 + # via + # babel + # great-expectations + # pandas + # snowflake-connector-python + # trino +pyyaml==6.0.1 + # via + # dask + # feast (setup.py) + # jupyter-events + # kubernetes + # pre-commit + # responses + # uvicorn +pyzmq==25.1.2 + # via + # ipykernel + # jupyter-client + # jupyter-server +redis==4.6.0 + # via feast (setup.py) +referencing==0.33.0 + # via + # jsonschema + # jsonschema-specifications + # jupyter-events +regex==2023.12.25 + # via feast (setup.py) +requests==2.31.0 + # via + # azure-core + # cachecontrol + # docker + # feast (setup.py) + # google-api-core + # google-cloud-bigquery + # google-cloud-storage + # great-expectations + # jupyterlab-server + # kubernetes + # moto + # msal + # requests-oauthlib + # responses + # snowflake-connector-python + # sphinx + # trino +requests-oauthlib==1.3.1 + # via kubernetes +responses==0.24.1 + # via moto +rfc3339-validator==0.1.4 + # via + # jsonschema + # jupyter-events +rfc3986-validator==0.1.1 + # via + # jsonschema + # jupyter-events +rockset==2.1.0 + # via feast (setup.py) +rpds-py==0.17.1 + # via + # jsonschema + # referencing +rsa==4.9 + # via google-auth +ruamel-yaml==0.17.17 + # via great-expectations +ruamel-yaml-clib==0.2.8 + # via ruamel-yaml +s3transfer==0.10.0 + # via boto3 +scipy==1.10.1 + # via great-expectations +send2trash==1.8.2 + # via jupyter-server +six==1.16.0 + # via + # asttokens + # azure-core + # bleach + # geomet + # happybase + # isodate + # kubernetes + # mock + # pandavro + # python-dateutil + # rfc3339-validator + # thriftpy2 +sniffio==1.3.0 + # via + # anyio + # httpx +snowballstemmer==2.2.0 + # via sphinx +snowflake-connector-python[pandas]==3.7.0 + # via + # feast (setup.py) + # snowflake-connector-python +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.4 + # via sphinx +sphinxcontrib-devhelp==1.0.2 + # via sphinx +sphinxcontrib-htmlhelp==2.0.1 + # via sphinx +sphinxcontrib-jsmath==1.0.1 + # via sphinx +sphinxcontrib-qthelp==1.0.3 + # via sphinx +sphinxcontrib-serializinghtml==1.1.5 + # via sphinx +sqlalchemy[mypy]==1.4.51 + # via + # feast (setup.py) + # sqlalchemy +sqlalchemy2-stubs==0.0.2a38 + # via sqlalchemy +stack-data==0.6.3 + # via ipython +starlette==0.36.3 + # via fastapi +tabulate==0.9.0 + # via feast (setup.py) +tenacity==8.2.3 + # via feast (setup.py) +terminado==0.18.0 + # via + # jupyter-server + # jupyter-server-terminals +testcontainers==3.7.1 + # via feast (setup.py) +thriftpy2==0.4.17 + # via happybase +tinycss2==1.2.1 + # via nbconvert +toml==0.10.2 + # via feast (setup.py) +tomli==2.0.1 + # via + # black + # build + # coverage + # jupyterlab + # mypy + # pip-tools + # pyproject-hooks + # pytest +tomlkit==0.12.3 + # via snowflake-connector-python +toolz==0.12.1 + # via + # altair + # dask + # partd +tornado==6.4 + # via + # ipykernel + # jupyter-client + # jupyter-server + # jupyterlab + # notebook + # terminado +tqdm==4.66.1 + # via + # feast (setup.py) + # great-expectations +traitlets==5.14.1 + # via + # comm + # ipykernel + # ipython + # ipywidgets + # jupyter-client + # jupyter-core + # jupyter-events + # jupyter-server + # jupyterlab + # matplotlib-inline + # nbclient + # nbconvert + # nbformat +trino==0.327.0 + # via feast (setup.py) +typeguard==2.13.3 + # via feast (setup.py) +types-protobuf==3.19.22 + # via + # feast (setup.py) + # mypy-protobuf +types-pymysql==1.1.0.1 + # via feast (setup.py) +types-pyopenssl==24.0.0.20240130 + # via types-redis +types-python-dateutil==2.8.19.20240106 + # via + # arrow + # feast (setup.py) +types-pytz==2024.1.0.20240203 + # via feast (setup.py) +types-pyyaml==6.0.12.12 + # via feast (setup.py) +types-redis==4.6.0.20240106 + # via feast (setup.py) +types-requests==2.30.0.0 + # via feast (setup.py) +types-setuptools==69.0.0.20240125 + # via feast (setup.py) +types-tabulate==0.9.0.20240106 + # via feast (setup.py) +types-urllib3==1.26.25.14 + # via types-requests +typing-extensions==4.9.0 + # via + # annotated-types + # anyio + # async-lru + # azure-core + # azure-storage-blob + # black + # fastapi + # great-expectations + # ipython + # mypy + # pydantic + # pydantic-core + # snowflake-connector-python + # sqlalchemy2-stubs + # starlette + # uvicorn +tzlocal==5.2 + # via + # great-expectations + # trino +uri-template==1.3.0 + # via jsonschema +uritemplate==4.1.1 + # via google-api-python-client +urllib3==1.26.18 + # via + # botocore + # docker + # feast (setup.py) + # great-expectations + # kubernetes + # minio + # requests + # responses + # rockset + # snowflake-connector-python +uvicorn[standard]==0.27.0.post1 + # via + # feast (setup.py) + # uvicorn +uvloop==0.19.0 + # via uvicorn +virtualenv==20.23.0 + # via + # feast (setup.py) + # pre-commit +volatile==2.1.0 + # via bowler +watchfiles==0.21.0 + # via uvicorn +wcwidth==0.2.13 + # via prompt-toolkit +webcolors==1.13 + # via jsonschema +webencodings==0.5.1 + # via + # bleach + # tinycss2 +websocket-client==1.7.0 + # via + # jupyter-server + # kubernetes +websockets==12.0 + # via uvicorn +werkzeug==3.0.1 + # via moto +wheel==0.42.0 + # via pip-tools +widgetsnbextension==4.0.9 + # via ipywidgets +wrapt==1.16.0 + # via testcontainers +xmltodict==0.13.0 + # via moto +zipp==3.17.0 + # via + # importlib-metadata + # importlib-resources + +# The following packages are considered to be unsafe in a requirements file: +# pip +# setuptools diff --git a/sdk/python/requirements/py3.9-ci-requirements.txt b/sdk/python/requirements/py3.9-ci-requirements.txt new file mode 100644 index 0000000000..ff66817aa1 --- /dev/null +++ b/sdk/python/requirements/py3.9-ci-requirements.txt @@ -0,0 +1,1021 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --extra=ci --output-file=sdk/python/requirements/py3.9-ci-requirements.txt +# +alabaster==0.7.16 + # via sphinx +altair==4.2.2 + # via great-expectations +annotated-types==0.6.0 + # via pydantic +anyio==4.2.0 + # via + # httpx + # jupyter-server + # starlette + # watchfiles +appdirs==1.4.4 + # via fissix +argon2-cffi==23.1.0 + # via jupyter-server +argon2-cffi-bindings==21.2.0 + # via argon2-cffi +arrow==1.3.0 + # via isoduration +asn1crypto==1.5.1 + # via snowflake-connector-python +assertpy==1.1 + # via feast (setup.py) +asttokens==2.4.1 + # via stack-data +async-lru==2.0.4 + # via jupyterlab +async-timeout==4.0.3 + # via redis +attrs==23.2.0 + # via + # bowler + # jsonschema + # referencing +avro==1.10.0 + # via feast (setup.py) +azure-core==1.30.0 + # via + # azure-identity + # azure-storage-blob +azure-identity==1.15.0 + # via feast (setup.py) +azure-storage-blob==12.19.0 + # via feast (setup.py) +babel==2.14.0 + # via + # jupyterlab-server + # sphinx +beautifulsoup4==4.12.3 + # via nbconvert +black==22.12.0 + # via feast (setup.py) +bleach==6.1.0 + # via nbconvert +boto3==1.34.37 + # via + # feast (setup.py) + # moto +botocore==1.34.37 + # via + # boto3 + # moto + # s3transfer +bowler==0.9.0 + # via feast (setup.py) +build==1.0.3 + # via + # feast (setup.py) + # pip-tools +bytewax==0.15.1 + # via feast (setup.py) +cachecontrol==0.14.0 + # via firebase-admin +cachetools==5.3.2 + # via google-auth +cassandra-driver==3.29.0 + # via feast (setup.py) +certifi==2024.2.2 + # via + # httpcore + # httpx + # kubernetes + # minio + # requests + # snowflake-connector-python +cffi==1.16.0 + # via + # argon2-cffi-bindings + # cryptography + # snowflake-connector-python +cfgv==3.4.0 + # via pre-commit +charset-normalizer==3.3.2 + # via + # requests + # snowflake-connector-python +click==8.1.7 + # via + # black + # bowler + # dask + # feast (setup.py) + # geomet + # great-expectations + # moreorless + # pip-tools + # uvicorn +cloudpickle==3.0.0 + # via dask +colorama==0.4.6 + # via + # feast (setup.py) + # great-expectations +comm==0.2.1 + # via + # ipykernel + # ipywidgets +coverage[toml]==7.4.1 + # via + # coverage + # pytest-cov +cryptography==41.0.7 + # via + # azure-identity + # azure-storage-blob + # feast (setup.py) + # great-expectations + # moto + # msal + # pyjwt + # pyopenssl + # snowflake-connector-python + # types-pyopenssl + # types-redis +dask==2024.1.1 + # via feast (setup.py) +db-dtypes==1.2.0 + # via google-cloud-bigquery +debugpy==1.8.0 + # via ipykernel +decorator==5.1.1 + # via ipython +defusedxml==0.7.1 + # via nbconvert +deprecation==2.1.0 + # via testcontainers +dill==0.3.8 + # via + # bytewax + # feast (setup.py) + # multiprocess +distlib==0.3.8 + # via virtualenv +docker==7.0.0 + # via + # feast (setup.py) + # testcontainers +docutils==0.19 + # via sphinx +entrypoints==0.4 + # via altair +exceptiongroup==1.2.0 + # via + # anyio + # ipython + # pytest +execnet==2.0.2 + # via pytest-xdist +executing==2.0.1 + # via stack-data +fastapi==0.109.2 + # via feast (setup.py) +fastavro==1.9.3 + # via + # feast (setup.py) + # pandavro +fastjsonschema==2.19.1 + # via nbformat +filelock==3.13.1 + # via + # snowflake-connector-python + # virtualenv +firebase-admin==5.4.0 + # via feast (setup.py) +fissix==21.11.13 + # via bowler +flake8==6.0.0 + # via feast (setup.py) +fqdn==1.5.1 + # via jsonschema +fsspec==2023.9.2 + # via + # dask + # feast (setup.py) +geojson==2.5.0 + # via rockset +geomet==0.2.1.post1 + # via cassandra-driver +google-api-core[grpc]==2.16.2 + # via + # feast (setup.py) + # firebase-admin + # google-api-python-client + # google-cloud-bigquery + # google-cloud-bigquery-storage + # google-cloud-bigtable + # google-cloud-core + # google-cloud-datastore + # google-cloud-firestore + # google-cloud-storage +google-api-python-client==2.116.0 + # via firebase-admin +google-auth==2.27.0 + # via + # google-api-core + # google-api-python-client + # google-auth-httplib2 + # google-cloud-core + # google-cloud-storage + # kubernetes +google-auth-httplib2==0.2.0 + # via google-api-python-client +google-cloud-bigquery[pandas]==3.12.0 + # via + # feast (setup.py) + # google-cloud-bigquery +google-cloud-bigquery-storage==2.24.0 + # via feast (setup.py) +google-cloud-bigtable==2.23.0 + # via feast (setup.py) +google-cloud-core==2.4.1 + # via + # google-cloud-bigquery + # google-cloud-bigtable + # google-cloud-datastore + # google-cloud-firestore + # google-cloud-storage +google-cloud-datastore==2.19.0 + # via feast (setup.py) +google-cloud-firestore==2.14.0 + # via firebase-admin +google-cloud-storage==2.14.0 + # via + # feast (setup.py) + # firebase-admin +google-crc32c==1.5.0 + # via + # google-cloud-storage + # google-resumable-media +google-resumable-media==2.7.0 + # via + # google-cloud-bigquery + # google-cloud-storage +googleapis-common-protos[grpc]==1.62.0 + # via + # feast (setup.py) + # google-api-core + # grpc-google-iam-v1 + # grpcio-status +great-expectations==0.18.8 + # via feast (setup.py) +greenlet==3.0.3 + # via sqlalchemy +grpc-google-iam-v1==0.13.0 + # via google-cloud-bigtable +grpcio==1.60.1 + # via + # feast (setup.py) + # google-api-core + # google-cloud-bigquery + # googleapis-common-protos + # grpc-google-iam-v1 + # grpcio-health-checking + # grpcio-reflection + # grpcio-status + # grpcio-testing + # grpcio-tools +grpcio-health-checking==1.60.1 + # via feast (setup.py) +grpcio-reflection==1.60.1 + # via feast (setup.py) +grpcio-status==1.60.1 + # via google-api-core +grpcio-testing==1.60.1 + # via feast (setup.py) +grpcio-tools==1.60.1 + # via feast (setup.py) +gunicorn==21.2.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.2 + # via httpx +httplib2==0.22.0 + # via + # google-api-python-client + # google-auth-httplib2 +httptools==0.6.1 + # via uvicorn +httpx==0.26.0 + # via + # feast (setup.py) + # jupyterlab +identify==2.5.33 + # via pre-commit +idna==3.6 + # via + # anyio + # httpx + # jsonschema + # requests + # snowflake-connector-python +imagesize==1.4.1 + # via sphinx +importlib-metadata==6.11.0 + # via + # build + # dask + # feast (setup.py) + # jupyter-client + # jupyter-lsp + # jupyterlab + # jupyterlab-server + # nbconvert + # sphinx +importlib-resources==6.1.1 + # via feast (setup.py) +iniconfig==2.0.0 + # via pytest +ipykernel==6.29.2 + # via jupyterlab +ipython==8.18.1 + # via + # great-expectations + # ipykernel + # ipywidgets +ipywidgets==8.1.1 + # via great-expectations +isodate==0.6.1 + # via azure-storage-blob +isoduration==20.11.0 + # via jsonschema +isort==5.13.2 + # via feast (setup.py) +jedi==0.19.1 + # via ipython +jinja2==3.1.3 + # via + # altair + # feast (setup.py) + # great-expectations + # jupyter-server + # jupyterlab + # jupyterlab-server + # moto + # nbconvert + # sphinx +jmespath==1.0.1 + # via + # boto3 + # botocore +json5==0.9.14 + # via jupyterlab-server +jsonpatch==1.33 + # via great-expectations +jsonpointer==2.4 + # via + # jsonpatch + # jsonschema +jsonschema[format-nongpl]==4.21.1 + # via + # altair + # feast (setup.py) + # great-expectations + # jupyter-events + # jupyterlab-server + # nbformat +jsonschema-specifications==2023.12.1 + # via jsonschema +jupyter-client==8.6.0 + # via + # ipykernel + # jupyter-server + # nbclient +jupyter-core==5.7.1 + # via + # ipykernel + # jupyter-client + # jupyter-server + # jupyterlab + # nbclient + # nbconvert + # nbformat +jupyter-events==0.9.0 + # via jupyter-server +jupyter-lsp==2.2.2 + # via jupyterlab +jupyter-server==2.12.5 + # via + # jupyter-lsp + # jupyterlab + # jupyterlab-server + # notebook + # notebook-shim +jupyter-server-terminals==0.5.2 + # via jupyter-server +jupyterlab==4.1.0 + # via notebook +jupyterlab-pygments==0.3.0 + # via nbconvert +jupyterlab-server==2.25.2 + # via + # jupyterlab + # notebook +jupyterlab-widgets==3.0.9 + # via ipywidgets +kubernetes==20.13.0 + # via feast (setup.py) +locket==1.0.0 + # via partd +makefun==1.15.2 + # via great-expectations +markupsafe==2.1.5 + # via + # jinja2 + # nbconvert + # werkzeug +marshmallow==3.20.2 + # via great-expectations +matplotlib-inline==0.1.6 + # via + # ipykernel + # ipython +mccabe==0.7.0 + # via flake8 +minio==7.1.0 + # via feast (setup.py) +mistune==3.0.2 + # via + # great-expectations + # nbconvert +mmh3==4.1.0 + # via feast (setup.py) +mock==2.0.0 + # via feast (setup.py) +moreorless==0.4.0 + # via bowler +moto==4.2.14 + # via feast (setup.py) +msal==1.26.0 + # via + # azure-identity + # msal-extensions +msal-extensions==1.1.0 + # via azure-identity +msgpack==1.0.7 + # via cachecontrol +multiprocess==0.70.16 + # via bytewax +mypy==1.1.1 + # via + # feast (setup.py) + # sqlalchemy +mypy-extensions==1.0.0 + # via + # black + # mypy +mypy-protobuf==3.1.0 + # via feast (setup.py) +nbclient==0.9.0 + # via nbconvert +nbconvert==7.16.0 + # via jupyter-server +nbformat==5.9.2 + # via + # great-expectations + # jupyter-server + # nbclient + # nbconvert +nest-asyncio==1.6.0 + # via ipykernel +nodeenv==1.8.0 + # via pre-commit +notebook==7.0.7 + # via great-expectations +notebook-shim==0.2.3 + # via + # jupyterlab + # notebook +numpy==1.24.4 + # via + # altair + # db-dtypes + # feast (setup.py) + # great-expectations + # pandas + # pandavro + # pyarrow + # scipy +oauthlib==3.2.2 + # via requests-oauthlib +overrides==7.7.0 + # via jupyter-server +packaging==23.2 + # via + # build + # dask + # db-dtypes + # deprecation + # docker + # google-cloud-bigquery + # great-expectations + # gunicorn + # ipykernel + # jupyter-server + # jupyterlab + # jupyterlab-server + # marshmallow + # msal-extensions + # nbconvert + # pytest + # snowflake-connector-python + # sphinx +pandas==1.5.3 + # via + # altair + # db-dtypes + # feast (setup.py) + # google-cloud-bigquery + # great-expectations + # pandavro + # snowflake-connector-python +pandavro==1.5.2 + # via feast (setup.py) +pandocfilters==1.5.1 + # via nbconvert +parso==0.8.3 + # via jedi +partd==1.4.1 + # via dask +pathspec==0.12.1 + # via black +pbr==6.0.0 + # via mock +pexpect==4.9.0 + # via ipython +pip-tools==7.3.0 + # via feast (setup.py) +platformdirs==3.11.0 + # via + # black + # jupyter-core + # snowflake-connector-python + # virtualenv +pluggy==1.4.0 + # via pytest +ply==3.11 + # via thriftpy2 +portalocker==2.8.2 + # via msal-extensions +pre-commit==3.3.1 + # via feast (setup.py) +prometheus-client==0.19.0 + # via jupyter-server +prompt-toolkit==3.0.43 + # via ipython +proto-plus==1.23.0 + # via + # feast (setup.py) + # google-cloud-bigquery + # google-cloud-bigquery-storage + # google-cloud-bigtable + # google-cloud-datastore + # google-cloud-firestore +protobuf==4.23.3 + # via + # feast (setup.py) + # google-api-core + # google-cloud-bigquery + # google-cloud-bigquery-storage + # google-cloud-bigtable + # google-cloud-datastore + # google-cloud-firestore + # googleapis-common-protos + # grpc-google-iam-v1 + # grpcio-health-checking + # grpcio-reflection + # grpcio-status + # grpcio-testing + # grpcio-tools + # mypy-protobuf + # proto-plus +psutil==5.9.0 + # via + # feast (setup.py) + # ipykernel +psycopg2-binary==2.9.9 + # via feast (setup.py) +ptyprocess==0.7.0 + # via + # pexpect + # terminado +pure-eval==0.2.2 + # via stack-data +py==1.11.0 + # via feast (setup.py) +py-cpuinfo==9.0.0 + # via pytest-benchmark +py4j==0.10.9.7 + # via pyspark +pyarrow==15.0.0 + # via + # db-dtypes + # feast (setup.py) + # google-cloud-bigquery + # snowflake-connector-python +pyasn1==0.5.1 + # via + # pyasn1-modules + # rsa +pyasn1-modules==0.3.0 + # via google-auth +pybindgen==0.22.1 + # via feast (setup.py) +pycodestyle==2.10.0 + # via flake8 +pycparser==2.21 + # via cffi +pydantic==2.6.1 + # via + # fastapi + # feast (setup.py) + # great-expectations +pydantic-core==2.16.2 + # via pydantic +pyflakes==3.0.1 + # via flake8 +pygments==2.17.2 + # via + # feast (setup.py) + # ipython + # nbconvert + # sphinx +pyjwt[crypto]==2.8.0 + # via + # msal + # snowflake-connector-python +pymssql==2.2.11 + # via feast (setup.py) +pymysql==1.1.0 + # via feast (setup.py) +pyodbc==5.1.0 + # via feast (setup.py) +pyopenssl==23.3.0 + # via snowflake-connector-python +pyparsing==3.1.1 + # via + # great-expectations + # httplib2 +pyproject-hooks==1.0.0 + # via build +pyspark==3.5.0 + # via feast (setup.py) +pytest==7.4.4 + # via + # feast (setup.py) + # pytest-benchmark + # pytest-cov + # pytest-lazy-fixture + # pytest-mock + # pytest-ordering + # pytest-timeout + # pytest-xdist +pytest-benchmark==3.4.1 + # via feast (setup.py) +pytest-cov==4.1.0 + # 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.5.0 + # via feast (setup.py) +python-dateutil==2.8.2 + # via + # arrow + # botocore + # google-cloud-bigquery + # great-expectations + # jupyter-client + # kubernetes + # moto + # pandas + # rockset + # trino +python-dotenv==1.0.1 + # via uvicorn +python-json-logger==2.0.7 + # via jupyter-events +pytz==2024.1 + # via + # great-expectations + # pandas + # snowflake-connector-python + # trino +pyyaml==6.0.1 + # via + # dask + # feast (setup.py) + # jupyter-events + # kubernetes + # pre-commit + # responses + # uvicorn +pyzmq==25.1.2 + # via + # ipykernel + # jupyter-client + # jupyter-server +redis==4.6.0 + # via feast (setup.py) +referencing==0.33.0 + # via + # jsonschema + # jsonschema-specifications + # jupyter-events +regex==2023.12.25 + # via feast (setup.py) +requests==2.31.0 + # via + # azure-core + # cachecontrol + # docker + # feast (setup.py) + # google-api-core + # google-cloud-bigquery + # google-cloud-storage + # great-expectations + # jupyterlab-server + # kubernetes + # moto + # msal + # requests-oauthlib + # responses + # snowflake-connector-python + # sphinx + # trino +requests-oauthlib==1.3.1 + # via kubernetes +responses==0.24.1 + # via moto +rfc3339-validator==0.1.4 + # via + # jsonschema + # jupyter-events +rfc3986-validator==0.1.1 + # via + # jsonschema + # jupyter-events +rockset==2.1.0 + # via feast (setup.py) +rpds-py==0.17.1 + # via + # jsonschema + # referencing +rsa==4.9 + # via google-auth +ruamel-yaml==0.17.17 + # via great-expectations +ruamel-yaml-clib==0.2.8 + # via ruamel-yaml +s3transfer==0.10.0 + # via boto3 +scipy==1.12.0 + # via great-expectations +send2trash==1.8.2 + # via jupyter-server +six==1.16.0 + # via + # asttokens + # azure-core + # bleach + # geomet + # happybase + # isodate + # kubernetes + # mock + # pandavro + # python-dateutil + # rfc3339-validator + # thriftpy2 +sniffio==1.3.0 + # via + # anyio + # httpx +snowballstemmer==2.2.0 + # via sphinx +snowflake-connector-python[pandas]==3.7.0 + # via + # feast (setup.py) + # snowflake-connector-python +sortedcontainers==2.4.0 + # via snowflake-connector-python +soupsieve==2.5 + # via beautifulsoup4 +sphinx==6.2.1 + # via feast (setup.py) +sphinxcontrib-applehelp==1.0.8 + # via sphinx +sphinxcontrib-devhelp==1.0.6 + # via sphinx +sphinxcontrib-htmlhelp==2.0.5 + # via sphinx +sphinxcontrib-jsmath==1.0.1 + # via sphinx +sphinxcontrib-qthelp==1.0.7 + # via sphinx +sphinxcontrib-serializinghtml==1.1.10 + # via sphinx +sqlalchemy[mypy]==1.4.51 + # via + # feast (setup.py) + # sqlalchemy +sqlalchemy2-stubs==0.0.2a38 + # via sqlalchemy +stack-data==0.6.3 + # via ipython +starlette==0.36.3 + # via fastapi +tabulate==0.9.0 + # via feast (setup.py) +tenacity==8.2.3 + # via feast (setup.py) +terminado==0.18.0 + # via + # jupyter-server + # jupyter-server-terminals +testcontainers==3.7.1 + # via feast (setup.py) +thriftpy2==0.4.17 + # via happybase +tinycss2==1.2.1 + # via nbconvert +toml==0.10.2 + # via feast (setup.py) +tomli==2.0.1 + # via + # black + # build + # coverage + # jupyterlab + # mypy + # pip-tools + # pyproject-hooks + # pytest +tomlkit==0.12.3 + # via snowflake-connector-python +toolz==0.12.1 + # via + # altair + # dask + # partd +tornado==6.4 + # via + # ipykernel + # jupyter-client + # jupyter-server + # jupyterlab + # notebook + # terminado +tqdm==4.66.1 + # via + # feast (setup.py) + # great-expectations +traitlets==5.14.1 + # via + # comm + # ipykernel + # ipython + # ipywidgets + # jupyter-client + # jupyter-core + # jupyter-events + # jupyter-server + # jupyterlab + # matplotlib-inline + # nbclient + # nbconvert + # nbformat +trino==0.327.0 + # via feast (setup.py) +typeguard==2.13.3 + # via feast (setup.py) +types-protobuf==3.19.22 + # via + # feast (setup.py) + # mypy-protobuf +types-pymysql==1.1.0.1 + # via feast (setup.py) +types-pyopenssl==24.0.0.20240130 + # via types-redis +types-python-dateutil==2.8.19.20240106 + # via + # arrow + # feast (setup.py) +types-pytz==2024.1.0.20240203 + # via feast (setup.py) +types-pyyaml==6.0.12.12 + # via feast (setup.py) +types-redis==4.6.0.20240106 + # via feast (setup.py) +types-requests==2.30.0.0 + # via feast (setup.py) +types-setuptools==69.0.0.20240125 + # via feast (setup.py) +types-tabulate==0.9.0.20240106 + # via feast (setup.py) +types-urllib3==1.26.25.14 + # via types-requests +typing-extensions==4.9.0 + # via + # anyio + # async-lru + # azure-core + # azure-storage-blob + # black + # fastapi + # great-expectations + # ipython + # mypy + # pydantic + # pydantic-core + # snowflake-connector-python + # sqlalchemy2-stubs + # starlette + # uvicorn +tzlocal==5.2 + # via + # great-expectations + # trino +uri-template==1.3.0 + # via jsonschema +uritemplate==4.1.1 + # via google-api-python-client +urllib3==1.26.18 + # via + # botocore + # docker + # feast (setup.py) + # great-expectations + # kubernetes + # minio + # requests + # responses + # rockset + # snowflake-connector-python +uvicorn[standard]==0.27.0.post1 + # via + # feast (setup.py) + # uvicorn +uvloop==0.19.0 + # via uvicorn +virtualenv==20.23.0 + # via + # feast (setup.py) + # pre-commit +volatile==2.1.0 + # via bowler +watchfiles==0.21.0 + # via uvicorn +wcwidth==0.2.13 + # via prompt-toolkit +webcolors==1.13 + # via jsonschema +webencodings==0.5.1 + # via + # bleach + # tinycss2 +websocket-client==1.7.0 + # via + # jupyter-server + # kubernetes +websockets==12.0 + # via uvicorn +werkzeug==3.0.1 + # via moto +wheel==0.42.0 + # via pip-tools +widgetsnbextension==4.0.9 + # via ipywidgets +wrapt==1.16.0 + # via testcontainers +xmltodict==0.13.0 + # via moto +zipp==3.17.0 + # via + # importlib-metadata + # importlib-resources + +# The following packages are considered to be unsafe in a requirements file: +# pip +# setuptools From 967bcac715097975d9741977f31c73365bfacf20 Mon Sep 17 00:00:00 2001 From: Shuchu Han Date: Sun, 11 Feb 2024 23:42:41 -0500 Subject: [PATCH 6/9] fix: Update the setup.py and requirements.txt. Fix test errors. Signed-off-by: Shuchu Han --- sdk/python/feast/importer.py | 1 - .../requirements/py3.10-ci-requirements.txt | 34 ++- .../requirements/py3.10-requirements.txt | 234 +++++++++++++++++ .../requirements/py3.8-ci-requirements.txt | 32 ++- .../requirements/py3.8-requirements.txt | 243 ++++++++++++++++++ .../requirements/py3.9-ci-requirements.txt | 34 ++- .../requirements/py3.9-requirements.txt | 237 +++++++++++++++++ sdk/python/tests/foo_provider.py | 1 + .../universal/online_store_creator.py | 2 + .../infra/scaffolding/test_repo_config.py | 2 +- setup.py | 2 +- 11 files changed, 766 insertions(+), 56 deletions(-) create mode 100644 sdk/python/requirements/py3.10-requirements.txt create mode 100644 sdk/python/requirements/py3.8-requirements.txt create mode 100644 sdk/python/requirements/py3.9-requirements.txt diff --git a/sdk/python/feast/importer.py b/sdk/python/feast/importer.py index 94a4526748..938d29fe31 100644 --- a/sdk/python/feast/importer.py +++ b/sdk/python/feast/importer.py @@ -1,5 +1,4 @@ import importlib -from typing import Optional from feast.errors import ( FeastClassImportError, diff --git a/sdk/python/requirements/py3.10-ci-requirements.txt b/sdk/python/requirements/py3.10-ci-requirements.txt index 5f328a2104..5260f9998d 100644 --- a/sdk/python/requirements/py3.10-ci-requirements.txt +++ b/sdk/python/requirements/py3.10-ci-requirements.txt @@ -59,11 +59,11 @@ black==22.12.0 # via feast (setup.py) bleach==6.1.0 # via nbconvert -boto3==1.34.37 +boto3==1.34.39 # via # feast (setup.py) # moto -botocore==1.34.37 +botocore==1.34.39 # via # boto3 # moto @@ -139,11 +139,11 @@ cryptography==41.0.7 # snowflake-connector-python # types-pyopenssl # types-redis -dask==2024.1.1 +dask==2024.2.0 # via feast (setup.py) db-dtypes==1.2.0 # via google-cloud-bigquery -debugpy==1.8.0 +debugpy==1.8.1 # via ipykernel decorator==5.1.1 # via ipython @@ -203,7 +203,7 @@ geojson==2.5.0 # via rockset geomet==0.2.1.post1 # via cassandra-driver -google-api-core[grpc]==2.16.2 +google-api-core[grpc]==2.17.0 # via # feast (setup.py) # firebase-admin @@ -215,7 +215,7 @@ google-api-core[grpc]==2.16.2 # google-cloud-datastore # google-cloud-firestore # google-cloud-storage -google-api-python-client==2.116.0 +google-api-python-client==2.117.0 # via firebase-admin google-auth==2.27.0 # via @@ -313,10 +313,8 @@ httplib2==0.22.0 httptools==0.6.1 # via uvicorn httpx==0.26.0 - # via - # feast (setup.py) - # jupyterlab -identify==2.5.33 + # via feast (setup.py) +identify==2.5.34 # via pre-commit idna==3.6 # via @@ -342,7 +340,7 @@ ipython==8.21.0 # great-expectations # ipykernel # ipywidgets -ipywidgets==8.1.1 +ipywidgets==8.1.2 # via great-expectations isodate==0.6.1 # via azure-storage-blob @@ -412,7 +410,7 @@ jupyter-server==2.12.5 # notebook-shim jupyter-server-terminals==0.5.2 # via jupyter-server -jupyterlab==4.1.0 +jupyterlab==4.0.12 # via notebook jupyterlab-pygments==0.3.0 # via nbconvert @@ -420,7 +418,7 @@ jupyterlab-server==2.25.2 # via # jupyterlab # notebook -jupyterlab-widgets==3.0.9 +jupyterlab-widgets==3.0.10 # via ipywidgets kubernetes==20.13.0 # via feast (setup.py) @@ -465,7 +463,7 @@ msgpack==1.0.7 # via cachecontrol multiprocess==0.70.16 # via bytewax -mypy==1.1.1 +mypy==1.8.0 # via # feast (setup.py) # sqlalchemy @@ -489,7 +487,7 @@ nest-asyncio==1.6.0 # via ipykernel nodeenv==1.8.0 # via pre-commit -notebook==7.0.7 +notebook==7.0.8 # via great-expectations notebook-shim==0.2.3 # via @@ -878,7 +876,7 @@ tornado==6.4 # jupyterlab # notebook # terminado -tqdm==4.66.1 +tqdm==4.66.2 # via # feast (setup.py) # great-expectations @@ -960,7 +958,7 @@ urllib3==1.26.18 # requests # responses # rockset -uvicorn[standard]==0.27.0.post1 +uvicorn[standard]==0.27.1 # via # feast (setup.py) # uvicorn @@ -992,7 +990,7 @@ werkzeug==3.0.1 # via moto wheel==0.42.0 # via pip-tools -widgetsnbextension==4.0.9 +widgetsnbextension==4.0.10 # via ipywidgets wrapt==1.16.0 # via testcontainers diff --git a/sdk/python/requirements/py3.10-requirements.txt b/sdk/python/requirements/py3.10-requirements.txt new file mode 100644 index 0000000000..1f61b3fd57 --- /dev/null +++ b/sdk/python/requirements/py3.10-requirements.txt @@ -0,0 +1,234 @@ +# +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: +# +# pip-compile --output-file=sdk/python/requirements/py3.10-requirements.txt +# +annotated-types==0.6.0 + # via pydantic +anyio==4.2.0 + # via + # httpx + # starlette + # watchfiles +appdirs==1.4.4 + # via fissix +attrs==23.2.0 + # via + # bowler + # jsonschema + # referencing +bowler==0.9.0 + # via feast (setup.py) +certifi==2024.2.2 + # via + # httpcore + # httpx + # requests +charset-normalizer==3.3.2 + # via requests +click==8.1.7 + # via + # bowler + # dask + # feast (setup.py) + # moreorless + # uvicorn +cloudpickle==3.0.0 + # via dask +colorama==0.4.6 + # via feast (setup.py) +dask==2024.2.0 + # via feast (setup.py) +dill==0.3.8 + # via feast (setup.py) +exceptiongroup==1.2.0 + # via anyio +fastapi==0.109.2 + # via feast (setup.py) +fastavro==1.9.3 + # via + # feast (setup.py) + # pandavro +fissix==21.11.13 + # via bowler +fsspec==2024.2.0 + # via dask +greenlet==3.0.3 + # via sqlalchemy +grpcio==1.60.1 + # via + # feast (setup.py) + # grpcio-health-checking + # grpcio-reflection + # grpcio-tools +grpcio-health-checking==1.60.1 + # via feast (setup.py) +grpcio-reflection==1.60.1 + # via feast (setup.py) +grpcio-tools==1.60.1 + # via feast (setup.py) +gunicorn==21.2.0 + # via feast (setup.py) +h11==0.14.0 + # via + # httpcore + # uvicorn +httpcore==1.0.2 + # via httpx +httptools==0.6.1 + # via uvicorn +httpx==0.26.0 + # via feast (setup.py) +idna==3.6 + # via + # anyio + # httpx + # requests +importlib-metadata==6.11.0 + # via + # dask + # feast (setup.py) +importlib-resources==6.1.1 + # via feast (setup.py) +jinja2==3.1.3 + # via feast (setup.py) +jsonschema==4.21.1 + # via feast (setup.py) +jsonschema-specifications==2023.12.1 + # via jsonschema +locket==1.0.0 + # via partd +markupsafe==2.1.5 + # via jinja2 +mmh3==4.1.0 + # via feast (setup.py) +moreorless==0.4.0 + # via bowler +mypy==1.8.0 + # via sqlalchemy +mypy-extensions==1.0.0 + # via mypy +mypy-protobuf==3.1.0 + # via feast (setup.py) +numpy==1.24.4 + # via + # feast (setup.py) + # pandas + # pandavro + # pyarrow +packaging==23.2 + # via + # dask + # gunicorn +pandas==1.5.3 + # via + # feast (setup.py) + # pandavro +pandavro==1.5.2 + # via feast (setup.py) +partd==1.4.1 + # via dask +proto-plus==1.23.0 + # via feast (setup.py) +protobuf==4.23.3 + # via + # feast (setup.py) + # grpcio-health-checking + # grpcio-reflection + # grpcio-tools + # mypy-protobuf + # proto-plus +pyarrow==15.0.0 + # via feast (setup.py) +pydantic==2.6.1 + # via + # fastapi + # feast (setup.py) +pydantic-core==2.16.2 + # via pydantic +pygments==2.17.2 + # via feast (setup.py) +python-dateutil==2.8.2 + # via pandas +python-dotenv==1.0.1 + # via uvicorn +pytz==2024.1 + # via pandas +pyyaml==6.0.1 + # via + # dask + # feast (setup.py) + # uvicorn +referencing==0.33.0 + # via + # jsonschema + # jsonschema-specifications +requests==2.31.0 + # via feast (setup.py) +rpds-py==0.17.1 + # via + # jsonschema + # referencing +six==1.16.0 + # via + # pandavro + # python-dateutil +sniffio==1.3.0 + # via + # anyio + # httpx +sqlalchemy[mypy]==1.4.51 + # via + # feast (setup.py) + # sqlalchemy +sqlalchemy2-stubs==0.0.2a38 + # via sqlalchemy +starlette==0.36.3 + # via fastapi +tabulate==0.9.0 + # via feast (setup.py) +tenacity==8.2.3 + # via feast (setup.py) +toml==0.10.2 + # via feast (setup.py) +tomli==2.0.1 + # via mypy +toolz==0.12.1 + # via + # dask + # partd +tqdm==4.66.2 + # via feast (setup.py) +typeguard==2.13.3 + # via feast (setup.py) +types-protobuf==4.24.0.20240129 + # via mypy-protobuf +typing-extensions==4.9.0 + # via + # anyio + # fastapi + # mypy + # pydantic + # pydantic-core + # sqlalchemy2-stubs + # uvicorn +urllib3==2.2.0 + # via requests +uvicorn[standard]==0.27.1 + # via + # feast (setup.py) + # uvicorn +uvloop==0.19.0 + # via uvicorn +volatile==2.1.0 + # via bowler +watchfiles==0.21.0 + # via uvicorn +websockets==12.0 + # via uvicorn +zipp==3.17.0 + # via importlib-metadata + +# The following packages are considered to be unsafe in a requirements file: +# setuptools diff --git a/sdk/python/requirements/py3.8-ci-requirements.txt b/sdk/python/requirements/py3.8-ci-requirements.txt index 71af2a5922..6d11e35e63 100644 --- a/sdk/python/requirements/py3.8-ci-requirements.txt +++ b/sdk/python/requirements/py3.8-ci-requirements.txt @@ -65,11 +65,11 @@ black==22.12.0 # via feast (setup.py) bleach==6.1.0 # via nbconvert -boto3==1.34.37 +boto3==1.34.39 # via # feast (setup.py) # moto -botocore==1.34.37 +botocore==1.34.39 # via # boto3 # moto @@ -149,7 +149,7 @@ dask==2023.5.0 # via feast (setup.py) db-dtypes==1.2.0 # via google-cloud-bigquery -debugpy==1.8.0 +debugpy==1.8.1 # via ipykernel decorator==5.1.1 # via ipython @@ -208,7 +208,7 @@ geojson==2.5.0 # via rockset geomet==0.2.1.post1 # via cassandra-driver -google-api-core[grpc]==2.16.2 +google-api-core[grpc]==2.17.0 # via # feast (setup.py) # firebase-admin @@ -220,7 +220,7 @@ google-api-core[grpc]==2.16.2 # google-cloud-datastore # google-cloud-firestore # google-cloud-storage -google-api-python-client==2.116.0 +google-api-python-client==2.117.0 # via firebase-admin google-auth==2.27.0 # via @@ -318,10 +318,8 @@ httplib2==0.22.0 httptools==0.6.1 # via uvicorn httpx==0.26.0 - # via - # feast (setup.py) - # jupyterlab -identify==2.5.33 + # via feast (setup.py) +identify==2.5.34 # via pre-commit idna==3.6 # via @@ -358,7 +356,7 @@ ipython==8.12.3 # great-expectations # ipykernel # ipywidgets -ipywidgets==8.1.1 +ipywidgets==8.1.2 # via great-expectations isodate==0.6.1 # via azure-storage-blob @@ -428,7 +426,7 @@ jupyter-server==2.12.5 # notebook-shim jupyter-server-terminals==0.5.2 # via jupyter-server -jupyterlab==4.1.0 +jupyterlab==4.0.12 # via notebook jupyterlab-pygments==0.3.0 # via nbconvert @@ -436,7 +434,7 @@ jupyterlab-server==2.25.2 # via # jupyterlab # notebook -jupyterlab-widgets==3.0.9 +jupyterlab-widgets==3.0.10 # via ipywidgets kubernetes==20.13.0 # via feast (setup.py) @@ -481,7 +479,7 @@ msgpack==1.0.7 # via cachecontrol multiprocess==0.70.16 # via bytewax -mypy==1.1.1 +mypy==1.8.0 # via # feast (setup.py) # sqlalchemy @@ -505,7 +503,7 @@ nest-asyncio==1.6.0 # via ipykernel nodeenv==1.8.0 # via pre-commit -notebook==7.0.7 +notebook==7.0.8 # via great-expectations notebook-shim==0.2.3 # via @@ -901,7 +899,7 @@ tornado==6.4 # jupyterlab # notebook # terminado -tqdm==4.66.1 +tqdm==4.66.2 # via # feast (setup.py) # great-expectations @@ -988,7 +986,7 @@ urllib3==1.26.18 # responses # rockset # snowflake-connector-python -uvicorn[standard]==0.27.0.post1 +uvicorn[standard]==0.27.1 # via # feast (setup.py) # uvicorn @@ -1020,7 +1018,7 @@ werkzeug==3.0.1 # via moto wheel==0.42.0 # via pip-tools -widgetsnbextension==4.0.9 +widgetsnbextension==4.0.10 # via ipywidgets wrapt==1.16.0 # via testcontainers diff --git a/sdk/python/requirements/py3.8-requirements.txt b/sdk/python/requirements/py3.8-requirements.txt new file mode 100644 index 0000000000..6213f6fcb5 --- /dev/null +++ b/sdk/python/requirements/py3.8-requirements.txt @@ -0,0 +1,243 @@ +# +# This file is autogenerated by pip-compile with Python 3.8 +# by the following command: +# +# pip-compile --output-file=sdk/python/requirements/py3.8-requirements.txt +# +annotated-types==0.6.0 + # via pydantic +anyio==4.2.0 + # via + # httpx + # starlette + # watchfiles +appdirs==1.4.4 + # via fissix +attrs==23.2.0 + # via + # bowler + # jsonschema + # referencing +bowler==0.9.0 + # via feast (setup.py) +certifi==2024.2.2 + # via + # httpcore + # httpx + # requests +charset-normalizer==3.3.2 + # via requests +click==8.1.7 + # via + # bowler + # dask + # feast (setup.py) + # moreorless + # uvicorn +cloudpickle==3.0.0 + # via dask +colorama==0.4.6 + # via feast (setup.py) +dask==2023.5.0 + # via feast (setup.py) +dill==0.3.8 + # via feast (setup.py) +exceptiongroup==1.2.0 + # via anyio +fastapi==0.109.2 + # via feast (setup.py) +fastavro==1.9.3 + # via + # feast (setup.py) + # pandavro +fissix==21.11.13 + # via bowler +fsspec==2024.2.0 + # via dask +greenlet==3.0.3 + # via sqlalchemy +grpcio==1.60.1 + # via + # feast (setup.py) + # grpcio-health-checking + # grpcio-reflection + # grpcio-tools +grpcio-health-checking==1.60.1 + # via feast (setup.py) +grpcio-reflection==1.60.1 + # via feast (setup.py) +grpcio-tools==1.60.1 + # via feast (setup.py) +gunicorn==21.2.0 + # via feast (setup.py) +h11==0.14.0 + # via + # httpcore + # uvicorn +httpcore==1.0.2 + # via httpx +httptools==0.6.1 + # via uvicorn +httpx==0.26.0 + # via feast (setup.py) +idna==3.6 + # via + # anyio + # httpx + # requests +importlib-metadata==6.11.0 + # via + # dask + # feast (setup.py) +importlib-resources==6.1.1 + # via + # feast (setup.py) + # jsonschema + # jsonschema-specifications +jinja2==3.1.3 + # via feast (setup.py) +jsonschema==4.21.1 + # via feast (setup.py) +jsonschema-specifications==2023.12.1 + # via jsonschema +locket==1.0.0 + # via partd +markupsafe==2.1.5 + # via jinja2 +mmh3==4.1.0 + # via feast (setup.py) +moreorless==0.4.0 + # via bowler +mypy==1.8.0 + # via sqlalchemy +mypy-extensions==1.0.0 + # via mypy +mypy-protobuf==3.1.0 + # via feast (setup.py) +numpy==1.24.4 + # via + # feast (setup.py) + # pandas + # pandavro + # pyarrow +packaging==23.2 + # via + # dask + # gunicorn +pandas==1.5.3 + # via + # feast (setup.py) + # pandavro +pandavro==1.5.2 + # via feast (setup.py) +partd==1.4.1 + # via dask +pkgutil-resolve-name==1.3.10 + # via jsonschema +proto-plus==1.23.0 + # via feast (setup.py) +protobuf==4.23.3 + # via + # feast (setup.py) + # grpcio-health-checking + # grpcio-reflection + # grpcio-tools + # mypy-protobuf + # proto-plus +pyarrow==15.0.0 + # via feast (setup.py) +pydantic==2.6.1 + # via + # fastapi + # feast (setup.py) +pydantic-core==2.16.2 + # via pydantic +pygments==2.17.2 + # via feast (setup.py) +python-dateutil==2.8.2 + # via pandas +python-dotenv==1.0.1 + # via uvicorn +pytz==2024.1 + # via pandas +pyyaml==6.0.1 + # via + # dask + # feast (setup.py) + # uvicorn +referencing==0.33.0 + # via + # jsonschema + # jsonschema-specifications +requests==2.31.0 + # via feast (setup.py) +rpds-py==0.17.1 + # via + # jsonschema + # referencing +six==1.16.0 + # via + # pandavro + # python-dateutil +sniffio==1.3.0 + # via + # anyio + # httpx +sqlalchemy[mypy]==1.4.51 + # via + # feast (setup.py) + # sqlalchemy +sqlalchemy2-stubs==0.0.2a38 + # via sqlalchemy +starlette==0.36.3 + # via fastapi +tabulate==0.9.0 + # via feast (setup.py) +tenacity==8.2.3 + # via feast (setup.py) +toml==0.10.2 + # via feast (setup.py) +tomli==2.0.1 + # via mypy +toolz==0.12.1 + # via + # dask + # partd +tqdm==4.66.2 + # via feast (setup.py) +typeguard==2.13.3 + # via feast (setup.py) +types-protobuf==4.24.0.20240129 + # via mypy-protobuf +typing-extensions==4.9.0 + # via + # annotated-types + # anyio + # fastapi + # mypy + # pydantic + # pydantic-core + # sqlalchemy2-stubs + # starlette + # uvicorn +urllib3==2.2.0 + # via requests +uvicorn[standard]==0.27.1 + # via + # feast (setup.py) + # uvicorn +uvloop==0.19.0 + # via uvicorn +volatile==2.1.0 + # via bowler +watchfiles==0.21.0 + # via uvicorn +websockets==12.0 + # via uvicorn +zipp==3.17.0 + # via + # importlib-metadata + # importlib-resources + +# The following packages are considered to be unsafe in a requirements file: +# setuptools diff --git a/sdk/python/requirements/py3.9-ci-requirements.txt b/sdk/python/requirements/py3.9-ci-requirements.txt index ff66817aa1..09f97efcd2 100644 --- a/sdk/python/requirements/py3.9-ci-requirements.txt +++ b/sdk/python/requirements/py3.9-ci-requirements.txt @@ -59,11 +59,11 @@ black==22.12.0 # via feast (setup.py) bleach==6.1.0 # via nbconvert -boto3==1.34.37 +boto3==1.34.39 # via # feast (setup.py) # moto -botocore==1.34.37 +botocore==1.34.39 # via # boto3 # moto @@ -139,11 +139,11 @@ cryptography==41.0.7 # snowflake-connector-python # types-pyopenssl # types-redis -dask==2024.1.1 +dask==2024.2.0 # via feast (setup.py) db-dtypes==1.2.0 # via google-cloud-bigquery -debugpy==1.8.0 +debugpy==1.8.1 # via ipykernel decorator==5.1.1 # via ipython @@ -203,7 +203,7 @@ geojson==2.5.0 # via rockset geomet==0.2.1.post1 # via cassandra-driver -google-api-core[grpc]==2.16.2 +google-api-core[grpc]==2.17.0 # via # feast (setup.py) # firebase-admin @@ -215,7 +215,7 @@ google-api-core[grpc]==2.16.2 # google-cloud-datastore # google-cloud-firestore # google-cloud-storage -google-api-python-client==2.116.0 +google-api-python-client==2.117.0 # via firebase-admin google-auth==2.27.0 # via @@ -313,10 +313,8 @@ httplib2==0.22.0 httptools==0.6.1 # via uvicorn httpx==0.26.0 - # via - # feast (setup.py) - # jupyterlab -identify==2.5.33 + # via feast (setup.py) +identify==2.5.34 # via pre-commit idna==3.6 # via @@ -349,7 +347,7 @@ ipython==8.18.1 # great-expectations # ipykernel # ipywidgets -ipywidgets==8.1.1 +ipywidgets==8.1.2 # via great-expectations isodate==0.6.1 # via azure-storage-blob @@ -419,7 +417,7 @@ jupyter-server==2.12.5 # notebook-shim jupyter-server-terminals==0.5.2 # via jupyter-server -jupyterlab==4.1.0 +jupyterlab==4.0.12 # via notebook jupyterlab-pygments==0.3.0 # via nbconvert @@ -427,7 +425,7 @@ jupyterlab-server==2.25.2 # via # jupyterlab # notebook -jupyterlab-widgets==3.0.9 +jupyterlab-widgets==3.0.10 # via ipywidgets kubernetes==20.13.0 # via feast (setup.py) @@ -472,7 +470,7 @@ msgpack==1.0.7 # via cachecontrol multiprocess==0.70.16 # via bytewax -mypy==1.1.1 +mypy==1.8.0 # via # feast (setup.py) # sqlalchemy @@ -496,7 +494,7 @@ nest-asyncio==1.6.0 # via ipykernel nodeenv==1.8.0 # via pre-commit -notebook==7.0.7 +notebook==7.0.8 # via great-expectations notebook-shim==0.2.3 # via @@ -887,7 +885,7 @@ tornado==6.4 # jupyterlab # notebook # terminado -tqdm==4.66.1 +tqdm==4.66.2 # via # feast (setup.py) # great-expectations @@ -973,7 +971,7 @@ urllib3==1.26.18 # responses # rockset # snowflake-connector-python -uvicorn[standard]==0.27.0.post1 +uvicorn[standard]==0.27.1 # via # feast (setup.py) # uvicorn @@ -1005,7 +1003,7 @@ werkzeug==3.0.1 # via moto wheel==0.42.0 # via pip-tools -widgetsnbextension==4.0.9 +widgetsnbextension==4.0.10 # via ipywidgets wrapt==1.16.0 # via testcontainers diff --git a/sdk/python/requirements/py3.9-requirements.txt b/sdk/python/requirements/py3.9-requirements.txt new file mode 100644 index 0000000000..3b91ebd6b2 --- /dev/null +++ b/sdk/python/requirements/py3.9-requirements.txt @@ -0,0 +1,237 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --output-file=sdk/python/requirements/py3.9-requirements.txt +# +annotated-types==0.6.0 + # via pydantic +anyio==4.2.0 + # via + # httpx + # starlette + # watchfiles +appdirs==1.4.4 + # via fissix +attrs==23.2.0 + # via + # bowler + # jsonschema + # referencing +bowler==0.9.0 + # via feast (setup.py) +certifi==2024.2.2 + # via + # httpcore + # httpx + # requests +charset-normalizer==3.3.2 + # via requests +click==8.1.7 + # via + # bowler + # dask + # feast (setup.py) + # moreorless + # uvicorn +cloudpickle==3.0.0 + # via dask +colorama==0.4.6 + # via feast (setup.py) +dask==2024.2.0 + # via feast (setup.py) +dill==0.3.8 + # via feast (setup.py) +exceptiongroup==1.2.0 + # via anyio +fastapi==0.109.2 + # via feast (setup.py) +fastavro==1.9.3 + # via + # feast (setup.py) + # pandavro +fissix==21.11.13 + # via bowler +fsspec==2024.2.0 + # via dask +greenlet==3.0.3 + # via sqlalchemy +grpcio==1.60.1 + # via + # feast (setup.py) + # grpcio-health-checking + # grpcio-reflection + # grpcio-tools +grpcio-health-checking==1.60.1 + # via feast (setup.py) +grpcio-reflection==1.60.1 + # via feast (setup.py) +grpcio-tools==1.60.1 + # via feast (setup.py) +gunicorn==21.2.0 + # via feast (setup.py) +h11==0.14.0 + # via + # httpcore + # uvicorn +httpcore==1.0.2 + # via httpx +httptools==0.6.1 + # via uvicorn +httpx==0.26.0 + # via feast (setup.py) +idna==3.6 + # via + # anyio + # httpx + # requests +importlib-metadata==6.11.0 + # via + # dask + # feast (setup.py) +importlib-resources==6.1.1 + # via feast (setup.py) +jinja2==3.1.3 + # via feast (setup.py) +jsonschema==4.21.1 + # via feast (setup.py) +jsonschema-specifications==2023.12.1 + # via jsonschema +locket==1.0.0 + # via partd +markupsafe==2.1.5 + # via jinja2 +mmh3==4.1.0 + # via feast (setup.py) +moreorless==0.4.0 + # via bowler +mypy==1.8.0 + # via sqlalchemy +mypy-extensions==1.0.0 + # via mypy +mypy-protobuf==3.1.0 + # via feast (setup.py) +numpy==1.24.4 + # via + # feast (setup.py) + # pandas + # pandavro + # pyarrow +packaging==23.2 + # via + # dask + # gunicorn +pandas==1.5.3 + # via + # feast (setup.py) + # pandavro +pandavro==1.5.2 + # via feast (setup.py) +partd==1.4.1 + # via dask +proto-plus==1.23.0 + # via feast (setup.py) +protobuf==4.23.3 + # via + # feast (setup.py) + # grpcio-health-checking + # grpcio-reflection + # grpcio-tools + # mypy-protobuf + # proto-plus +pyarrow==15.0.0 + # via feast (setup.py) +pydantic==2.6.1 + # via + # fastapi + # feast (setup.py) +pydantic-core==2.16.2 + # via pydantic +pygments==2.17.2 + # via feast (setup.py) +python-dateutil==2.8.2 + # via pandas +python-dotenv==1.0.1 + # via uvicorn +pytz==2024.1 + # via pandas +pyyaml==6.0.1 + # via + # dask + # feast (setup.py) + # uvicorn +referencing==0.33.0 + # via + # jsonschema + # jsonschema-specifications +requests==2.31.0 + # via feast (setup.py) +rpds-py==0.17.1 + # via + # jsonschema + # referencing +six==1.16.0 + # via + # pandavro + # python-dateutil +sniffio==1.3.0 + # via + # anyio + # httpx +sqlalchemy[mypy]==1.4.51 + # via + # feast (setup.py) + # sqlalchemy +sqlalchemy2-stubs==0.0.2a38 + # via sqlalchemy +starlette==0.36.3 + # via fastapi +tabulate==0.9.0 + # via feast (setup.py) +tenacity==8.2.3 + # via feast (setup.py) +toml==0.10.2 + # via feast (setup.py) +tomli==2.0.1 + # via mypy +toolz==0.12.1 + # via + # dask + # partd +tqdm==4.66.2 + # via feast (setup.py) +typeguard==2.13.3 + # via feast (setup.py) +types-protobuf==4.24.0.20240129 + # via mypy-protobuf +typing-extensions==4.9.0 + # via + # anyio + # fastapi + # mypy + # pydantic + # pydantic-core + # sqlalchemy2-stubs + # starlette + # uvicorn +urllib3==2.2.0 + # via requests +uvicorn[standard]==0.27.1 + # via + # feast (setup.py) + # uvicorn +uvloop==0.19.0 + # via uvicorn +volatile==2.1.0 + # via bowler +watchfiles==0.21.0 + # via uvicorn +websockets==12.0 + # via uvicorn +zipp==3.17.0 + # via + # importlib-metadata + # importlib-resources + +# The following packages are considered to be unsafe in a requirements file: +# setuptools diff --git a/sdk/python/tests/foo_provider.py b/sdk/python/tests/foo_provider.py index 1663760b67..ba256a3813 100644 --- a/sdk/python/tests/foo_provider.py +++ b/sdk/python/tests/foo_provider.py @@ -7,6 +7,7 @@ from tqdm import tqdm from feast import Entity, FeatureService, FeatureView, RepoConfig +from feast.infra.offline_stores.offline_store import RetrievalJob from feast.infra.provider import Provider from feast.infra.registry.base_registry import BaseRegistry from feast.protos.feast.types.EntityKey_pb2 import EntityKey as EntityKeyProto diff --git a/sdk/python/tests/integration/feature_repos/universal/online_store_creator.py b/sdk/python/tests/integration/feature_repos/universal/online_store_creator.py index fed5e8cfe9..4932001e76 100644 --- a/sdk/python/tests/integration/feature_repos/universal/online_store_creator.py +++ b/sdk/python/tests/integration/feature_repos/universal/online_store_creator.py @@ -1,5 +1,7 @@ from abc import ABC, abstractmethod +from feast.repo_config import FeastConfigBaseModel + class OnlineStoreCreator(ABC): def __init__(self, project_name: str, **kwargs): diff --git a/sdk/python/tests/unit/infra/scaffolding/test_repo_config.py b/sdk/python/tests/unit/infra/scaffolding/test_repo_config.py index 11c56efb97..ca4ed6472b 100644 --- a/sdk/python/tests/unit/infra/scaffolding/test_repo_config.py +++ b/sdk/python/tests/unit/infra/scaffolding/test_repo_config.py @@ -45,7 +45,7 @@ def test_nullable_online_store_aws(): entity_key_serialization_version: 2 """ ), - expect_error="7 validation errors for RepoConfig\ncluster_id\n Field required", + expect_error="4 validation errors for RepoConfig\nregion\n Field required", ) diff --git a/setup.py b/setup.py index 51a78e5274..01e06109e0 100644 --- a/setup.py +++ b/setup.py @@ -61,7 +61,7 @@ "protobuf<4.23.4,>3.20", "proto-plus>=1.20.0,<2", "pyarrow>=4", - "pydantic>=1", + "pydantic>=2.0.0", "pygments>=2.12.0,<3", "PyYAML>=5.4.0,<7", "requests", From 2ffd4dd8462a78f60fc665477a74219927e2eec3 Mon Sep 17 00:00:00 2001 From: Shuchu Han Date: Mon, 12 Feb 2024 11:44:25 -0500 Subject: [PATCH 7/9] fix: Typo fixing. Signed-off-by: Shuchu Han --- .../contrib/athena_offline_store/tests/data_source.py | 1 - 1 file changed, 1 deletion(-) diff --git a/sdk/python/feast/infra/offline_stores/contrib/athena_offline_store/tests/data_source.py b/sdk/python/feast/infra/offline_stores/contrib/athena_offline_store/tests/data_source.py index a8f05c1c4b..6b2238830b 100644 --- a/sdk/python/feast/infra/offline_stores/contrib/athena_offline_store/tests/data_source.py +++ b/sdk/python/feast/infra/offline_stores/contrib/athena_offline_store/tests/data_source.py @@ -43,7 +43,6 @@ def __init__(self, project_name: str, *args, **kwargs): workgroup=workgroup, s3_staging_location=f"s3://{bucket_name}/test_dir", ) - self, def create_data_source( self, From 9573d41b2007ddef4f05b314118790b43716c7b7 Mon Sep 17 00:00:00 2001 From: Shuchu Han Date: Tue, 13 Feb 2024 11:50:52 -0500 Subject: [PATCH 8/9] fix: Improvements following the PR comments. Remove unnecessary changes. Signed-off-by: Shuchu Han --- .../infra/offline_stores/offline_store.py | 4 +- .../infra/offline_stores/snowflake_source.py | 4 +- .../feast/infra/registry/base_registry.py | 70 +++++++++---------- sdk/python/feast/repo_config.py | 2 - .../universal/data_source_creator.py | 8 +-- .../universal/data_sources/bigquery.py | 1 - .../universal/data_sources/file.py | 3 - 7 files changed, 43 insertions(+), 49 deletions(-) diff --git a/sdk/python/feast/infra/offline_stores/offline_store.py b/sdk/python/feast/infra/offline_stores/offline_store.py index ea0682ab7e..30135feccb 100644 --- a/sdk/python/feast/infra/offline_stores/offline_store.py +++ b/sdk/python/feast/infra/offline_stores/offline_store.py @@ -146,11 +146,11 @@ def to_arrow( return pyarrow.Table.from_pandas(features_df) - def to_sql(self) -> str: # type: ignore + def to_sql(self) -> str: """ Return RetrievalJob generated SQL statement if applicable. """ - pass + raise NotImplementedError def _to_df_internal(self, timeout: Optional[int] = None) -> pd.DataFrame: """ diff --git a/sdk/python/feast/infra/offline_stores/snowflake_source.py b/sdk/python/feast/infra/offline_stores/snowflake_source.py index a8a7539ed3..9a2c6e09bc 100644 --- a/sdk/python/feast/infra/offline_stores/snowflake_source.py +++ b/sdk/python/feast/infra/offline_stores/snowflake_source.py @@ -280,12 +280,12 @@ def get_table_column_names_and_types( else: row["snowflake_type"] = "NUMBERwSCALE" - elif row["type_code"] in {5, 9, 12}: + elif row["type_code"] in [5, 9, 12]: error = snowflake_unsupported_map[row["type_code"]] raise NotImplementedError( f"The following Snowflake Data Type is not supported: {error}" ) - elif row["type_code"] in {1, 2, 3, 4, 6, 7, 8, 10, 11, 13}: + elif row["type_code"] in [1, 2, 3, 4, 6, 7, 8, 10, 11, 13]: row["snowflake_type"] = snowflake_type_code_map[row["type_code"]] else: raise NotImplementedError( diff --git a/sdk/python/feast/infra/registry/base_registry.py b/sdk/python/feast/infra/registry/base_registry.py index 3d9d0c1091..f23a820d23 100644 --- a/sdk/python/feast/infra/registry/base_registry.py +++ b/sdk/python/feast/infra/registry/base_registry.py @@ -51,7 +51,7 @@ def apply_entity(self, entity: Entity, project: str, commit: bool = True): project: Feast project that this entity belongs to commit: Whether the change should be persisted immediately """ - pass + raise NotImplementedError @abstractmethod def delete_entity(self, name: str, project: str, commit: bool = True): @@ -63,7 +63,7 @@ def delete_entity(self, name: str, project: str, commit: bool = True): project: Feast project that this entity belongs to commit: Whether the change should be persisted immediately """ - pass + raise NotImplementedError @abstractmethod def get_entity(self, name: str, project: str, allow_cache: bool = False) -> Entity: @@ -79,7 +79,7 @@ def get_entity(self, name: str, project: str, allow_cache: bool = False) -> Enti Returns either the specified entity, or raises an exception if none is found """ - pass + raise NotImplementedError @abstractmethod def list_entities(self, project: str, allow_cache: bool = False) -> List[Entity]: @@ -93,7 +93,7 @@ def list_entities(self, project: str, allow_cache: bool = False) -> List[Entity] Returns: List of entities """ - pass + raise NotImplementedError # Data source operations @abstractmethod @@ -108,7 +108,7 @@ def apply_data_source( project: Feast project that this data source belongs to commit: Whether to immediately commit to the registry """ - pass + raise NotImplementedError @abstractmethod def delete_data_source(self, name: str, project: str, commit: bool = True): @@ -120,7 +120,7 @@ def delete_data_source(self, name: str, project: str, commit: bool = True): project: Feast project that this data source belongs to commit: Whether the change should be persisted immediately """ - pass + raise NotImplementedError @abstractmethod def get_data_source( @@ -137,7 +137,7 @@ def get_data_source( Returns: Returns either the specified data source, or raises an exception if none is found """ - pass + raise NotImplementedError @abstractmethod def list_data_sources( @@ -153,7 +153,7 @@ def list_data_sources( Returns: List of data sources """ - pass + raise NotImplementedError # Feature service operations @abstractmethod @@ -167,7 +167,7 @@ def apply_feature_service( feature_service: A feature service that will be registered project: Feast project that this entity belongs to """ - pass + raise NotImplementedError @abstractmethod def delete_feature_service(self, name: str, project: str, commit: bool = True): @@ -179,7 +179,7 @@ def delete_feature_service(self, name: str, project: str, commit: bool = True): project: Feast project that this feature service belongs to commit: Whether the change should be persisted immediately """ - pass + raise NotImplementedError @abstractmethod def get_feature_service( @@ -197,7 +197,7 @@ def get_feature_service( Returns either the specified feature service, or raises an exception if none is found """ - pass + raise NotImplementedError @abstractmethod def list_feature_services( @@ -213,7 +213,7 @@ def list_feature_services( Returns: List of feature services """ - pass + raise NotImplementedError # Feature view operations @abstractmethod @@ -228,7 +228,7 @@ def apply_feature_view( project: Feast project that this feature view belongs to commit: Whether the change should be persisted immediately """ - pass + raise NotImplementedError @abstractmethod def delete_feature_view(self, name: str, project: str, commit: bool = True): @@ -240,7 +240,7 @@ def delete_feature_view(self, name: str, project: str, commit: bool = True): project: Feast project that this feature view belongs to commit: Whether the change should be persisted immediately """ - pass + raise NotImplementedError # stream feature view operations @abstractmethod @@ -259,7 +259,7 @@ def get_stream_feature_view( Returns either the specified feature view, or raises an exception if none is found """ - pass + raise NotImplementedError @abstractmethod def list_stream_feature_views( @@ -275,7 +275,7 @@ def list_stream_feature_views( Returns: List of stream feature views """ - pass + raise NotImplementedError # on demand feature view operations @abstractmethod @@ -294,7 +294,7 @@ def get_on_demand_feature_view( Returns either the specified on demand feature view, or raises an exception if none is found """ - pass + raise NotImplementedError @abstractmethod def list_on_demand_feature_views( @@ -310,7 +310,7 @@ def list_on_demand_feature_views( Returns: List of on demand feature views """ - pass + raise NotImplementedError # regular feature view operations @abstractmethod @@ -329,7 +329,7 @@ def get_feature_view( Returns either the specified feature view, or raises an exception if none is found """ - pass + raise NotImplementedError @abstractmethod def list_feature_views( @@ -345,7 +345,7 @@ def list_feature_views( Returns: List of feature views """ - pass + raise NotImplementedError # request feature view operations @abstractmethod @@ -364,7 +364,7 @@ def get_request_feature_view( Returns either the specified feature view, or raises an exception if none is found """ - pass + raise NotImplementedError @abstractmethod def list_request_feature_views( @@ -380,7 +380,7 @@ def list_request_feature_views( Returns: List of request feature views """ - pass + raise NotImplementedError @abstractmethod def apply_materialization( @@ -401,7 +401,7 @@ def apply_materialization( end_date (datetime): End date of the materialization interval to track commit: Whether the change should be persisted immediately """ - pass + raise NotImplementedError # Saved dataset operations @abstractmethod @@ -419,7 +419,7 @@ def apply_saved_dataset( project: Feast project that this dataset belongs to commit: Whether the change should be persisted immediately """ - pass + raise NotImplementedError @abstractmethod def get_saved_dataset( @@ -437,7 +437,7 @@ def get_saved_dataset( Returns either the specified SavedDataset, or raises an exception if none is found """ - pass + raise NotImplementedError def delete_saved_dataset(self, name: str, project: str, allow_cache: bool = False): """ @@ -452,7 +452,7 @@ def delete_saved_dataset(self, name: str, project: str, allow_cache: bool = Fals Returns either the specified SavedDataset, or raises an exception if none is found """ - pass + raise NotImplementedError @abstractmethod def list_saved_datasets( @@ -468,7 +468,7 @@ def list_saved_datasets( Returns: Returns the list of SavedDatasets """ - pass + raise NotImplementedError # Validation reference operations @abstractmethod @@ -486,7 +486,7 @@ def apply_validation_reference( project: Feast project that this dataset belongs to commit: Whether the change should be persisted immediately """ - pass + raise NotImplementedError @abstractmethod def delete_validation_reference(self, name: str, project: str, commit: bool = True): @@ -498,7 +498,7 @@ def delete_validation_reference(self, name: str, project: str, commit: bool = Tr project: Feast project that this object belongs to commit: Whether the change should be persisted immediately """ - pass + raise NotImplementedError @abstractmethod def get_validation_reference( @@ -516,7 +516,7 @@ def get_validation_reference( Returns either the specified ValidationReference, or raises an exception if none is found """ - pass + raise NotImplementedError # TODO: Needs to be implemented. def list_validation_references( @@ -561,7 +561,7 @@ def update_infra(self, infra: Infra, project: str, commit: bool = True): project: Feast project that the Infra object refers to commit: Whether the change should be persisted immediately """ - pass + raise NotImplementedError @abstractmethod def get_infra(self, project: str, allow_cache: bool = False) -> Infra: @@ -575,7 +575,7 @@ def get_infra(self, project: str, allow_cache: bool = False) -> Infra: Returns: The stored Infra object. """ - pass + raise NotImplementedError @abstractmethod def apply_user_metadata( @@ -600,17 +600,17 @@ def proto(self) -> RegistryProto: Returns: The registry proto object. """ - pass + raise NotImplementedError @abstractmethod def commit(self): """Commits the state of the registry cache to the remote registry store.""" - pass + raise NotImplementedError @abstractmethod def refresh(self, project: Optional[str] = None): """Refreshes the state of the registry cache by fetching the registry state from the remote registry store.""" - pass + raise NotImplementedError @staticmethod def _message_to_sorted_dict(message: Message) -> Dict[str, Any]: diff --git a/sdk/python/feast/repo_config.py b/sdk/python/feast/repo_config.py index 110b2afec2..bf3e1d13f9 100644 --- a/sdk/python/feast/repo_config.py +++ b/sdk/python/feast/repo_config.py @@ -414,7 +414,6 @@ def _validate_feature_server_config(cls, values: Any) -> Any: return values @field_validator("project") - @classmethod def _validate_project_name(cls, v: str) -> str: from feast.repo_operations import is_valid_name @@ -426,7 +425,6 @@ def _validate_project_name(cls, v: str) -> str: return v @field_validator("flags") - @classmethod def _validate_flags(cls, v: Optional[dict]) -> Optional[dict]: if not isinstance(v, dict): return v diff --git a/sdk/python/tests/integration/feature_repos/universal/data_source_creator.py b/sdk/python/tests/integration/feature_repos/universal/data_source_creator.py index 54be44fd1f..5e5062291d 100644 --- a/sdk/python/tests/integration/feature_repos/universal/data_source_creator.py +++ b/sdk/python/tests/integration/feature_repos/universal/data_source_creator.py @@ -42,15 +42,15 @@ def create_data_source( A Data source object, pointing to a table or file that is uploaded/persisted for the purpose of the test. """ - pass + raise NotImplementedError @abstractmethod def create_offline_store_config(self) -> FeastConfigBaseModel: - pass + raise NotImplementedError @abstractmethod def create_saved_dataset_destination(self) -> SavedDatasetStorage: - pass + raise NotImplementedError @abstractmethod def create_logged_features_destination(self) -> LoggingDestination: @@ -58,4 +58,4 @@ def create_logged_features_destination(self) -> LoggingDestination: @abstractmethod def teardown(self): - pass + raise NotImplementedError diff --git a/sdk/python/tests/integration/feature_repos/universal/data_sources/bigquery.py b/sdk/python/tests/integration/feature_repos/universal/data_sources/bigquery.py index 6122d8fd9c..066497a0bc 100644 --- a/sdk/python/tests/integration/feature_repos/universal/data_sources/bigquery.py +++ b/sdk/python/tests/integration/feature_repos/universal/data_sources/bigquery.py @@ -64,7 +64,6 @@ def create_data_source( self, df: pd.DataFrame, destination_name: str, - event_timestamp_column="ts", created_timestamp_column="created_ts", field_mapping: Optional[Dict[str, str]] = None, timestamp_field: Optional[str] = "ts", diff --git a/sdk/python/tests/integration/feature_repos/universal/data_sources/file.py b/sdk/python/tests/integration/feature_repos/universal/data_sources/file.py index d65740278b..008bb8d881 100644 --- a/sdk/python/tests/integration/feature_repos/universal/data_sources/file.py +++ b/sdk/python/tests/integration/feature_repos/universal/data_sources/file.py @@ -39,7 +39,6 @@ def create_data_source( self, df: pd.DataFrame, destination_name: str, - event_timestamp_column="ts", created_timestamp_column="created_ts", field_mapping: Optional[Dict[str, str]] = None, timestamp_field: Optional[str] = "ts", @@ -95,7 +94,6 @@ def create_data_source( self, df: pd.DataFrame, destination_name: str, - event_timestamp_column="ts", created_timestamp_column="created_ts", field_mapping: Optional[Dict[str, str]] = None, timestamp_field: Optional[str] = "ts", @@ -170,7 +168,6 @@ def create_data_source( self, df: pd.DataFrame, destination_name: str, - event_timestamp_column="ts", created_timestamp_column="created_ts", field_mapping: Optional[Dict[str, str]] = None, timestamp_field: Optional[str] = "ts", From 35a224f0a922475df537f32375420cebde1d1358 Mon Sep 17 00:00:00 2001 From: Shuchu Han Date: Wed, 14 Feb 2024 19:56:55 -0500 Subject: [PATCH 9/9] fix: reduce the repeated function calls. Add classmethod decorator to class methods. Signed-off-by: Shuchu Han --- sdk/python/feast/repo_config.py | 4 ++++ sdk/python/tests/unit/cli/test_cli_chdir.py | 18 ++++++++---------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/sdk/python/feast/repo_config.py b/sdk/python/feast/repo_config.py index bf3e1d13f9..c69bb4d1e7 100644 --- a/sdk/python/feast/repo_config.py +++ b/sdk/python/feast/repo_config.py @@ -346,6 +346,7 @@ def _validate_online_store_config(cls, values: Any) -> Any: return values @model_validator(mode="before") + @classmethod def _validate_offline_store_config(cls, values: Any) -> Any: # Set empty offline_store config if it isn't set explicitly if "offline_store" not in values: @@ -382,6 +383,7 @@ def _validate_offline_store_config(cls, values: Any) -> Any: return values @model_validator(mode="before") + @classmethod def _validate_feature_server_config(cls, values: Any) -> Any: # Having no feature server is the default. if "feature_server" not in values: @@ -414,6 +416,7 @@ def _validate_feature_server_config(cls, values: Any) -> Any: return values @field_validator("project") + @classmethod def _validate_project_name(cls, v: str) -> str: from feast.repo_operations import is_valid_name @@ -425,6 +428,7 @@ def _validate_project_name(cls, v: str) -> str: return v @field_validator("flags") + @classmethod def _validate_flags(cls, v: Optional[dict]) -> Optional[dict]: if not isinstance(v, dict): return v diff --git a/sdk/python/tests/unit/cli/test_cli_chdir.py b/sdk/python/tests/unit/cli/test_cli_chdir.py index 02e93fb0cc..12ca8f6b08 100644 --- a/sdk/python/tests/unit/cli/test_cli_chdir.py +++ b/sdk/python/tests/unit/cli/test_cli_chdir.py @@ -15,19 +15,17 @@ def test_cli_chdir() -> None: # Make sure the path is absolute by resolving any symlinks temp_path = Path(temp_dir).resolve() result = runner.run(["init", "my_project"], cwd=temp_path) - repo_path = temp_path / "my_project" / "feature_repo" + repo_path = str(temp_path / "my_project" / "feature_repo") assert result.returncode == 0 - result = runner.run(["--chdir", str(repo_path), "apply"], cwd=temp_path) + result = runner.run(["--chdir", repo_path, "apply"], cwd=temp_path) assert result.returncode == 0 - result = runner.run( - ["--chdir", str(repo_path), "entities", "list"], cwd=temp_path - ) + result = runner.run(["--chdir", repo_path, "entities", "list"], cwd=temp_path) assert result.returncode == 0 result = runner.run( - ["--chdir", str(repo_path), "feature-views", "list"], cwd=temp_path + ["--chdir", repo_path, "feature-views", "list"], cwd=temp_path ) assert result.returncode == 0 @@ -36,7 +34,7 @@ def test_cli_chdir() -> None: result = runner.run( [ "--chdir", - str(repo_path), + repo_path, "materialize", start_date.isoformat(), end_date.isoformat(), @@ -48,7 +46,7 @@ def test_cli_chdir() -> None: result = runner.run( [ "--chdir", - str(repo_path), + repo_path, "materialize-incremental", end_date.isoformat(), ], @@ -56,8 +54,8 @@ def test_cli_chdir() -> None: ) assert result.returncode == 0 - result = runner.run(["--chdir", str(repo_path), "registry-dump"], cwd=temp_path) + result = runner.run(["--chdir", repo_path, "registry-dump"], cwd=temp_path) assert result.returncode == 0 - result = runner.run(["--chdir", str(repo_path), "teardown"], cwd=temp_path) + result = runner.run(["--chdir", repo_path, "teardown"], cwd=temp_path) assert result.returncode == 0