54 lines
1.6 KiB
Python
54 lines
1.6 KiB
Python
import logging
|
|
import uuid
|
|
|
|
from data.database import User, db
|
|
from app import app
|
|
|
|
LOGGER = logging.getLogger(__name__)
|
|
|
|
def backfill_user_uuids():
|
|
""" Generates UUIDs for any Users without them. """
|
|
LOGGER.setLevel(logging.DEBUG)
|
|
LOGGER.debug('User UUID Backfill: Began execution')
|
|
|
|
|
|
# Check to see if any users are missing uuids.
|
|
has_missing_uuids = True
|
|
try:
|
|
User.select(User.id).where(User.uuid >> None).get()
|
|
except User.DoesNotExist:
|
|
has_missing_uuids = False
|
|
|
|
if not has_missing_uuids:
|
|
LOGGER.debug('User UUID Backfill: No migration needed')
|
|
return
|
|
|
|
LOGGER.debug('User UUID Backfill: Starting migration')
|
|
while True:
|
|
batch_user_ids = list(User
|
|
.select(User.id)
|
|
.where(User.uuid >> None)
|
|
.limit(100))
|
|
|
|
if len(batch_user_ids) == 0:
|
|
# There are no users left to backfill. We're done!
|
|
LOGGER.debug('User UUID Backfill: Backfill completed')
|
|
return
|
|
|
|
LOGGER.debug('User UUID Backfill: Found %s records to update', len(batch_user_ids))
|
|
for user_id in batch_user_ids:
|
|
with app.config['DB_TRANSACTION_FACTORY'](db):
|
|
try:
|
|
user = User.select(User.id, User.uuid).where(User.id == user_id).get()
|
|
user.uuid = str(uuid.uuid4())
|
|
user.save(only=[User.uuid])
|
|
except User.DoesNotExist:
|
|
pass
|
|
|
|
|
|
if __name__ == "__main__":
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
logging.getLogger('boto').setLevel(logging.CRITICAL)
|
|
logging.getLogger('peewee').setLevel(logging.CRITICAL)
|
|
|
|
backfill_user_uuids()
|