import logging from data.database import Image, ImageStorage, db from app import app logger = logging.getLogger(__name__) def backfill_parent_id(): logger.setLevel(logging.DEBUG) logger.debug('backfill_parent_id: Starting') logger.debug('backfill_parent_id: This can be a LONG RUNNING OPERATION. Please wait!') # Check for any images without parent has_images = bool(list(Image .select(Image.id) .join(ImageStorage) .where(Image.parent >> None, Image.ancestors != '/', ImageStorage.uploading == False) .limit(1))) if not has_images: logger.debug('backfill_parent_id: No migration needed') return while True: # Load the record from the DB. batch_images_ids = list(Image .select(Image.id) .join(ImageStorage) .where(Image.parent >> None, Image.ancestors != '/', ImageStorage.uploading == False) .limit(100)) if len(batch_images_ids) == 0: logger.debug('backfill_parent_id: Completed') return for image_id in batch_images_ids: with app.config['DB_TRANSACTION_FACTORY'](db): try: image = Image.select(Image.id, Image.ancestors).where(Image.id == image_id).get() image.parent = image.ancestors.split('/')[-2] image.save() except Image.DoesNotExist: pass if __name__ == "__main__": logging.basicConfig(level=logging.DEBUG) logging.getLogger('peewee').setLevel(logging.CRITICAL) backfill_parent_id()