1
+ import datetime
2
+ import json
3
+
4
+ from django .utils import timezone
1
5
from django .contrib .auth .models import User
2
6
from django .core .management .base import BaseCommand
3
7
@@ -21,6 +25,18 @@ def add_arguments(self, parser):
21
25
default = [],
22
26
help = 'Re-sync VCS provider data for specific users only.' ,
23
27
)
28
+ parser .add_argument (
29
+ '--logged-in-days-ago' ,
30
+ type = int ,
31
+ default = 0 ,
32
+ help = 'Re-sync users logged in in the last days.' ,
33
+ )
34
+ parser .add_argument (
35
+ '--skip-revoked-users' ,
36
+ action = 'store_true' ,
37
+ default = False ,
38
+ help = 'Skip users who revoked our access token (pulled down from Sentry).' ,
39
+ )
24
40
parser .add_argument (
25
41
'--skip-users' ,
26
42
nargs = '+' ,
@@ -49,6 +65,8 @@ def add_arguments(self, parser):
49
65
50
66
def handle (self , * args , ** options ):
51
67
queue = options .get ('queue' )
68
+ logged_in_days_ago = options .get ('logged_in_days_ago' )
69
+ skip_revoked_users = options .get ('skip_revoked_users' )
52
70
sync_users = options .get ('users' )
53
71
skip_users = options .get ('skip_users' )
54
72
max_users = options .get ('max_users' )
@@ -60,6 +78,11 @@ def handle(self, *args, **options):
60
78
socialaccount__isnull = False
61
79
).distinct ()
62
80
81
+ if logged_in_days_ago :
82
+ users = users .filter (
83
+ last_login__gte = timezone .now () - datetime .timedelta (days = logged_in_days_ago ),
84
+ )
85
+
63
86
if not force_sync :
64
87
users = users .filter (
65
88
remote_repository_relations__isnull = True
@@ -77,7 +100,19 @@ def handle(self, *args, **options):
77
100
if skip_users :
78
101
users = users .exclude (username__in = skip_users )
79
102
80
- if sync_users or skip_users :
103
+ revoked_users = []
104
+ if skip_revoked_users :
105
+ # `revoked-users.json` was created by a script pullig down data from Sentry
106
+ # https://gist.github.com/humitos/aba1a004abeb3552fd8ef9a741f5dce1
107
+ revoked_users = json .load (open ('revoked-users.json' , 'r' ))
108
+ users = users .exclude (username__in = revoked_users )
109
+ self .stdout .write (
110
+ self .style .WARNING (
111
+ f'Excluding { len (revoked_users )} revoked users.'
112
+ )
113
+ )
114
+
115
+ if sync_users or skip_users or revoked_users :
81
116
self .stdout .write (
82
117
self .style .SUCCESS (
83
118
f'Found { users .count ()} user(s) with the given parameters'
0 commit comments