@@ -139,9 +139,18 @@ def add_arguments(self, parser):
139139 action = "store_true" ,
140140 help = (
141141 "Delete all existing triage rulesets in the dataspace before recreating them."
142- " This also removes all associated product assignments and triage records."
142+ " This also removes all associated product assignments and triage records,"
143+ " and every product using these rulesets will need to be reassigned manually"
144+ " afterward."
143145 ),
144146 )
147+ parser .add_argument (
148+ "--noinput" ,
149+ "--no-input" ,
150+ action = "store_false" ,
151+ dest = "interactive" ,
152+ help = "Tells Django to NOT prompt the user for input of any kind." ,
153+ )
145154
146155 def handle (self , * args , ** options ):
147156 dataspace_name = options ["dataspace" ]
@@ -152,62 +161,68 @@ def handle(self, *args, **options):
152161 raise CommandError (f'Dataspace "{ dataspace_name } " does not exist.' )
153162
154163 if options ["reset" ]:
164+ if options ["interactive" ]:
165+ confirm = input (
166+ "You have requested a reset of the triage rulesets in dataspace"
167+ f' "{ dataspace_name } ".\n '
168+ "This will delete all triage rulesets and analysis presets in this"
169+ " dataspace, along with every associated product assignment and triage"
170+ " record. Every product using these rulesets will need to be reassigned"
171+ " manually afterward.\n "
172+ "Are you sure you want to do this?\n \n "
173+ " Type 'yes' to continue, or 'no' to cancel: "
174+ )
175+ else :
176+ confirm = "yes"
177+
178+ if confirm != "yes" :
179+ self .stdout .write ("Reset cancelled." )
180+ return
181+
155182 deleted_rulesets , _ = TriageRuleset .objects .filter (dataspace = dataspace ).delete ()
156183 deleted_presets , _ = AnalysisPreset .objects .filter (dataspace = dataspace ).delete ()
157184 self .stdout .write (
158185 f" Deleted { deleted_rulesets } existing ruleset(s) and { deleted_presets } preset(s)."
159186 )
187+ elif TriageRuleset .objects .filter (dataspace = dataspace ).exists ():
188+ raise CommandError (
189+ f'Dataspace "{ dataspace_name } " already has triage rulesets.'
190+ " Use --reset to delete and recreate them."
191+ )
160192
161- ruleset_created_count = 0
162193 for ruleset_data in REFERENCE_RULESETS :
163- _ , created = TriageRuleset .objects .get_or_create (
194+ TriageRuleset .objects .create (
164195 dataspace = dataspace ,
165196 name = ruleset_data ["name" ],
166- defaults = {
167- "description" : ruleset_data ["description" ],
168- "recommended_action" : ruleset_data ["recommended_action" ],
169- "precedence" : ruleset_data ["precedence" ],
170- "rules_config" : ruleset_data ["rules_config" ],
171- "enabled" : True ,
172- },
197+ description = ruleset_data ["description" ],
198+ recommended_action = ruleset_data ["recommended_action" ],
199+ precedence = ruleset_data ["precedence" ],
200+ rules_config = ruleset_data ["rules_config" ],
201+ enabled = True ,
173202 )
174- if created :
175- ruleset_created_count += 1
176- self .stdout .write (f" Created: { ruleset_data ['name' ]} " )
177- else :
178- self .stdout .write (f" Already exists: { ruleset_data ['name' ]} " )
203+ self .stdout .write (f" Created: { ruleset_data ['name' ]} " )
179204
180- preset_created_count = 0
181205 for preset_data in REFERENCE_PRESETS :
182- ruleset_name = preset_data ["ruleset_name" ]
183- preset , preset_created = AnalysisPreset .objects .get_or_create (
206+ preset = AnalysisPreset .objects .create (
184207 dataspace = dataspace ,
185208 name = preset_data ["name" ],
186- defaults = {
187- "description" : preset_data .get ("description" , "" ),
188- "state" : preset_data .get ("state" , "" ),
189- "justification" : preset_data .get ("justification" , "" ),
190- "responses" : preset_data .get ("responses" ),
191- "detail" : preset_data .get ("detail" , "" ),
192- },
209+ description = preset_data .get ("description" , "" ),
210+ state = preset_data .get ("state" , "" ),
211+ justification = preset_data .get ("justification" , "" ),
212+ responses = preset_data .get ("responses" ),
213+ detail = preset_data .get ("detail" , "" ),
193214 )
194- if preset_created :
195- preset_created_count += 1
196- self .stdout .write (f" Created preset: { preset_data ['name' ]} " )
197- else :
198- self .stdout .write (f" Already exists: { preset_data ['name' ]} " )
199- try :
200- ruleset = TriageRuleset .objects .get (dataspace = dataspace , name = ruleset_name )
201- if ruleset .analysis_preset_id != preset .pk :
202- ruleset .analysis_preset = preset
203- ruleset .save (update_fields = ["analysis_preset" ])
204- self .stdout .write (f" Linked preset to ruleset: { ruleset_name } " )
205- except TriageRuleset .DoesNotExist :
206- self .stdout .write (f" Ruleset not found: { ruleset_name } " )
215+ self .stdout .write (f" Created preset: { preset_data ['name' ]} " )
216+
217+ ruleset_name = preset_data ["ruleset_name" ]
218+ ruleset = TriageRuleset .objects .get (dataspace = dataspace , name = ruleset_name )
219+ ruleset .analysis_preset = preset
220+ ruleset .save (update_fields = ["analysis_preset" ])
221+ self .stdout .write (f" Linked preset to ruleset: { ruleset_name } " )
207222
208223 self .stdout .write (
209224 self .style .SUCCESS (
210- f"{ ruleset_created_count } ruleset(s) and { preset_created_count } preset(s)"
225+ f"{ len ( REFERENCE_RULESETS ) } ruleset(s) and { len ( REFERENCE_PRESETS ) } preset(s)"
211226 f" created in dataspace '{ dataspace_name } '."
212227 )
213228 )
0 commit comments