Source code for vmware.vapi.protocol.server.async_api_handler_adapter
"""
Async api handler adapter
"""
__author__ = 'VMware, Inc.'
__copyright__ = 'Copyright 2011 VMware, Inc. All rights reserved. -- VMware Confidential'
import logging
from vmware.vapi.protocol.server.api_handler import AsyncApiHandler
logger = logging.getLogger(__name__)
[docs]class PooledAsyncApiHandlerAdapter(AsyncApiHandler):
""" Pooled async api handler adapter """
def __init__(self, api_handler, workers_pool):
"""
Pooled async api handler adapter init
:type api_handler: :class:`vmware.vapi.protocol.server.api_handler.ApiHandler`
:param api_handler: api handler
:type workers_pool: :class:`object` with function 'queue_work'.
e.g. :class:`vmware.vapi.lib.thread_pool.ThreadPool`
:param workers_pool: worker pool object
"""
AsyncApiHandler.__init__(self)
self.handler = api_handler
self.workers_pool = workers_pool
[docs] def async_handle_request(self, request, state_change_cb=None):
def do_work():
""" do work """
try:
response = self.handler.handle_request(request)
if state_change_cb:
state_change_cb(self.SUCCESS, response)
except Exception as err:
import traceback
stackTrace = traceback.format_exc()
logger.critical(stackTrace)
if state_change_cb:
state_change_cb(self.ERROR, err)
self.workers_pool.queue_work(do_work)
[docs] def handle_request(self, request):
raise NotImplementedError