<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def inline_requests(method_or_func):
 """A decorator to use coroutine-like spider callbacks. Example: .. code:: python class MySpider(Spider):
 @inline_callbacks def parse(self, response):
 next_url = response.urjoin('?next') try: next_resp = yield Request(next_url) except Exception as e: self.logger.exception("An error occurred.") return else: yield {"next_url": next_resp.url} You must conform with the following conventions: * The decorated method must be a spider method. * The decorated method must use the ``yield`` keyword or return a generator. * The decorated method must accept ``response`` as the first argument. * The decorated method should yield ``Request`` objects without neither ``callback`` nor ``errback`` set. If your requests don't come back to the generator try setting the flag to handle all http statuses: .. code:: python request.meta['handle_httpstatus_all'] = True """

    args = get_args(method_or_func)
    if not args:
        raise TypeError("Function must accept at least one argument.")
    # XXX: hardcoded convention of 'self' as first argument for methods
    if args[0] == 'self':
        def wrapper(self, response, **kwargs):
            callback = create_bound_method(method_or_func, self)

            genwrapper = RequestGenerator(callback, **kwargs)
            return genwrapper(response)
    else:
        warnings.warn("Decorating a non-method function will be deprecated",
                      ScrapyDeprecationWarning, stacklevel=1)

        def wrapper(response, **kwargs):
            genwrapper = RequestGenerator(method_or_func, **kwargs)
            return genwrapper(response)

    return wraps(method_or_func)(wrapper)