import asyncio
import inspect
import sys

from rollbar.contrib.asgi import ASGIApp


def run(coro):
    if sys.version_info >= (3, 7):
        return asyncio.run(coro)

    assert inspect.iscoroutine(coro)

    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    try:
        return loop.run_until_complete(coro)
    finally:
        loop.close()
        asyncio.set_event_loop(None)


@ASGIApp
class FailingTestASGIApp:
    def __call__(self, scope, receive, send):
        run(self._asgi_app(scope, receive, send))

    async def app(self, scope, receive, send):
        raise RuntimeError("Invoked only for testing")

import asyncio
import inspect
import sys

from rollbar.contrib.asgi import ASGIApp


def run(coro):
    if sys.version_info >= (3, 7):
        return asyncio.run(coro)

    assert inspect.iscoroutine(coro)

    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    try:
        return loop.run_until_complete(coro)
    finally:
        loop.close()
        asyncio.set_event_loop(None)


def async_receive(message):
    async def receive():
        return message

    assert message["type"] == "http.request"
    return receive


@ASGIApp
class FailingTestASGIApp:
    def __call__(self, scope, receive, send):
        run(self._asgi_app(scope, receive, send))

    async def app(self, scope, receive, send):
        raise RuntimeError("Invoked only for testing")

Add wrapper for async receive event handler
Add wrapper for async receive event handler

  import asyncio
  import inspect
  import sys
  
  from rollbar.contrib.asgi import ASGIApp
  
  
  def run(coro):
      if sys.version_info >= (3, 7):
          return asyncio.run(coro)
  
      assert inspect.iscoroutine(coro)
  
      loop = asyncio.new_event_loop()
      asyncio.set_event_loop(loop)
      try:
          return loop.run_until_complete(coro)
      finally:
          loop.close()
          asyncio.set_event_loop(None)
  
  
+ def async_receive(message):
+     async def receive():
+         return message
+ 
+     assert message["type"] == "http.request"
+     return receive
+ 
+ 
  @ASGIApp
  class FailingTestASGIApp:
      def __call__(self, scope, receive, send):
          run(self._asgi_app(scope, receive, send))
  
      async def app(self, scope, receive, send):
          raise RuntimeError("Invoked only for testing")
  
Add wrapper for async receive event handler
## Code Before:
import asyncio
import inspect
import sys

from rollbar.contrib.asgi import ASGIApp


def run(coro):
    if sys.version_info >= (3, 7):
        return asyncio.run(coro)

    assert inspect.iscoroutine(coro)

    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    try:
        return loop.run_until_complete(coro)
    finally:
        loop.close()
        asyncio.set_event_loop(None)


@ASGIApp
class FailingTestASGIApp:
    def __call__(self, scope, receive, send):
        run(self._asgi_app(scope, receive, send))

    async def app(self, scope, receive, send):
        raise RuntimeError("Invoked only for testing")

## Instruction:
Add wrapper for async receive event handler
## Code After:
import asyncio
import inspect
import sys

from rollbar.contrib.asgi import ASGIApp


def run(coro):
    if sys.version_info >= (3, 7):
        return asyncio.run(coro)

    assert inspect.iscoroutine(coro)

    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    try:
        return loop.run_until_complete(coro)
    finally:
        loop.close()
        asyncio.set_event_loop(None)


def async_receive(message):
    async def receive():
        return message

    assert message["type"] == "http.request"
    return receive


@ASGIApp
class FailingTestASGIApp:
    def __call__(self, scope, receive, send):
        run(self._asgi_app(scope, receive, send))

    async def app(self, scope, receive, send):
        raise RuntimeError("Invoked only for testing")
