4141from scanpipe .api .serializers import CodebaseResourceSerializer
4242from scanpipe .api .serializers import DiscoveredDependencySerializer
4343from scanpipe .api .serializers import DiscoveredPackageSerializer
44+ from scanpipe .api .serializers import InputSerializer
4445from scanpipe .api .serializers import PipelineSerializer
46+ from scanpipe .api .serializers import ProjectArchiveSerializer
4547from scanpipe .api .serializers import ProjectMessageSerializer
48+ from scanpipe .api .serializers import ProjectResetSerializer
4649from scanpipe .api .serializers import ProjectSerializer
4750from scanpipe .api .serializers import RunSerializer
4851from scanpipe .api .serializers import WebhookSubscriptionSerializer
@@ -356,7 +359,7 @@ def add_pipeline(self, request, *args, **kwargs):
356359 }
357360 return ErrorResponse (message )
358361
359- @action (detail = True , methods = ["get" , "post" ])
362+ @action (detail = True , methods = ["get" , "post" ], serializer_class = InputSerializer )
360363 def add_input (self , request , * args , ** kwargs ):
361364 project = self .get_object ()
362365
@@ -365,9 +368,15 @@ def add_input(self, request, *args, **kwargs):
365368 "Cannot add inputs once a pipeline has started to execute."
366369 )
367370
368- upload_file = request .data .get ("upload_file" )
369- upload_file_tag = request .data .get ("upload_file_tag" , "" )
370- input_urls = request .data .get ("input_urls" , [])
371+ # Validate input using the action serializer
372+ serializer = self .get_serializer (data = request .data )
373+ if not serializer .is_valid ():
374+ return ErrorResponse (serializer .errors )
375+
376+ # Extract validated data
377+ upload_file = serializer .validated_data .get ("upload_file" )
378+ upload_file_tag = serializer .validated_data .get ("upload_file_tag" , "" )
379+ input_urls = serializer .validated_data .get ("input_urls" , [])
371380
372381 if not (upload_file or input_urls ):
373382 return ErrorResponse ("upload_file or input_urls required." )
@@ -393,24 +402,25 @@ def add_input(self, request, *args, **kwargs):
393402 def add_webhook (self , request , * args , ** kwargs ):
394403 project = self .get_object ()
395404
396- # Validate input using the serializer
397- serializer = WebhookSubscriptionSerializer (data = request .data )
398- if serializer .is_valid ():
399- project .add_webhook_subscription (** serializer .validated_data )
400- return Response (
401- {"status" : "Webhook added." }, status = status .HTTP_201_CREATED
402- )
405+ # Validate input using the action serializer
406+ serializer = self .get_serializer (data = request .data )
407+ if not serializer .is_valid ():
408+ return ErrorResponse (serializer .errors )
403409
404- # Return validation errors
405- return ErrorResponse ( serializer . errors )
410+ project . add_webhook_subscription ( ** serializer . validated_data )
411+ return Response ({ "status" : "Webhook added." }, status = status . HTTP_201_CREATED )
406412
407413 def destroy (self , request , * args , ** kwargs ):
408414 try :
409415 return super ().destroy (request , * args , ** kwargs )
410416 except RunInProgressError :
411417 return ErrorResponse ("Cannot delete project while a run is in progress." )
412418
413- @action (detail = True , methods = ["get" , "post" ])
419+ @action (
420+ detail = True ,
421+ methods = ["get" , "post" ],
422+ serializer_class = ProjectArchiveSerializer ,
423+ )
414424 def archive (self , request , * args , ** kwargs ):
415425 project = self .get_object ()
416426
@@ -423,36 +433,41 @@ def archive(self, request, *args, **kwargs):
423433 )
424434 return Response ({"status" : message })
425435
436+ # Validate input using the action serializer
437+ serializer = self .get_serializer (data = request .data )
438+ if not serializer .is_valid ():
439+ return ErrorResponse (serializer .errors )
440+
426441 try :
427- project .archive (
428- remove_input = request .data .get ("remove_input" ),
429- remove_codebase = request .data .get ("remove_codebase" ),
430- remove_output = request .data .get ("remove_output" ),
431- )
442+ project .archive (** serializer .validated_data )
432443 except RunInProgressError :
433444 return ErrorResponse ("Cannot archive project while a run is in progress." )
434445
435446 return Response ({"status" : f"The project { project } has been archived." })
436447
437- @action (detail = True , methods = ["get" , "post" ])
448+ @action (
449+ detail = True ,
450+ methods = ["get" , "post" ],
451+ serializer_class = ProjectResetSerializer ,
452+ )
438453 def reset (self , request , * args , ** kwargs ):
439454 project = self .get_object ()
440455
441456 if self .request .method == "GET" :
442457 message = "POST on this URL to reset the project."
443458 return Response ({"status" : message })
444459
460+ # Validate input using the action serializer
461+ serializer = self .get_serializer (data = request .data )
462+ if not serializer .is_valid ():
463+ return ErrorResponse (serializer .errors )
464+
445465 try :
446- project .reset (
447- keep_input = request .data .get ("keep_input" , True ),
448- restore_pipelines = request .data .get ("restore_pipelines" , False ),
449- execute_now = request .data .get ("execute_now" , False ),
450- )
466+ project .reset (** serializer .validated_data )
451467 except RunInProgressError :
452468 return ErrorResponse ("Cannot reset project while a run is in progress." )
453- else :
454- message = f"The { project } project has been reset."
455- return Response ({"status" : message })
469+
470+ return Response ({"status" : f"The { project } project has been reset." })
456471
457472 @action (detail = True , methods = ["get" ])
458473 def outputs (self , request , * args , ** kwargs ):
0 commit comments