def get_night_blocks(level): """ Helper method parsing blocks into a dictionary format 'sendable' to javascript. """ coreBlockTypes = ['move_forwards', 'turn_left', 'turn_right', 'turn_around', 'controls_repeat', 'controls_repeat_until', 'controls_if', 'at_destination', 'road_exists', 'dead_end'] coreNightBlocks = Block.objects.filter(type__in=coreBlockTypes) coreNightLevelBlocks = map(lambda block: LevelBlock(level=level, type=block), coreNightBlocks) existingLevelBlocks = LevelBlock.objects.filter(level=level) remainingBlocks = existingLevelBlocks.exclude(type__type__in=coreBlockTypes).order_by('type') levelBlocks = sorted(list(chain(coreNightLevelBlocks, remainingBlocks)), key=lambda levelBlock: levelBlock.type.id) return [{'type': lb.type.type, 'number': lb.number} for lb in levelBlocks]
def set_blocks_inner(level, blocks, LevelBlock, Block): """ Helper method creating LevelBlock objects given a list of blocks in dictionary form.""" LevelBlock.objects.filter(level=level).delete() level_blocks = [] dictionary = blocks_dictionary(blocks, Block) for data in blocks: level_blocks.append( LevelBlock(level_id=level.id, type=dictionary[data['type']], number=data['number'] if 'number' in data else None)) LevelBlock.objects.bulk_create(level_blocks)