@@ -158,7 +158,7 @@ def _lookup_in_index_by_name(reserved_index, custom_index, name):
158158 elif name in custom_index :
159159 return custom_index [name ]
160160 else :
161- raise KeyError (f"There is no metadata with name { name } " )
161+ raise KeyError (f"There is no metadata with name ' { name } ' " )
162162
163163 def get_by_name (
164164 self , name : str
@@ -528,8 +528,8 @@ def _batch_upsert(
528528 data_row_id = m .data_row_id ,
529529 fields = list (
530530 chain .from_iterable (
531- self ._parse_upsert (m ) for m in m . fields ))). dict (
532- by_alias = True ))
531+ self ._parse_upsert (f , m . data_row_id )
532+ for f in m . fields ))). dict ( by_alias = True ))
533533 res = _batch_operations (_batch_upsert , items , self ._batch_size )
534534 return res
535535
@@ -689,8 +689,12 @@ def _upsert_schema(
689689 def _load_option_by_name (self , metadatum : DataRowMetadataField ):
690690 is_value_a_valid_schema_id = metadatum .value in self .fields_by_id
691691 if not is_value_a_valid_schema_id :
692- metadatum .value = self .get_by_name (
693- metadatum .name )[metadatum .value ].uid
692+ metadatum_by_name = self .get_by_name (metadatum .name )
693+ if metadatum .value not in metadatum_by_name :
694+ raise KeyError (
695+ f"There is no enum option by name '{ metadatum .value } ' for enum name '{ metadatum .name } '"
696+ )
697+ metadatum .value = metadatum_by_name [metadatum .value ].uid
694698
695699 def _load_schema_id_by_name (self , metadatum : DataRowMetadataField ):
696700 """
@@ -706,7 +710,9 @@ def _load_schema_id_by_name(self, metadatum: DataRowMetadataField):
706710 self ._load_option_by_name (metadatum )
707711
708712 def _parse_upsert (
709- self , metadatum : DataRowMetadataField
713+ self ,
714+ metadatum : DataRowMetadataField ,
715+ data_row_id : Optional [str ] = None
710716 ) -> List [_UpsertDataRowMetadataInput ]:
711717 """Format for metadata upserts to GQL"""
712718
@@ -720,21 +726,27 @@ def _parse_upsert(
720726 f"Schema Id `{ metadatum .schema_id } ` not found in ontology" )
721727
722728 schema = self .fields_by_id [metadatum .schema_id ]
723-
724- if schema .kind == DataRowMetadataKind .datetime :
725- parsed = _validate_parse_datetime (metadatum )
726- elif schema .kind == DataRowMetadataKind .string :
727- parsed = _validate_parse_text (metadatum )
728- elif schema .kind == DataRowMetadataKind .number :
729- parsed = _validate_parse_number (metadatum )
730- elif schema .kind == DataRowMetadataKind .embedding :
731- parsed = _validate_parse_embedding (metadatum )
732- elif schema .kind == DataRowMetadataKind .enum :
733- parsed = _validate_enum_parse (schema , metadatum )
734- elif schema .kind == DataRowMetadataKind .option :
735- raise ValueError ("An Option id should not be set as the Schema id" )
736- else :
737- raise ValueError (f"Unknown type: { schema } " )
729+ try :
730+ if schema .kind == DataRowMetadataKind .datetime :
731+ parsed = _validate_parse_datetime (metadatum )
732+ elif schema .kind == DataRowMetadataKind .string :
733+ parsed = _validate_parse_text (metadatum )
734+ elif schema .kind == DataRowMetadataKind .number :
735+ parsed = _validate_parse_number (metadatum )
736+ elif schema .kind == DataRowMetadataKind .embedding :
737+ parsed = _validate_parse_embedding (metadatum )
738+ elif schema .kind == DataRowMetadataKind .enum :
739+ parsed = _validate_enum_parse (schema , metadatum )
740+ elif schema .kind == DataRowMetadataKind .option :
741+ raise ValueError (
742+ "An Option id should not be set as the Schema id" )
743+ else :
744+ raise ValueError (f"Unknown type: { schema } " )
745+ except ValueError as e :
746+ error_str = f"Could not validate metadata [{ metadatum } ]"
747+ if data_row_id :
748+ error_str += f", data_row_id='{ data_row_id } '"
749+ raise ValueError (f"{ error_str } . Reason: { e } " )
738750
739751 return [_UpsertDataRowMetadataInput (** p ) for p in parsed ]
740752
@@ -824,7 +836,7 @@ def _validate_parse_datetime(
824836 field .value = datetime .fromisoformat (field .value )
825837 elif not isinstance (field .value , datetime ):
826838 raise TypeError (
827- f"value for datetime fields must be either a string or datetime object. Found { type (field .value )} "
839+ f"Value for datetime fields must be either a string or datetime object. Found { type (field .value )} "
828840 )
829841
830842 return [{
@@ -842,7 +854,7 @@ def _validate_parse_text(
842854
843855 if len (field .value ) > String .max_length :
844856 raise ValueError (
845- f"string fields cannot exceed { String .max_length } characters." )
857+ f"String fields cannot exceed { String .max_length } characters." )
846858
847859 return [field .dict (by_alias = True )]
848860
0 commit comments