3535from ..schemas import (
3636 BooleanOrString ,
3737 AnalysisConditionSchema ,
38- AnnotationAnalysisSchema ,
3938 StudysetStudySchema ,
4039 EntitySchema ,
4140)
4443__all__ = [
4544 "StudysetsView" ,
4645 "AnnotationsView" ,
46+ "AnnotationAnalysesView" ,
4747 "BaseStudiesView" ,
4848 "StudiesView" ,
4949 "AnalysesView" ,
@@ -200,10 +200,10 @@ def serialize_records(self, records, args):
200200@view_maker
201201class AnnotationsView (ObjectView , ListView ):
202202 _view_fields = {** LIST_CLONE_ARGS , "studyset_id" : fields .String (load_default = None )}
203- _o2m = {"annotation_analyses" : "AnnotationAnalysesResource " }
203+ _o2m = {"annotation_analyses" : "AnnotationAnalysesView " }
204204 _m2o = {"studyset" : "StudysetsView" }
205205
206- _nested = {"annotation_analyses" : "AnnotationAnalysesResource " }
206+ _nested = {"annotation_analyses" : "AnnotationAnalysesView " }
207207 _linked = {
208208 "studyset" : "StudysetsView" ,
209209 }
@@ -255,7 +255,16 @@ def eager_load(self, q, args=None):
255255 selectinload (Annotation .user )
256256 .load_only (User .name , User .external_id )
257257 .options (raiseload ("*" , sql_only = True )),
258- selectinload (Annotation .annotation_analyses ).options (
258+ selectinload (Annotation .annotation_analyses )
259+ .load_only (
260+ AnnotationAnalysis .id ,
261+ AnnotationAnalysis .analysis_id ,
262+ AnnotationAnalysis .created_at ,
263+ AnnotationAnalysis .study_id ,
264+ AnnotationAnalysis .studyset_id ,
265+ AnnotationAnalysis .annotation_id ,
266+ )
267+ .options (
259268 joinedload (AnnotationAnalysis .analysis )
260269 .load_only (Analysis .id , Analysis .name )
261270 .options (raiseload ("*" , sql_only = True )),
@@ -339,8 +348,13 @@ def join_tables(self, q, args):
339348 def db_validation (self , record , data ):
340349 db_analysis_ids = {aa .analysis_id for aa in record .annotation_analyses }
341350 data_analysis_ids = {
342- aa ["analysis" ]["id" ] for aa in data .get ("annotation_analyses" )
351+ aa .get ("analysis" , {}).get ("id" , "" )
352+ for aa in data .get ("annotation_analyses" , [])
343353 }
354+
355+ if not data_analysis_ids :
356+ return
357+
344358 if db_analysis_ids != data_analysis_ids :
345359 abort (
346360 400 ,
@@ -779,7 +793,7 @@ class AnalysesView(ObjectView, ListView):
779793 "images" : "ImagesView" ,
780794 "points" : "PointsView" ,
781795 "analysis_conditions" : "AnalysisConditionsResource" ,
782- "annotation_analyses" : "AnnotationAnalysesResource " ,
796+ "annotation_analyses" : "AnnotationAnalysesView " ,
783797 }
784798 _m2o = {
785799 "study" : "StudiesView" ,
@@ -794,7 +808,7 @@ class AnalysesView(ObjectView, ListView):
794808 "study" : "StudiesView" ,
795809 }
796810 _linked = {
797- "annotation_analyses" : "AnnotationAnalysesResource " ,
811+ "annotation_analyses" : "AnnotationAnalysesView " ,
798812 }
799813 _search_fields = ("name" , "description" )
800814
@@ -1087,20 +1101,8 @@ class PointValuesView(ObjectView, ListView):
10871101 }
10881102
10891103
1090- # Utility resources for updating data
1091- class AnalysisConditionsResource (BaseView ):
1092- _m2o = {
1093- "analysis" : "AnalysesView" ,
1094- "condition" : "ConditionsView" ,
1095- }
1096- _nested = {"condition" : "ConditionsView" }
1097- _parent = {"analysis" : "AnalysesView" }
1098- _model = AnalysisConditions
1099- _schema = AnalysisConditionSchema
1100- _composite_key = {}
1101-
1102-
1103- class AnnotationAnalysesResource (BaseView ):
1104+ @view_maker
1105+ class AnnotationAnalysesView (ObjectView , ListView ):
11041106 _m2o = {
11051107 "annotation" : "AnnotationsView" ,
11061108 "analysis" : "AnalysesView" ,
@@ -1114,8 +1116,38 @@ class AnnotationAnalysesResource(BaseView):
11141116 "analysis" : "AnalysesView" ,
11151117 "studyset_study" : "StudysetStudiesResource" ,
11161118 }
1117- _model = AnnotationAnalysis
1118- _schema = AnnotationAnalysisSchema
1119+
1120+ def eager_load (self , q , args = None ):
1121+ q = q .options (
1122+ joinedload (AnnotationAnalysis .analysis )
1123+ .load_only (Analysis .id , Analysis .name )
1124+ .options (raiseload ("*" , sql_only = True )),
1125+ joinedload (AnnotationAnalysis .studyset_study ).options (
1126+ joinedload (StudysetStudy .study )
1127+ .load_only (
1128+ Study .id ,
1129+ Study .name ,
1130+ Study .year ,
1131+ Study .authors ,
1132+ Study .publication ,
1133+ )
1134+ .options (raiseload ("*" , sql_only = True ))
1135+ ),
1136+ )
1137+
1138+ return q
1139+
1140+
1141+ # Utility resources for updating data
1142+ class AnalysisConditionsResource (BaseView ):
1143+ _m2o = {
1144+ "analysis" : "AnalysesView" ,
1145+ "condition" : "ConditionsView" ,
1146+ }
1147+ _nested = {"condition" : "ConditionsView" }
1148+ _parent = {"analysis" : "AnalysesView" }
1149+ _model = AnalysisConditions
1150+ _schema = AnalysisConditionSchema
11191151 _composite_key = {}
11201152
11211153
0 commit comments