22import bson .objectid
33import copy
44import datetime
5- import pymongo
65
76from ..web .errors import APIStorageException , APIConflictException , APINotFoundException
87from . import consistencychecker
@@ -117,12 +116,23 @@ def _get_el(self, _id, query_params):
117116 if result and result .get (self .list_name ):
118117 return result .get (self .list_name )[0 ]
119118
119+ def _update_session_compliance (self , _id ):
120+ if self .cont_name in ['sessions' , 'acquisitions' ]:
121+ if self .cont_name == 'sessions' :
122+ session_id = _id
123+ else :
124+ session_id = AcquisitionStorage ().get_container (_id ).get ('session' )
125+ SessionStorage ().recalc_session_compliance (session_id )
126+
120127
121128class FileStorage (ListStorage ):
122129
123130 def __init__ (self , cont_name ):
124131 super (FileStorage ,self ).__init__ (cont_name , 'files' , use_object_id = True )
125132
133+ def _create_jobs (self , container_before ):
134+ container_after = self .get_container (container_before ['_id' ])
135+ return rules .create_jobs (config .db , container_before , container_after , self .cont_name )
126136
127137 def _update_el (self , _id , query_params , payload , exclude_params ):
128138 container_before = self .get_container (_id )
@@ -147,11 +157,9 @@ def _update_el(self, _id, query_params, payload, exclude_params):
147157 '$set' : mod_elem
148158 }
149159
150- container_after = self .dbc .find_one_and_update (query , update , return_document = pymongo .collection .ReturnDocument .AFTER )
151- if not container_after :
152- raise APINotFoundException ('Could not find and modify {} {}. file not updated' .format (_id , self .cont_name ))
153-
154- jobs_spawned = rules .create_jobs (config .db , container_before , container_after , self .cont_name )
160+ self .dbc .find_one_and_update (query , update )
161+ self ._update_session_compliance (_id )
162+ jobs_spawned = self ._create_jobs (container_before )
155163
156164 return {
157165 'modified' : 1 ,
@@ -164,12 +172,7 @@ def _delete_el(self, _id, query_params):
164172 if f ['name' ] == query_params ['name' ]:
165173 f ['deleted' ] = datetime .datetime .utcnow ()
166174 result = self .dbc .update_one ({'_id' : _id }, {'$set' : {'files' : files , 'modified' : datetime .datetime .utcnow ()}})
167- if self .cont_name in ['sessions' , 'acquisitions' ]:
168- if self .cont_name == 'sessions' :
169- session_id = _id
170- else :
171- session_id = AcquisitionStorage ().get_container (_id ).get ('session' )
172- SessionStorage ().recalc_session_compliance (session_id )
175+ self ._update_session_compliance (_id )
173176 return result
174177
175178 def _get_el (self , _id , query_params ):
@@ -217,9 +220,13 @@ def modify_info(self, _id, query_params, payload):
217220 else :
218221 update ['$set' ]['modified' ] = datetime .datetime .utcnow ()
219222
220- return self .dbc .update_one (query , update )
223+ result = self .dbc .update_one (query , update )
224+ self ._update_session_compliance (_id )
225+ return result
226+
221227
222228 def modify_classification (self , _id , query_params , payload ):
229+ container_before = self .get_container (_id )
223230 update = {'$set' : {'modified' : datetime .datetime .utcnow ()}}
224231
225232 if self .use_object_id :
@@ -265,6 +272,9 @@ def modify_classification(self, _id, query_params, payload):
265272
266273 self .dbc .update_one (query , d_update )
267274
275+ self ._update_session_compliance (_id )
276+ self ._create_jobs (container_before )
277+
268278
269279
270280class StringListStorage (ListStorage ):
0 commit comments