88from copy import deepcopy
99
1010from humps import camelize
11+ from mavedb .view_models .score_set_dataset_columns import DatasetColumnsCreate , SavedDatasetColumns , DatasetColumns
1112from pydantic import field_validator , model_validator , create_model
1213from pydantic .fields import FieldInfo
1314from fastapi import Form
@@ -119,6 +120,7 @@ class ScoreSetModifyBase(ScoreSetBase):
119120 doi_identifiers : Optional [list [DoiIdentifierCreate ]] = None
120121 target_genes : list [TargetGeneCreate ]
121122 score_ranges : Optional [ScoreSetRangesCreate ] = None
123+ # dataset_columns: Optional[DatasetColumnsCreate] = {}
122124
123125class ScoreSetModify (ScoreSetModifyBase ):
124126 """View model that adds custom validators to ScoreSetModifyBase."""
@@ -366,43 +368,6 @@ def as_form(
366368 license_id = license_id ,
367369 )
368370
369- class DatasetColumnMetadata (BaseModel ):
370- """Metadata for individual dataset columns."""
371-
372- description : str
373- details : Optional [str ] = None
374-
375- class DatasetColumns (BaseModel ):
376- """Dataset columns view model representing the dataset columns property of a score set."""
377-
378- score_columns : Optional [list [str ]] = None
379- count_columns : Optional [list [str ]] = None
380- score_columns_metadata : Optional [dict [str , DatasetColumnMetadata ]] = None
381- count_columns_metadata : Optional [dict [str , DatasetColumnMetadata ]] = None
382-
383- @field_validator ("score_columns_metadata" , "count_columns_metadata" )
384- def validate_dataset_columns_metadata (cls , v : Optional [dict [str , DatasetColumnMetadata ]]) -> Optional [dict [str , DatasetColumnMetadata ]]:
385- if not v :
386- return None
387- DatasetColumnMetadata .model_validate (v )
388- return v
389-
390- @model_validator (mode = "after" )
391- def validate_dataset_columns_metadata_keys (self ) -> Self :
392- if self .score_columns_metadata is not None and self .score_columns is None :
393- raise ValidationError ("Score columns metadata cannot be provided without score columns." )
394- elif self .score_columns_metadata is not None and self .score_columns is not None :
395- for key in self .score_columns_metadata .keys ():
396- if key not in self .score_columns :
397- raise ValidationError (f"Score column metadata key '{ key } ' does not exist in score_columns list." )
398-
399- if self .count_columns_metadata is not None and self .count_columns is None :
400- raise ValidationError ("Count columns metadata cannot be provided without count columns." )
401- elif self .count_columns_metadata is not None and self .count_columns is not None :
402- for key in self .count_columns_metadata .keys ():
403- if key not in self .count_columns :
404- raise ValidationError (f"Count column metadata key '{ key } ' does not exist in count_columns list." )
405- return self
406371
407372class ShortScoreSet (BaseModel ):
408373 """
@@ -486,7 +451,7 @@ class SavedScoreSet(ScoreSetBase):
486451 created_by : Optional [SavedUser ] = None
487452 modified_by : Optional [SavedUser ] = None
488453 target_genes : Sequence [SavedTargetGene ]
489- dataset_columns : DatasetColumns
454+ dataset_columns : Optional [ SavedDatasetColumns ] = None
490455 external_links : dict [str , ExternalLink ]
491456 contributors : Sequence [Contributor ]
492457 score_ranges : Optional [SavedScoreSetRanges ] = None
@@ -504,9 +469,9 @@ def publication_identifiers_validator(cls, value: Any) -> list[PublicationIdenti
504469 assert isinstance (value , Collection ), "Publication identifier lists must be a collection"
505470 return list (value ) # Re-cast into proper list-like type
506471
507- @field_validator ("dataset_columns" )
508- def camelize_dataset_columns_keys (cls , value : dict ) -> dict :
509- return camelize (value )
472+ # @field_validator("dataset_columns")
473+ # def camelize_dataset_columns_keys(cls, value: dict) -> dict:
474+ # return camelize(value)
510475
511476 # These 'synthetic' fields are generated from other model properties. Transform data from other properties as needed, setting
512477 # the appropriate field on the model itself. Then, proceed with Pydantic ingestion once fields are created.
@@ -570,6 +535,7 @@ class ScoreSet(SavedScoreSet):
570535 mapping_state : Optional [MappingState ] = None
571536 mapping_errors : Optional [dict ] = None
572537 score_ranges : Optional [ScoreSetRanges ] = None # type: ignore[assignment]
538+ dataset_columns : Optional [DatasetColumns ] = None # type: ignore[assignment]
573539
574540
575541class ScoreSetWithVariants (ScoreSet ):
0 commit comments