Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@ async def ws_connect(*args, **kwargs):
raise NotImplementedError("Subscriptions require 'websockets' package.")
yield

ClientConnection = Any # ty: ignore[invalid-assignment]
Data = Any # ty: ignore[invalid-assignment]
Origin = str # ty: ignore[invalid-assignment]
ClientConnection = Any # type: ignore[misc,assignment,unused-ignore]
Data = Any # type: ignore[misc,assignment,unused-ignore]
Origin = str # type: ignore[misc,assignment,unused-ignore]

def Subprotocol(*args, **kwargs): # type: ignore # noqa: N802, N803
raise NotImplementedError("Subscriptions require 'websockets' package.")
Expand All @@ -56,11 +56,11 @@ class HttpClient(Protocol):
async def post(
self,
url: Any | str,
*,
json: Any | None = None,
data: Any | None = None,
files: Any | None = None,
headers: Any | None = None,
**kwargs: Any,
) -> Response: ...

async def aclose(self) -> None: ...
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@ async def ws_connect(*args, **kwargs):
raise NotImplementedError("Subscriptions require 'websockets' package.")
yield

ClientConnection = Any # ty: ignore[invalid-assignment]
Data = Any # ty: ignore[invalid-assignment]
Origin = str # ty: ignore[invalid-assignment]
ClientConnection = Any # type: ignore[misc,assignment,unused-ignore]
Data = Any # type: ignore[misc,assignment,unused-ignore]
Origin = str # type: ignore[misc,assignment,unused-ignore]

def Subprotocol(*args, **kwargs): # type: ignore # noqa: N802, N803
raise NotImplementedError("Subscriptions require 'websockets' package.")
Expand All @@ -56,11 +56,11 @@ class HttpClient(Protocol):
async def post(
self,
url: Any | str,
*,
json: Any | None = None,
data: Any | None = None,
files: Any | None = None,
headers: Any | None = None,
**kwargs: Any,
) -> Response: ...

async def aclose(self) -> None: ...
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,9 @@ async def ws_connect(*args, **kwargs):
raise NotImplementedError("Subscriptions require 'websockets' package.")
yield

ClientConnection = Any # ty: ignore[invalid-assignment]
Data = Any # ty: ignore[invalid-assignment]
Origin = str # ty: ignore[invalid-assignment]
ClientConnection = Any # type: ignore[misc,assignment,unused-ignore]
Data = Any # type: ignore[misc,assignment,unused-ignore]
Origin = str # type: ignore[misc,assignment,unused-ignore]

def Subprotocol(*args, **kwargs): # type: ignore # noqa: N802, N803
raise NotImplementedError("Subscriptions require 'websockets' package.")
Expand All @@ -63,9 +63,9 @@ def Subprotocol(*args, **kwargs): # type: ignore # noqa: N802, N803
set_span_in_context,
)
except ImportError:
Context = Any # ty: ignore[invalid-assignment]
Span = Any # ty: ignore[invalid-assignment]
Tracer = Any # ty: ignore[invalid-assignment]
Context = Any # type: ignore[misc,assignment,unused-ignore]
Span = Any # type: ignore[misc,assignment,unused-ignore]
Tracer = Any # type: ignore[misc,assignment,unused-ignore]

def get_tracer(*args, **kwargs) -> Tracer: # type: ignore
raise NotImplementedError("Telemetry requires 'opentelemetry-api' package.")
Expand All @@ -84,11 +84,11 @@ class HttpClient(Protocol):
async def post(
self,
url: Any | str,
*,
json: Any | None = None,
data: Any | None = None,
files: Any | None = None,
headers: Any | None = None,
**kwargs: Any,
) -> Response: ...

async def aclose(self) -> None: ...
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,9 @@ async def ws_connect(*args, **kwargs):
raise NotImplementedError("Subscriptions require 'websockets' package.")
yield

ClientConnection = Any # ty: ignore[invalid-assignment]
Data = Any # ty: ignore[invalid-assignment]
Origin = str # ty: ignore[invalid-assignment]
ClientConnection = Any # type: ignore[misc,assignment,unused-ignore]
Data = Any # type: ignore[misc,assignment,unused-ignore]
Origin = str # type: ignore[misc,assignment,unused-ignore]

def Subprotocol(*args, **kwargs): # type: ignore # noqa: N802, N803
raise NotImplementedError("Subscriptions require 'websockets' package.")
Expand All @@ -62,9 +62,9 @@ def Subprotocol(*args, **kwargs): # type: ignore # noqa: N802, N803
set_span_in_context,
)
except ImportError:
Context = Any # ty: ignore[invalid-assignment]
Span = Any # ty: ignore[invalid-assignment]
Tracer = Any # ty: ignore[invalid-assignment]
Context = Any # type: ignore[misc,assignment,unused-ignore]
Span = Any # type: ignore[misc,assignment,unused-ignore]
Tracer = Any # type: ignore[misc,assignment,unused-ignore]

