@@ -242,15 +242,8 @@ def save(self, *args, **kwargs):
242
242
self .status = self .STATUS_REVERSE [status ]
243
243
cache .delete (self .DEFAULT_CACHE_KEY )
244
244
super ().save (* args , ** kwargs )
245
- # Each micro release EOLs the previous one in the same series.
246
- if self .status == "f" and self .micro > 0 and self .is_active :
247
- (
248
- type (self )
249
- .objects .filter (
250
- major = self .major , minor = self .minor , micro = self .micro - 1 , status = "f"
251
- )
252
- .update (eol_date = self .date )
253
- )
245
+ if self .is_active :
246
+ self .set_previous_release_as_eol ()
254
247
255
248
def __str__ (self ):
256
249
return self .version
@@ -313,3 +306,27 @@ def validate_artifact_name(self, name, suffix):
313
306
regex = f"^[Dd]jango-{ re .escape (version )} { re .escape (suffix )} $"
314
307
message = f"Filename { name } does not match pattern { regex } ."
315
308
return RegexValidator (regex , message = message , code = "invalid_name" )(name )
309
+
310
+ def set_previous_release_as_eol (self ):
311
+ """Handles setting EOL date for the previous release in the series."""
312
+ previous_release_kwargs = {
313
+ "major" : self .major ,
314
+ "minor" : self .minor ,
315
+ "micro" : self .micro ,
316
+ "status" : self .status ,
317
+ "eol_date__isnull" : True ,
318
+ }
319
+ if self .iteration > 1 :
320
+ previous_release_kwargs ["iteration" ] = self .iteration - 1
321
+ elif self .status == "b" :
322
+ previous_release_kwargs ["status" ] = "a"
323
+ elif self .status == "c" :
324
+ previous_release_kwargs ["status" ] = "b"
325
+ elif self .status == "f" and self .micro == 0 :
326
+ previous_release_kwargs ["status" ] = "c"
327
+ elif self .status == "f" and self .micro > 0 :
328
+ previous_release_kwargs ["micro" ] = self .micro - 1
329
+
330
+ self .__class__ .objects .filter (** previous_release_kwargs ).update (
331
+ eol_date = self .date
332
+ )
0 commit comments