Source code for feast.errors

from typing import List, Set

from colorama import Fore, Style


[docs]class DataSourceNotFoundException(Exception): def __init__(self, path): super().__init__( f"Unable to find table at '{path}'. Please check that table exists." )
[docs]class DataSourceNoNameException(Exception): def __init__(self): super().__init__( "Unable to infer a name for this data source. Either table or name must be specified." )
[docs]class FeastObjectNotFoundException(Exception): pass
[docs]class EntityNotFoundException(FeastObjectNotFoundException): def __init__(self, name, project=None): if project: super().__init__(f"Entity {name} does not exist in project {project}") else: super().__init__(f"Entity {name} does not exist")
[docs]class FeatureServiceNotFoundException(FeastObjectNotFoundException): def __init__(self, name, project=None): if project: super().__init__( f"Feature service {name} does not exist in project {project}" ) else: super().__init__(f"Feature service {name} does not exist")
[docs]class FeatureViewNotFoundException(FeastObjectNotFoundException): def __init__(self, name, project=None): if project: super().__init__(f"Feature view {name} does not exist in project {project}") else: super().__init__(f"Feature view {name} does not exist")
[docs]class OnDemandFeatureViewNotFoundException(FeastObjectNotFoundException): def __init__(self, name, project=None): if project: super().__init__( f"On demand feature view {name} does not exist in project {project}" ) else: super().__init__(f"On demand feature view {name} does not exist")
[docs]class RequestDataNotFoundInEntityDfException(FeastObjectNotFoundException): def __init__(self, feature_name, feature_view_name): super().__init__( f"Feature {feature_name} not found in the entity dataframe, but required by feature view {feature_view_name}" )
[docs]class RequestDataNotFoundInEntityRowsException(FeastObjectNotFoundException): def __init__(self, feature_names): super().__init__( f"Required request data source features {feature_names} not found in the entity rows, but required by feature views" )
[docs]class DataSourceObjectNotFoundException(FeastObjectNotFoundException): def __init__(self, name, project=None): if project: super().__init__(f"Data source {name} does not exist in project {project}") else: super().__init__(f"Data source {name} does not exist")
[docs]class S3RegistryBucketNotExist(FeastObjectNotFoundException): def __init__(self, bucket): super().__init__(f"S3 bucket {bucket} for the Feast registry does not exist")
[docs]class S3RegistryBucketForbiddenAccess(FeastObjectNotFoundException): def __init__(self, bucket): super().__init__(f"S3 bucket {bucket} for the Feast registry can't be accessed")
[docs]class SavedDatasetNotFound(FeastObjectNotFoundException): def __init__(self, name: str, project: str): super().__init__(f"Saved dataset {name} does not exist in project {project}")
[docs]class FeastProviderLoginError(Exception): """Error class that indicates a user has not authenticated with their provider."""
[docs]class FeastProviderNotImplementedError(Exception): def __init__(self, provider_name): super().__init__(f"Provider '{provider_name}' is not implemented")
[docs]class FeastProviderNotSetError(Exception): def __init__(self): super().__init__("Provider is not set, but is required")
[docs]class FeastFeatureServerTypeSetError(Exception): def __init__(self, feature_server_type: str): super().__init__( f"Feature server type was set to {feature_server_type}, but the type should be determined by the provider" )
[docs]class FeastFeatureServerTypeInvalidError(Exception): def __init__(self, feature_server_type: str): super().__init__( f"Feature server type was set to {feature_server_type}, but this type is invalid" )
[docs]class FeastModuleImportError(Exception): def __init__(self, module_name: str, class_name: str): super().__init__( f"Could not import module '{module_name}' while attempting to load class '{class_name}'" )
[docs]class FeastClassImportError(Exception): def __init__(self, module_name: str, class_name: str): super().__init__( f"Could not import class '{class_name}' from module '{module_name}'" )
[docs]class FeastExtrasDependencyImportError(Exception): def __init__(self, extras_type: str, nested_error: str): message = ( nested_error + "\n" + f"You may need run {Style.BRIGHT + Fore.GREEN}pip install 'feast[{extras_type}]'{Style.RESET_ALL}" ) super().__init__(message)
[docs]class FeastOfflineStoreUnsupportedDataSource(Exception): def __init__(self, offline_store_name: str, data_source_name: str): super().__init__( f"Offline Store '{offline_store_name}' does not support data source '{data_source_name}'" )
[docs]class FeatureNameCollisionError(Exception): def __init__(self, feature_refs_collisions: List[str], full_feature_names: bool): if full_feature_names: collisions = [ref.replace(":", "__") for ref in feature_refs_collisions] error_message = ( "To resolve this collision, please ensure that the feature views or their own features " "have different names. If you're intentionally joining the same feature view twice on " "different sets of entities, please rename one of the feature views with '.with_name'." ) else: collisions = [ref.split(":")[1] for ref in feature_refs_collisions] error_message = ( "To resolve this collision, either use the full feature name by setting " "'full_feature_names=True', or ensure that the features in question have different names." ) feature_names = ", ".join(set(collisions)) super().__init__( f"Duplicate features named {feature_names} found.\n{error_message}" )
[docs]class SpecifiedFeaturesNotPresentError(Exception): def __init__(self, specified_features: List[str], feature_view_name: str): features = ", ".join(specified_features) super().__init__( f"Explicitly specified features {features} not found in inferred list of features for '{feature_view_name}'" )
[docs]class FeastOnlineStoreInvalidName(Exception): def __init__(self, online_store_class_name: str): super().__init__( f"Online Store Class '{online_store_class_name}' should end with the string `OnlineStore`.'" )
[docs]class FeastInvalidBaseClass(Exception): def __init__(self, class_name: str, class_type: str): super().__init__( f"Class '{class_name}' should have `{class_type}` as a base class." )
[docs]class FeastOnlineStoreUnsupportedDataSource(Exception): def __init__(self, online_store_name: str, data_source_name: str): super().__init__( f"Online Store '{online_store_name}' does not support data source '{data_source_name}'" )
[docs]class FeastEntityDFMissingColumnsError(Exception): def __init__(self, expected, missing): super().__init__( f"The entity dataframe you have provided must contain columns {expected}, " f"but {missing} were missing." )
[docs]class FeastJoinKeysDuringMaterialization(Exception): def __init__( self, source: str, join_key_columns: Set[str], source_columns: Set[str] ): super().__init__( f"The DataFrame from {source} being materialized must have at least {join_key_columns} columns present, " f"but these were missing: {join_key_columns - source_columns} " )
[docs]class DockerDaemonNotRunning(Exception): def __init__(self): super().__init__( "The Docker Python sdk cannot connect to the Docker daemon. Please make sure you have" "the docker daemon installed, and that it is running." )
[docs]class RegistryInferenceFailure(Exception): def __init__(self, repo_obj_type: str, specific_issue: str): super().__init__( f"Inference to fill in missing information for {repo_obj_type} failed. {specific_issue}. " "Try filling the information explicitly." )
[docs]class BigQueryJobStillRunning(Exception): def __init__(self, job_id): super().__init__(f"The BigQuery job with ID '{job_id}' is still running.")
[docs]class BigQueryJobCancelled(Exception): def __init__(self, job_id): super().__init__(f"The BigQuery job with ID '{job_id}' was cancelled")
[docs]class RedshiftCredentialsError(Exception): def __init__(self): super().__init__("Redshift API failed due to incorrect credentials")
[docs]class RedshiftQueryError(Exception): def __init__(self, details): super().__init__(f"Redshift SQL Query failed to finish. Details: {details}")
[docs]class RedshiftTableNameTooLong(Exception): def __init__(self, table_name: str): super().__init__( f"Redshift table names have a maximum length of 127 characters, but the table name {table_name} has length {len(table_name)} characters." )
[docs]class SnowflakeCredentialsError(Exception): def __init__(self): super().__init__("Snowflake Connector failed due to incorrect credentials")
[docs]class SnowflakeQueryError(Exception): def __init__(self, details): super().__init__(f"Snowflake SQL Query failed to finish. Details: {details}")
[docs]class EntityTimestampInferenceException(Exception): def __init__(self, expected_column_name: str): super().__init__( f"Please provide an entity_df with a column named {expected_column_name} representing the time of events." )
[docs]class InvalidEntityType(Exception): def __init__(self, entity_type: type): super().__init__( f"The entity dataframe you have provided must be a Pandas DataFrame or a SQL query, " f"but we found: {entity_type} " )
[docs]class ConflictingFeatureViewNames(Exception): # TODO: print file location of conflicting feature views def __init__(self, feature_view_name: str): super().__init__( f"The feature view name: {feature_view_name} refers to feature views of different types." )
[docs]class ExperimentalFeatureNotEnabled(Exception): def __init__(self, feature_flag_name: str): super().__init__( f"You are attempting to use an experimental feature that is not enabled. Please run " f"`feast alpha enable {feature_flag_name}` " )
[docs]class RepoConfigPathDoesNotExist(Exception): def __init__(self): super().__init__("The repo_path attribute does not exist for the repo_config.")
[docs]class AwsLambdaDoesNotExist(Exception): def __init__(self, resource_name: str): super().__init__( f"The AWS Lambda function {resource_name} should have been created properly, but does not exist." )
[docs]class AwsAPIGatewayDoesNotExist(Exception): def __init__(self, resource_name: str): super().__init__( f"The AWS API Gateway {resource_name} should have been created properly, but does not exist." )
[docs]class IncompatibleRegistryStoreClass(Exception): def __init__(self, actual_class: str, expected_class: str): super().__init__( f"The registry store class was expected to be {expected_class}, but was instead {actual_class}." )
[docs]class FeastInvalidInfraObjectType(Exception): def __init__(self): super().__init__("Could not identify the type of the InfraObject.")
[docs]class SnowflakeIncompleteConfig(Exception): def __init__(self, e: KeyError): super().__init__(f"{e} not defined in a config file or feature_store.yaml file")
[docs]class SnowflakeQueryUnknownError(Exception): def __init__(self, query: str): super().__init__(f"Snowflake query failed: {query}")