Ejemplo n.º 1
0
def recursive_fill_blocks(container, blocks: list, parent_block, parents: str,
                          blocks_path: str):
    """Рекурсивное создание блоков контейнера
       :param container: контейнер блоков
       :param blocks: блоки, которые надо создать в контейнере
       :param parent_block: родительский блок
       :param parents: родительский блок
       :param blocks_path: путь к изображениям блоков
    """
    for json_obj in blocks:
        if not parents == json_obj['parents']:
            continue
        block = Blocks(container=container)
        for k, v in json_obj.items():
            if k in ('img', 'id', 'parents', 'container'):
                continue
            setattr(block, k, v)
        if parent_block:
            block.parents = '%s_%s' % (parent_block.parents
                                       or '', parent_block.id)
        block.save()
        imga = json_obj.get('img')
        if imga:
            copy_file(os.path.join(blocks_path, imga),
                      os.path.join(block.get_folder(), imga))
            Blocks.objects.filter(pk=block.id).update(img=imga)
        # Теперь надо найти подблоки этого блока
        recursive_fill_blocks(
            container, blocks, block,
            '%s_%s' % (json_obj['parents'] or '', json_obj['id']), blocks_path)
Ejemplo n.º 2
0
def fill_catalogue(branches: list,
                   container: Containers,
                   parent: Blocks = None):
    """Заполнить каталог иерархией
       :param branches: рубрики
       :param container: контейнер каталога
       :param parents: родительский блок
    """
    for branch in branches:
        if branch['name'].startswith('__'):
            continue
        tag = 'cat_%s' % branch['id']
        analog = container.blocks_set.filter(tag=tag).first()
        if not analog:
            analog = Blocks(tag=tag, container=container)
        analog.name = branch['name']
        if parent:
            root_parents = parent.parents if parent.parents else ''
            analog.parents = '%s_%s' % (root_parents, parent.id)
        analog.state = 4
        analog.save()
        sub_branches = branch.get('branches')
        if sub_branches:
            fill_catalogue(sub_branches, container, analog)