def get_tracer(*args, **kwargs) -> Tracer: # type: ignore
raise NotImplementedError("Telemetry requires 'opentelemetry-api' package.")
Expand All @@ -83,11 +83,11 @@ class HttpClient(Protocol):
async def post(
self,
url: Any | str,
*,
json: Any | None = None,
data: Any | None = None,
files: Any | None = None,
headers: Any | None = None,
**kwargs: Any,
) -> Response: ...

async def aclose(self) -> None: ...
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@ class HttpClient(Protocol):
def post(
self,
url: Any | str,
*,
json: Any | None = None,
data: Any | None = None,
files: Any | None = None,
headers: Any | None = None,
**kwargs: Any,
) -> Response: ...

def close(self) -> None: ...
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@ class HttpClient(Protocol):
def post(
self,
url: Any | str,
*,
json: Any | None = None,
data: Any | None = None,
files: Any | None = None,
headers: Any | None = None,
**kwargs: Any,
) -> Response: ...

def close(self) -> None: ...
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@
set_span_in_context,
)
except ImportError:
Context = Any # ty: ignore[invalid-assignment]
Span = Any # ty: ignore[invalid-assignment]
Tracer = Any # ty: ignore[invalid-assignment]
Context = Any # type: ignore[misc,assignment,unused-ignore]
Span = Any # type: ignore[misc,assignment,unused-ignore]
Tracer = Any # type: ignore[misc,assignment,unused-ignore]

def get_tracer(*args, **kwargs) -> Tracer: # type: ignore
raise NotImplementedError("Telemetry requires 'opentelemetry-api' package.")
Expand All @@ -44,11 +44,11 @@ class HttpClient(Protocol):
def post(
self,
url: Any | str,
*,
json: Any | None = None,
data: Any | None = None,
files: Any | None = None,
headers: Any | None = None,
**kwargs: Any,
) -> Response: ...

def close(self) -> None: ...
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@
set_span_in_context,
)
except ImportError:
Context = Any # ty: ignore[invalid-assignment]
Span = Any # ty: ignore[invalid-assignment]
Tracer = Any # ty: ignore[invalid-assignment]
Context = Any # type: ignore[misc,assignment,unused-ignore]
Span = Any # type: ignore[misc,assignment,unused-ignore]
Tracer = Any # type: ignore[misc,assignment,unused-ignore]

def get_tracer(*args, **kwargs) -> Tracer: # type: ignore
raise NotImplementedError("Telemetry requires 'opentelemetry-api' package.")
Expand All @@ -44,11 +44,11 @@ class HttpClient(Protocol):
def post(
self,
url: Any | str,
*,
json: Any | None = None,
data: Any | None = None,
files: Any | None = None,
headers: Any | None = None,
**kwargs: Any,
) -> Response: ...

def close(self) -> None: ...
Expand Down
4 changes: 2 additions & 2 deletions docs/02-guides/03-using-generated-client.md
Original file line number Diff line number Diff line change
Expand Up @@ -138,11 +138,11 @@ class HttpClient(Protocol):
async def post(
self,
url: Any | str,
*,
json: Any | None = None,
data: Any | None = None,
files: Any | None = None,
headers: Any | None = None,
**kwargs: Any,
) -> Response: ...

async def aclose(self) -> None: ...
Expand All @@ -161,11 +161,11 @@ class HttpClient(Protocol):
def post(
self,
url: Any | str,
*,
json: Any | None = None,
data: Any | None = None,
files: Any | None = None,
headers: Any | None = None,
**kwargs: Any,
) -> Response: ...

def close(self) -> None: ...
Expand Down
41 changes: 41 additions & 0 deletions tests/client_generators/dependencies/test_http_client_protocol.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import httpx

from ariadne_codegen.client_generators.dependencies import (
async_base_client,
async_base_client_no_upload,
async_base_client_open_telemetry,
async_base_client_open_telemetry_no_upload,
base_client,
base_client_no_upload,
base_client_open_telemetry,
base_client_open_telemetry_no_upload,
)

# Annotated assignments below are checked by ty during lint: httpx clients
# must structurally satisfy every HttpClient protocol shipped with the clients.


def test_httpx_client_satisfies_sync_http_client_protocols():
http_client = httpx.Client()

