Skip to content

Commit f5e01a6

Browse files
committed
Improvements to sync_vcs_data.py script
1 parent 1eea07f commit f5e01a6

File tree

1 file changed

+36
-1
lines changed

1 file changed

+36
-1
lines changed

readthedocs/oauth/management/commands/sync_vcs_data.py

+36-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
import datetime
2+
import json
3+
4+
from django.utils import timezone
15
from django.contrib.auth.models import User
26
from django.core.management.base import BaseCommand
37

@@ -21,6 +25,18 @@ def add_arguments(self, parser):
2125
default=[],
2226
help='Re-sync VCS provider data for specific users only.',
2327
)
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+
)
2440
parser.add_argument(
2541
'--skip-users',
2642
nargs='+',
@@ -49,6 +65,8 @@ def add_arguments(self, parser):
4965

5066
def handle(self, *args, **options):
5167
queue = options.get('queue')
68+
logged_in_days_ago = options.get('logged_in_days_ago')
69+
skip_revoked_users = options.get('skip_revoked_users')
5270
sync_users = options.get('users')
5371
skip_users = options.get('skip_users')
5472
max_users = options.get('max_users')
@@ -60,6 +78,11 @@ def handle(self, *args, **options):
6078
socialaccount__isnull=False
6179
).distinct()
6280

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+
6386
if not force_sync:
6487
users = users.filter(
6588
remote_repository_relations__isnull=True
@@ -77,7 +100,19 @@ def handle(self, *args, **options):
77100
if skip_users:
78101
users = users.exclude(username__in=skip_users)
79102

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:
81116
self.stdout.write(
82117
self.style.SUCCESS(
83118
f'Found {users.count()} user(s) with the given parameters'

0 commit comments

Comments
 (0)