@@ -44,46 +44,54 @@ class DataField:
44
44
If the `value_set` is a single type, it can be passed directly as the `value_set` parameter.
45
45
46
46
e.g.:
47
- >>> DataField(name="Field 1", value_set =int)
48
- DataField(name='Field 1', value_set =ValueSet(elements=[<class 'int'>], name='', description=''), id='field_1', description='', section='', required=True, specification='' , ordinal='')
47
+ >>> DataField(name="Field 1", specification =int)
48
+ DataField(name='Field 1', specification =ValueSet(elements=[<class 'int'>], name='', description=''), id='field_1', description='', section='', required=True, ordinal='')
49
49
50
50
:ivar name: Name of the field
51
- :ivar value_set : Value set of the field, if the value set is only one type, can also pass that type directly
51
+ :ivar specification : Value set of the field, if the value set is only one type, can also pass that type directly
52
52
:ivar id: The identifier of the field, adhering to the naming rules stated above
53
53
:ivar description: Description of the field
54
54
:ivar section: Section of the field (Only applicable if the data model is divided into sections)
55
55
:ivar required: Required flag of the field
56
- :ivar specification: Text specification of the field (a description of the value set and field)
57
56
:ivar ordinal: Ordinal of the field (E.g. 1.1, 1.2, 2.1, etc.)
58
57
"""
59
58
name : str = field ()
60
- value_set : Union [ValueSet , type ] = field ()
59
+ specification : Union [ValueSet , type , List [ type ] ] = field ()
61
60
id : str = field (default = None )
62
61
description : str = field (default = '' )
63
62
section : str = field (default = '' )
64
63
required : bool = field (default = True )
65
- specification : str = field (default = '' )
66
64
ordinal : str = field (default = '' )
67
65
68
66
def __post_init__ (self ):
69
67
if not self .id :
70
68
from phenopacket_mapper .utils import str_to_valid_id
71
69
object .__setattr__ (self , 'id' , str_to_valid_id (self .name ))
72
70
73
- if isinstance (self .value_set , type ):
74
- object .__setattr__ (self , 'value_set' , ValueSet (elements = [self .value_set ]))
71
+ if isinstance (self .specification , type ):
72
+ object .__setattr__ (self , 'specification' , ValueSet (elements = [self .specification ]))
73
+ if isinstance (self .specification , list ):
74
+ if all (isinstance (e , type ) for e in self .specification ):
75
+ object .__setattr__ (self , 'specification' , ValueSet (elements = self .specification ))
75
76
76
77
def __str__ (self ):
77
78
ret = "DataField(\n "
78
79
ret += f"\t \t id: { self .id } ,\n "
79
80
ret += f"\t \t section: { self .section } ,\n "
80
81
ret += f"\t \t ordinal, name: ({ self .ordinal } , { self .name } ),\n "
81
- ret += f"\t \t value_set: { self .value_set } , required: { self .required } ,\n "
82
+ ret += f"\t \t value_set: { self .specification } , required: { self .required } ,\n "
82
83
ret += f"\t \t specification: { self .specification } \n "
83
84
ret += "\t )"
84
85
return ret
85
86
86
87
88
+ def __eq__ (self , other ):
89
+ if not isinstance (other , DataField ):
90
+ return False
91
+ return (self .id == other .id and self .specification == other .specification
92
+ and self .required == other .required )
93
+
94
+
87
95
@dataclass (slots = True )
88
96
class DataFieldValue :
89
97
"""This class defines the value of a `DataField` in a `DataModelInstance`
@@ -109,13 +117,13 @@ def validate(self) -> bool:
109
117
if self .field .required and self .value is None : # no value
110
118
warnings .warn (f"Field { self .field .name } is required but has no value" )
111
119
return False
112
- elif self .value is not None and self .field .value_set :
113
- if Any in self .field .value_set : # value set allows any
120
+ elif self .value is not None and self .field .specification :
121
+ if Any in self .field .specification : # value set allows any
114
122
return True
115
- elif self .value in self .field .value_set : # raw value (likely a primitive) is in the value set
123
+ elif self .value in self .field .specification : # raw value (likely a primitive) is in the value set
116
124
return True
117
125
else : # check if the value matches one of the types in the value set
118
- for e in self .field .value_set :
126
+ for e in self .field .specification :
119
127
if isinstance (e , type ):
120
128
cur_type = e
121
129
if cur_type is type (self .value ):
@@ -142,9 +150,9 @@ class DataModel:
142
150
be accessed using the `id` as an attribute of the `DataModel` object. E.g.: `data_model.date_of_birth`. This is
143
151
useful in the data reading and mapping processes.
144
152
145
- >>> data_model = DataModel("Test data model", (DataField(name="Field 1", value_set =ValueSet()),))
153
+ >>> data_model = DataModel("Test data model", (DataField(name="Field 1", specification =ValueSet()),))
146
154
>>> data_model.field_1
147
- DataField(name='Field 1', value_set =ValueSet(elements=[], name='', description=''), id='field_1', description='', section='', required=True, specification='' , ordinal='')
155
+ DataField(name='Field 1', specification =ValueSet(elements=[], name='', description=''), id='field_1', description='', section='', required=True, ordinal='')
148
156
149
157
:ivar data_model_name: Name of the data model
150
158
:ivar fields: List of `DataField` objects
@@ -245,7 +253,7 @@ def from_file(
245
253
DataField .name .__name__ : 'data_field_name' ,
246
254
DataField .section .__name__ : 'data_model_section' ,
247
255
DataField .description .__name__ : 'description' ,
248
- DataField .value_set .__name__ : 'value_set' ,
256
+ DataField .specification .__name__ : 'value_set' ,
249
257
DataField .required .__name__ : 'required' ,
250
258
DataField .specification .__name__ : 'specification' ,
251
259
DataField .ordinal .__name__ : 'ordinal'
@@ -474,3 +482,8 @@ def head(self, n: int = 5):
474
482
return self .data_frame .head (n )
475
483
else :
476
484
warnings .warn ("No data frame object available for this dataset" )
485
+
486
+
487
+ if __name__ == "__main__" :
488
+ df = DataField (name = "Field 1" , specification = int )
489
+ print (df .specification == ValueSet ([int ]))
0 commit comments