コード例 #1
0
ファイル: master_product.py プロジェクト: perldev/zoo
    def create_install_task(self, requested_products: list, products: ProductCollection, parameter_manager: ParametersManager):
        """
        фабричный метод: создать такс с переданными параметрами, с типом COMMAND_INSTALL
        сохранить в базе данных
        зхапустить воркер

        :param requested_products:  те продукты которые выбрал пользователь
        :param products:  продукты для установки (продукты которые выбрал пользователь + зависимости)
        :param parameter_manager:
        :return: номер таска
        """
        title = 'Installing products: {0}'.format(', '.join([product_name for product_name in requested_products]))
        state = {
            'requested_products': requested_products,
            'products': products.to_json_list(),
            'parameters': parameter_manager.get_state()
        }
        settings = Core.get_instance().settings.get_state()

        for product in products.to_json_list():

            state = {
                'requested_products': requested_products,
                'products': product,
                'parameters': parameter_manager.get_state()
            }
            state2save = json.dumps(state, sort_keys=True, indent=1)

            task = Task(
                command=Task.COMMAND_INSTALL,
                title=title,
                params=state2save,
                settings=json.dumps(settings, sort_keys=True, indent=1)
            )
            task.save()
        # production
        # For debug worker uncomment this
        # self.task.execute()
        return task.id