@@ -127,7 +127,7 @@ def create_observation(
127127 observation : ObservationPostBody
128128 ) -> UUID :
129129 datastream = datastream_service .get_datastream_for_action (
130- user = self .request .authenticated_user , uid = observation .datastream , action = "view" # noqa
130+ user = self .request .authenticated_user , uid = observation .datastream . id , action = "view" # noqa
131131 )
132132
133133 if not Observation .can_user_create (user = self .request .authenticated_user , # noqa
@@ -159,7 +159,7 @@ def create_observations(
159159
160160 for datastream_id , datastream_observations in observations .items ():
161161 datastream = datastream_service .get_datastream_for_action (
162- user = self .request .authenticated_user , uid = observation . datastream , action = "view" # noqa
162+ user = self .request .authenticated_user , uid = datastream_id , action = "view" # noqa
163163 )
164164
165165 if not Observation .can_user_create (user = self .request .authenticated_user , # noqa
@@ -214,15 +214,48 @@ def delete_observation(
214214 self ,
215215 observation_id : str
216216 ) -> None :
217- pass
217+
218+ observation = observation_service .get_observation_for_action (
219+ user = self .request .authenticated_user , uid = observation_id , action = "delete" # noqa
220+ )
221+
222+ datastream_id = observation .datastream .id
223+ observation .delete ()
224+
225+ self .update_value_count (datastream_id = datastream_id )
218226
219227 def delete_observations (
220228 self ,
221229 datastream_id : UUID ,
222230 start_time : Optional [datetime ] = None ,
223231 end_time : Optional [datetime ] = None
224232 ) -> None :
225- return None
233+
234+ datastream = datastream_service .get_datastream_for_action (
235+ user = self .request .authenticated_user , uid = datastream_id , action = "view" # noqa
236+ )
237+
238+ observations_count = Observation .objects .filter (
239+ datastream = datastream ,
240+ phenomenon_time__gte = start_time ,
241+ phenomenon_time__lte = end_time
242+ ).count ()
243+
244+ observations = Observation .objects .filter (
245+ datastream_id = datastream_id ,
246+ phenomenon_time__gte = start_time ,
247+ phenomenon_time__lte = end_time
248+ ).removable (user = self .request .authenticated_user ) # noqa
249+
250+ if observations_count == 0 :
251+ raise HttpError (400 , "No observations to delete within the given range" )
252+
253+ if observations_count != observations .count ():
254+ raise HttpError (403 , "You do not have permission to delete one or more of these observations" )
255+
256+ observations .delete ()
257+
258+ self .update_value_count (datastream_id = datastream .id )
226259
227260 @staticmethod
228261 def update_value_count (datastream_id : UUID ) -> None :
@@ -231,9 +264,7 @@ def update_value_count(datastream_id: UUID) -> None:
231264 datastream_id = datastream_id
232265 )
233266
234- datastream = Datastream .objects .get (
235- datastream_id = datastream_id
236- )
267+ datastream = Datastream .objects .get (pk = datastream_id )
237268
238269 datastream .value_count = int (observation_query .count ())
239270 datastream .save ()
0 commit comments