Example #1
0
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)
Example #2
0
    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)
Example #3
0
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)