1
1
from datetime import date , datetime , timedelta
2
+ from django .utils .timezone import make_aware , get_default_timezone
2
3
3
4
from django .core .management .base import BaseCommand
4
5
@@ -17,26 +18,37 @@ def add_arguments(self, parser):
17
18
def handle (self , * args , ** options ):
18
19
# if start_date is not defined, set it as yesterday
19
20
try :
20
- start_date = date . fromisoformat (options ["start_date" ])
21
+ start_date = datetime . strptime (options ["start_date" ], "%Y-%m-%d" )
21
22
except (ValueError , TypeError ):
22
- start_date = date .today () - timedelta (days = 1 )
23
+ start_date = datetime .now () - timedelta (days = 1 )
24
+
23
25
# if end_date is not defined, set it as today
24
26
try :
25
- end_date = date . fromisoformat (options ["end_date" ])
27
+ end_date = datetime . strptime (options ["end_date" ], "%Y-%m-%d" )
26
28
except (ValueError , TypeError ):
27
29
end_date = datetime .now ()
28
30
31
+ # Convert to timezone-aware datetime
32
+ start_date = make_aware (start_date , timezone = get_default_timezone ())
33
+ end_date = make_aware (end_date , timezone = get_default_timezone ())
34
+
35
+ # Query the Changeset table using timezone-aware datetimes
29
36
cl = Changeset .objects .filter (
30
37
date__gte = start_date , date__lte = end_date
31
- ).values_list ("id" )
32
- cl = [c [0 ] for c in cl ]
38
+ ).values_list ("id" , flat = True )
39
+
40
+ if not cl :
41
+ self .stdout .write ("No missing changesets found in the given date range." )
42
+ return
43
+
44
+ id = max (cl ) # Last ID in the list
45
+ final = min (cl ) # First ID in the list
33
46
34
- id = cl [len (cl ) - 1 ]
35
- final = cl [0 ]
36
- while id < final :
47
+ while id >= final :
37
48
if id not in cl :
38
49
try :
39
50
create_changeset (id )
40
51
except Exception as e :
41
- self .stdout .write ("Failed to import changeset {}: {}" .format (id , e ))
42
- id = id + 1
52
+ self .stdout .write (f"Failed to import changeset { id } : { e } " )
53
+ id -= 1
54
+
0 commit comments