@@ -438,14 +438,48 @@ def __init__(self, name):
438
438
439
439
def __repr__ (self ):
440
440
return '%s_%s%r' % (db_key_name , self .__class__ .__name__ ,
441
- (self .id , self .name ))
441
+ (self .id , self .name , self . params ))
442
442
443
- def __json__ (self , include_id = True ):
443
+ def __json__ (self , include_id = True , include_params = True ):
444
444
result = {'name' : self .name }
445
445
if include_id :
446
446
result ['id' ] = self .id
447
+ if include_params :
448
+ result ["params" ] = {p .name : p .value for p in self .params }
447
449
return result
448
450
451
+ class TestParam (self .base , ParameterizedMixin ):
452
+ __tablename__ = db_key_name + '_TestParam'
453
+ # utf8_bin for case sensitive compare
454
+ __table_args__ = {'mysql_collate' : 'utf8_bin' }
455
+ id = Column ("ID" , Integer , primary_key = True )
456
+ name = Column ("Name" , String (128 ), index = True )
457
+ value = Column ("Value" , String (128 ))
458
+
459
+ test_id = Column ("TestID" , Integer , ForeignKey (Test .id ), index = True )
460
+ test = relation (Test )
461
+
462
+ def __init__ (self , test , name , value ):
463
+ self .id = None
464
+ self .test = test
465
+ self .name = name
466
+ self .value = value
467
+
468
+ def __repr__ (self ):
469
+ return '%s_%s%r' % (db_key_name , self .__class__ .__name__ ,
470
+ (self .id , self .test , self .name , self .value ))
471
+
472
+ def __json__ (self ):
473
+ return {
474
+ "id" : self .id ,
475
+ "test" : self .test .__json__ (include_params = False ),
476
+ "name" : self .name ,
477
+ "value" : self .value ,
478
+ }
479
+
480
+ Test .params = relation (TestParam , back_populates = 'test' ,
481
+ cascade = "all, delete-orphan" )
482
+
449
483
class Profile (self .base ):
450
484
__tablename__ = db_key_name + '_Profile'
451
485
@@ -775,6 +809,7 @@ def __json__(self):
775
809
self .Machine = Machine
776
810
self .Run = Run
777
811
self .Test = Test
812
+ self .TestParam = TestParam
778
813
self .Profile = Profile
779
814
self .Sample = Sample
780
815
self .Order = Order
@@ -1067,9 +1102,24 @@ def is_profile_only(td):
1067
1102
test_cache [name ] = test
1068
1103
session .add (test )
1069
1104
1105
+ if "params" in test_data :
1106
+ for param_name , param_value in test_data ["params" ].items ():
1107
+ matching_params = [p for p in test .params if p .name == param_name ]
1108
+ assert len (matching_params ) <= 1
1109
+ if len (matching_params ) == 0 :
1110
+ # Add new parameter definition.
1111
+ param = self .TestParam (test , param_name , param_value )
1112
+ session .add (param )
1113
+ elif param_value is not None :
1114
+ # Update existing parameter definition.
1115
+ matching_params [0 ].value = param_value
1116
+ else :
1117
+ # Erase previously existing parameter definition.
1118
+ session .delete (matching_params [0 ])
1119
+
1070
1120
samples = []
1071
1121
for key , values in test_data .items ():
1072
- if key == ' name' or key == "id" or key .endswith ("_id" ):
1122
+ if key in ( " name" , "id" , "params" ) or key .endswith ("_id" ):
1073
1123
continue
1074
1124
field = field_dict .get (key )
1075
1125
if field is None and key != 'profile' :
0 commit comments