Esempio n. 1
0
def execute_task(task, handlers_map=None):
    """Execute mapper's executor task.

  This will try to determine the correct mapper handler for the task, will set
  up all mock environment necessary for task execution, and execute the task
  itself.

  This function can be used for functional-style testing of functionality
  depending on mapper framework.
  """
    if not handlers_map:
        handlers_map = main.create_handlers_map()

    url = task["url"]
    handler = None

    for (re_str, handler_class) in handlers_map:
        re_str = "^" + re_str + "($|\\?)"
        if re.match(re_str, url):
            handler = handler_class()
            break

    if not handler:
        raise Exception("Can't determine handler for %s" % task)

    handler.initialize(mock_webapp.MockRequest(), mock_webapp.MockResponse())
    handler.request.set_url(url)

    handler.request.environ["HTTP_HOST"] = "myapp.appspot.com"
    for k, v in task.get("headers", []):
        handler.request.headers[k] = v
        environ_key = "HTTP_" + k.replace("-", "_").upper()
        handler.request.environ[environ_key] = v
    handler.request.environ["HTTP_X_APPENGINE_TASKNAME"] = (task.get(
        "name", "default_task_name"))
    handler.request.environ["HTTP_X_APPENGINE_QUEUENAME"] = (task.get(
        "queue_name", "default"))
    handler.request.environ["PATH_INFO"] = handler.request.path

    saved_os_environ = os.environ
    try:
        os.environ = dict(os.environ)
        os.environ.update(handler.request.environ)
        if task["method"] == "POST":
            for k, v in decode_task_payload(task).items():
                handler.request.set(k, v)
            handler.post()
        elif task["method"] == "GET":
            handler.get()
        else:
            raise Exception("Unsupported method: %s" % task.method)
    finally:
        os.environ = saved_os_environ

    if handler.response.status != 200:
        raise Exception("Handler failure: %s (%s). \nTask: %s\nHandler: %s" %
                        (handler.response.status,
                         handler.response.status_message, task, handler))
Esempio n. 2
0
def execute_task(task, handlers_map=None):
    """Execute mapper's executor task.

  This will try to determine the correct mapper handler for the task, will set
  up all mock environment necessary for task execution, and execute the task
  itself.

  This function can be used for functional-style testing of functionality
  depending on mapper framework.
  """
    if not handlers_map:
        handlers_map = main.create_handlers_map()

    url = task["url"]
    handler = None

    for (re_str, handler_class) in handlers_map:
        if re.match(re_str, url):
            handler = handler_class()
            break

    if not handler:
        raise Exception("Can't determine handler for %s" % task)

    handler.initialize(mock_webapp.MockRequest(), mock_webapp.MockResponse())
    handler.request.set_url(url)

    for k, v in task["headers"]:
        handler.request.headers[k] = v
        environ_key = "HTTP_" + k.replace("-", "_").upper()
        handler.request.environ[environ_key] = v
    handler.request.environ["HTTP_X_APPENGINE_TASKNAME"] = task["name"]
    handler.request.environ["HTTP_X_APPENGINE_QUEUENAME"] = task["queue_name"]
    handler.request.environ["PATH_INFO"] = handler.request.path

    saved_os_environ = os.environ
    try:
        os.environ = dict(os.environ)
        os.environ.update(handler.request.environ)
        if task["method"] == "POST":
            for k, v in decode_task_payload(task).items():
                handler.request.set(k, v)
            handler.post()
        elif task["method"] == "GET":
            handler.get()
        else:
            raise Exception("Unsupported method: %s" % task.method)
    finally:
        os.environ = saved_os_environ

    if handler.response.status != 200:
        raise Exception(
            "Handler failure: %s (%s). \nTask: %s\nHandler: %s"
            % (handler.response.status, handler.response.status_message, task, handler)
        )
Esempio n. 3
0
def execute_task(task, retries=0, handlers_map=None):
  """Execute mapper's executor task.

  This will try to determine the correct mapper handler for the task, will set
  up all mock environment necessary for task execution, and execute the task
  itself.

  This function can be used for functional-style testing of functionality
  depending on mapper framework.

  Args:
    task: a taskqueue task.
    retries: the current retry of this task.
    handlers_map: a dict from url regex to handler.

  Returns:
    the handler instance used for this task.

  Raises:
    Exception: whatever the task raises.
  """
  if not handlers_map:
    handlers_map = main.create_handlers_map()

  url = task["url"]
  handler = None

  for (re_str, handler_class) in handlers_map:
    re_str = "^" + re_str + "($|\\?)"
    if re.match(re_str, url):
      break
  else:
    raise Exception("Can't determine handler for %s" % task)

  request = mock_webapp.MockRequest()
  request.set_url(url)

  request.environ["HTTP_HOST"] = "myapp.appspot.com"
  for k, v in task.get("headers", []):
    request.headers[k] = v
    environ_key = "HTTP_" + k.replace("-", "_").upper()
    request.environ[environ_key] = v
  request.headers["X-AppEngine-TaskExecutionCount"] = retries
  request.environ["HTTP_X_APPENGINE_TASKNAME"] = (
      task.get("name", "default_task_name"))
  request.environ["HTTP_X_APPENGINE_QUEUENAME"] = (
      task.get("queue_name", "default"))
  request.environ["PATH_INFO"] = request.path

  if task["method"] == "POST":

    request.body = base64.b64decode(task["body"])
    for k, v in decode_task_payload(task).iteritems():
      request.set(k, v)

  response = mock_webapp.MockResponse()
  try:


    handler = handler_class(request, response)
  except TypeError:

    handler = handler_class()
    handler.initialize(request, response)

  saved_os_environ = os.environ
  try:
    os.environ = dict(os.environ)
    os.environ.update(request.environ)
    if task["method"] == "POST":
      handler.post()
    elif task["method"] == "GET":
      handler.get()
    else:
      raise Exception("Unsupported method: %s" % task.method)
  finally:
    os.environ = saved_os_environ

  if handler.response.status != 200:
    raise Exception("Handler failure: %s (%s). \nTask: %s\nHandler: %s" %
                    (handler.response.status,
                     handler.response.status_message,
                     task,
                     handler))
  return handler