def do(self): """ Install products by tornado worker """ parameters = None dm = DependencyManager() product_flat_list = [ dm.get_dependencies(product_name) for product_name in self.product_names ] product_list = InstallCommand.flat_deps4products( product_flat_list, False) if self.args_parameters.yml_params: parameters = ParametersParserYmlFile( self.args_parameters.yml_params).get() elif self.args_parameters.json_params: parameters = ParametersParserJsonFile( self.args_parameters.json_params).get() elif self.args_parameters.parameters: parameters = ParametersParserStr( self.args_parameters.parameters).get() else: # then fill with empty params parameters = EmptyParameters().get(product_list) # добывает список продуктов из списка имён products = ProductCollection(product_list, feeds=(self.core.feed, self.core.current), ready_json=True) # парсим параметры установки из запроса # создаём менеджер параметров parameter_manager = ParametersManager(self.core, products, parameters) # все ли параметры заполнены? if parameter_manager.are_all_parameters_filled(): # TODO move TornadoWorker to core # create tornado worker web.taskqueue.tornado_worker.TornadoWorker.create_instance() # всё ок, создаём задание на установку task = TaskFactory.create_task("install", products, parameter_manager) task_id = TaskManager.queue_task(task) callback_exit = lambda job, exit_code: InstallCommand.console_exit( self, job, exit_code) TornadoWorker.start_new_task(task, callback_exit, False) core.core.core_event_loop_start() else: raise InstallCommandError("Not all parameters specified")
def do(self): """ Install products by tornado worker """ parameters = None dm = DependencyManager() product_flat_list = [dm.get_dependencies(product_name) for product_name in self.product_names] product_list = InstallCommand.flat_deps4products(product_flat_list, False) if self.args_parameters.yml_params: parameters = ParametersParserYmlFile(self.args_parameters.yml_params).get() elif self.args_parameters.json_params: parameters = ParametersParserJsonFile(self.args_parameters.json_params).get() elif self.args_parameters.parameters: parameters = ParametersParserStr(self.args_parameters.parameters).get() else: # then fill with empty params parameters = EmptyParameters().get(product_list) # добывает список продуктов из списка имён products = ProductCollection(product_list, feeds=(self.core.feed, self.core.current), ready_json=True) # парсим параметры установки из запроса # создаём менеджер параметров parameter_manager = ParametersManager(self.core, products, parameters) # все ли параметры заполнены? if parameter_manager.are_all_parameters_filled(): # TODO move TornadoWorker to core # create tornado worker web.taskqueue.tornado_worker.TornadoWorker.create_instance() # всё ок, создаём задание на установку task = TaskFactory.create_task("install", products, parameter_manager) task_id = TaskManager.queue_task(task) callback_exit = lambda job, exit_code: InstallCommand.console_exit(self, job, exit_code) TornadoWorker.start_new_task(task, callback_exit, False) core.core.core_event_loop_start() else: raise InstallCommandError("Not all parameters specified")
def install(request): """ Этот вызов используется для передать в веб-интерфейс дерево зависимостей и принять от него запрос на установку. Примеры запросов и ответов: начальный запрос: command: "start" requested_products: [JavaJettyTemplate] ответ: task: id: 168 url: /task/168/ items: paramters: [...] product: name: ... title: ... and: - item 1... - item 2... """ # TODO do not give ability to install application through this function if request.method != 'POST': # принимаем только пост-запросы resp = HttpResponseNotAllowed(['POST']) return resp # джейсон запрос в питоний словарь req = json_request(request) # это начальный запрос? dm = DependencyManager() core = Core.get_instance() # продукты, которые запрошены на установку (без зависимостей) requested_products = req['requested_products'] if req["command"] == "start": # если это начальный запрос, то отдаем дерево зависимостей resp = { 'task': None, "state": "requirements", 'items': [dm.get_dependencies(product_name) for product_name in requested_products] } else: # это запрос на установку # список имён продуктов, которые нужно установить # ВАЖНЫЙ МОМЕНТ (с зависимостями) product_list = [item['product'] for item in req['install_products']] # переворачиваем его product_list.reverse() # добывает спсисоко продуктов из списка имён products = ProductCollection(product_list, feeds=(core.feed, core.current)) # парсим параметры установки из запроса parsed_parameters = ParametersParserJson(req['install_products']).get() # создаём менеджер параметров parameter_manager = ParametersManager(core, products, parsed_parameters) # все ли параметры заполнены? if parameter_manager.are_all_parameters_filled(): # всё ок, создаём задание на установку task = TaskFactory.create_task("install", products, parameter_manager) task_id = TaskManager.queue_task(task) TornadoWorker.start_new_task(task) # и готовим ответ веб-интерфейсу, что уставнока началась resp = { 'task': { 'id': task_id, }, } else: # что-то не так с параметрами, возвращаем в веб морду ошибку resp = { 'task': None, 'items': [dm.get_dependencies(product_name) for product_name in req['requested_products']], 'error': [parameter_manager.get_error(product) for product in products] } return resp
def install(request): """ Этот вызов используется для передать в веб-интерфейс дерево зависимостей и принять от него запрос на установку. Примеры запросов и ответов: начальный запрос: command: "start" requested_products: [JavaJettyTemplate] ответ: task: id: 168 url: /task/168/ items: paramters: [...] product: name: ... title: ... and: - item 1... - item 2... """ # TODO do not give ability to install application through this function if request.method != 'POST': # принимаем только пост-запросы resp = HttpResponseNotAllowed(['POST']) return resp # джейсон запрос в питоний словарь req = json_request(request) # это начальный запрос? dm = DependencyManager() core = Core.get_instance() # продукты, которые запрошены на установку (без зависимостей) requested_products = req['requested_products'] if req["command"] == "start": # если это начальный запрос, то отдаем дерево зависимостей resp = { 'task': None, "state": "requirements", 'items': [ dm.get_dependencies(product_name) for product_name in requested_products ] } else: # это запрос на установку # список имён продуктов, которые нужно установить # ВАЖНЫЙ МОМЕНТ (с зависимостями) product_list = [item['product'] for item in req['install_products']] # переворачиваем его product_list.reverse() # добывает спсисоко продуктов из списка имён products = ProductCollection(product_list, feeds=(core.feed, core.current)) # парсим параметры установки из запроса parsed_parameters = ParametersParserJson(req['install_products']).get() # создаём менеджер параметров parameter_manager = ParametersManager(core, products, parsed_parameters) # все ли параметры заполнены? if parameter_manager.are_all_parameters_filled(): # всё ок, создаём задание на установку task = TaskFactory.create_task("install", products, parameter_manager) task_id = TaskManager.queue_task(task) TornadoWorker.start_new_task(task) # и готовим ответ веб-интерфейсу, что уставнока началась resp = { 'task': { 'id': task_id, }, } else: # что-то не так с параметрами, возвращаем в веб морду ошибку resp = { 'task': None, 'items': [ dm.get_dependencies(product_name) for product_name in req['requested_products'] ], 'error': [parameter_manager.get_error(product) for product in products] } return resp