def run(): WorkIndex.objects.all().delete() WorkPeriodIndex.objects.all().delete() objects = [] period_objects = [] for work in Work.objects.annotate(record_count=models.Count('record')): objects.append(WorkIndex( work_id=work.id, title=work.title, record_count=work.record_count, )) metadata = work.metadata if metadata: for period in metadata['periods']: period_objects.append(WorkPeriodIndex( period=period, work_id=work.id, )) add_ranks(objects) WorkIndex.objects.bulk_create(objects) WorkPeriodIndex.objects.bulk_create(period_objects) objects = [] for mapping in TitleMapping.objects.all(): objects.append(WorkTitleIndex( key=make_key(mapping.title), work_id=mapping.work_id, )) WorkTitleIndex.objects.bulk_create(objects)
def handle(self, *args, **options): with transaction.atomic(): WorkIndex.objects.all().delete() objects = [] for work in Work.objects.annotate(record_count=models.Count('record')): objects.append(WorkIndex( work_id=work.id, title=work.title, record_count=work.record_count, )) add_ranks(objects) WorkIndex.objects.bulk_create(objects) objects = [] for mapping in TitleMapping.objects.all(): objects.append(WorkTitleIndex( key=make_key(mapping.title), work_id=mapping.work_id, )) WorkTitleIndex.objects.bulk_create(objects)
def run(): WorkIndex.objects.all().delete() WorkPeriodIndex.objects.all().delete() WorkAttributeIndex.objects.all().delete() objects = [] period_objects = [] attr_objects = [] attr_map = collections.defaultdict(set) for work in Work.objects.annotate(record_count=models.Count('record')): objects.append(WorkIndex( work_id=work.id, title=work.title, record_count=work.record_count, blacklisted=work.blacklisted, )) metadata = work.metadata if metadata: is_first = True for period in metadata['periods']: period_objects.append(WorkPeriodIndex( period=period, work_id=work.id, is_first_period=is_first, )) is_first = False studios = metadata.get('studio') if isinstance(studios, basestring): studios = [studios] if studios: studio_set = attr_map['studio'] for studio in studios: if studio not in studio_set: attr_objects.append(WorkAttributeIndex(key='studio', value=studio)) studio_set.add(studio) schedule_jp = metadata.get('schedule') if schedule_jp: if not isinstance(schedule_jp, basestring): if len(schedule_jp) == 2: broadcasts = schedule_jp[1] else: broadcasts = schedule_jp[0] if broadcasts and isinstance(broadcasts, basestring): broadcasts = [broadcasts] broadcast_set = attr_map['broadcast'] for broadcast in broadcasts: if broadcast not in broadcast_set: attr_objects.append(WorkAttributeIndex(key='broadcast', value=broadcast)) broadcast_set.add(broadcast) add_ranks(objects) WorkIndex.objects.bulk_create(objects) WorkPeriodIndex.objects.bulk_create(period_objects) WorkAttributeIndex.objects.bulk_create(attr_objects) objects = [] for mapping in TitleMapping.objects.all(): objects.append(WorkTitleIndex( key=make_key(mapping.title), work_id=mapping.work_id, )) WorkTitleIndex.objects.bulk_create(objects)