from _typeshed import Incomplete
from _typeshed.wsgi import WSGIApplication
from typing import ClassVar, overload
from typing_extensions import Self

from webob.request import Request

class wsgify:
    RequestClass: ClassVar[type[Request]]
    func: Incomplete
    args: Incomplete
    kwargs: Incomplete
    middleware_wraps: Incomplete
    def __init__(
        self,
        func: Incomplete | None = None,
        RequestClass: Incomplete | None = None,
        args=...,
        kwargs: Incomplete | None = None,
        middleware_wraps: Incomplete | None = None,
    ) -> None: ...
    @overload
    def __get__(self, obj: None, type: type | None = None) -> Self: ...
    @overload
    def __get__(self, obj: object, type: type | None = None) -> WSGIApplication: ...
    def __call__(self, req, *args, **kw): ...
    def get(self, url, **kw): ...
    def post(self, url, POST: Incomplete | None = None, **kw): ...
    def request(self, url, **kw): ...
    def call_func(self, req, *args, **kwargs): ...
    def clone(self, func: Incomplete | None = None, **kw): ...
    @property
    def undecorated(self): ...
    @classmethod
    def middleware(cls, middle_func: Incomplete | None = None, app: Incomplete | None = None, **kw): ...

class _UnboundMiddleware:
    wrapper_class: Incomplete
    app: Incomplete
    kw: Incomplete
    def __init__(self, wrapper_class, app, kw) -> None: ...
    def __call__(self, func, app: Incomplete | None = None): ...

class _MiddlewareFactory:
    wrapper_class: Incomplete
    middleware: Incomplete
    kw: Incomplete
    def __init__(self, wrapper_class, middleware, kw) -> None: ...
    def __call__(self, app: Incomplete | None = None, **config): ...