protocols: tuple[
base_client.HttpClient,
base_client_no_upload.HttpClient,
base_client_open_telemetry.HttpClient,
base_client_open_telemetry_no_upload.HttpClient,
] = (http_client, http_client, http_client, http_client)

assert all(protocol is http_client for protocol in protocols)


def test_httpx_async_client_satisfies_async_http_client_protocols():
http_client = httpx.AsyncClient()

protocols: tuple[
async_base_client.HttpClient,
async_base_client_no_upload.HttpClient,
async_base_client_open_telemetry.HttpClient,
async_base_client_open_telemetry_no_upload.HttpClient,
] = (http_client, http_client, http_client, http_client)

assert all(protocol is http_client for protocol in protocols)
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@ async def ws_connect(*args, **kwargs):
raise NotImplementedError("Subscriptions require 'websockets' package.")
yield

ClientConnection = Any # ty: ignore[invalid-assignment]
Data = Any # ty: ignore[invalid-assignment]
Origin = str # ty: ignore[invalid-assignment]
ClientConnection = Any # type: ignore[misc,assignment,unused-ignore]
Data = Any # type: ignore[misc,assignment,unused-ignore]
Origin = str # type: ignore[misc,assignment,unused-ignore]

def Subprotocol(*args, **kwargs): # type: ignore # noqa: N802, N803
raise NotImplementedError("Subscriptions require 'websockets' package.")
Expand All @@ -56,11 +56,11 @@ class HttpClient(Protocol):
async def post(
self,
url: Any | str,
*,
json: Any | None = None,
data: Any | None = None,
files: Any | None = None,
headers: Any | None = None,
**kwargs: Any,
) -> Response: ...

async def aclose(self) -> None: ...
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@ async def ws_connect(*args, **kwargs):
raise NotImplementedError("Subscriptions require 'websockets' package.")
yield

ClientConnection = Any # ty: ignore[invalid-assignment]
Data = Any # ty: ignore[invalid-assignment]
Origin = str # ty: ignore[invalid-assignment]
ClientConnection = Any # type: ignore[misc,assignment,unused-ignore]
Data = Any # type: ignore[misc,assignment,unused-ignore]
Origin = str # type: ignore[misc,assignment,unused-ignore]

def Subprotocol(*args, **kwargs): # type: ignore # noqa: N802, N803
raise NotImplementedError("Subscriptions require 'websockets' package.")
Expand All @@ -56,11 +56,11 @@ class HttpClient(Protocol):
async def post(
self,
url: Any | str,
*,
json: Any | None = None,
data: Any | None = None,
files: Any | None = None,
headers: Any | None = None,
**kwargs: Any,
) -> Response: ...

async def aclose(self) -> None: ...
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@ async def ws_connect(*args, **kwargs):
raise NotImplementedError("Subscriptions require 'websockets' package.")
yield

ClientConnection = Any # ty: ignore[invalid-assignment]
Data = Any # ty: ignore[invalid-assignment]
Origin = str # ty: ignore[invalid-assignment]
ClientConnection = Any # type: ignore[misc,assignment,unused-ignore]
Data = Any # type: ignore[misc,assignment,unused-ignore]
Origin = str # type: ignore[misc,assignment,unused-ignore]

def Subprotocol(*args, **kwargs): # type: ignore # noqa: N802, N803
raise NotImplementedError("Subscriptions require 'websockets' package.")
Expand All @@ -56,11 +56,11 @@ class HttpClient(Protocol):
async def post(
self,
url: Any | str,
*,
json: Any | None = None,
data: Any | None = None,
files: Any | None = None,
headers: Any | None = None,
**kwargs: Any,
) -> Response: ...

async def aclose(self) -> None: ...
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@ async def ws_connect(*args, **kwargs):
raise NotImplementedError("Subscriptions require 'websockets' package.")
yield

ClientConnection = Any # ty: ignore[invalid-assignment]
Data = Any # ty: ignore[invalid-assignment]
Origin = str # ty: ignore[invalid-assignment]
ClientConnection = Any # type: ignore[misc,assignment,unused-ignore]
Data = Any # type: ignore[misc,assignment,unused-ignore]
Origin = str # type: ignore[misc,assignment,unused-ignore]

def Subprotocol(*args, **kwargs): # type: ignore # noqa: N802, N803
raise NotImplementedError("Subscriptions require 'websockets' package.")
Expand All @@ -56,11 +56,11 @@ class HttpClient(Protocol):
async def post(
self,
url: Any | str,
*,
json: Any | None = None,
data: Any | None = None,
files: Any | None = None,
headers: Any | None = None,
**kwargs: Any,
) -> Response: ...

async def aclose(self) -> None: ...
Expand Down
Loading
Loading