Skip to content

Commit d6b2985

Browse files
committed
fix build
1 parent 4961757 commit d6b2985

2 files changed

Lines changed: 73 additions & 3 deletions

File tree

  • packages/gapic-generator
    • gapic/templates/%namespace/%name_%version/%sub/services/%service/transports
    • tests/integration/goldens/showcase/google/showcase_v1beta1/services/resumable_upload_service/transports

‎packages/gapic-generator/gapic/templates/%namespace/%name_%version/%sub/services/%service/transports/rest_asyncio.py.j2‎

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ from google.auth.aio import credentials as ga_credentials_async # type: ignore
2222
from google.api_core import exceptions as core_exceptions
2323
from google.api_core import gapic_v1
2424
{% if service.has_resumable_upload_methods %}
25+
import contextlib
2526
import functools
2627
import urllib.parse
2728
from google.api_core import resumable_transfer
@@ -92,9 +93,46 @@ DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__
9293

9394
{{ shared_macros.create_interceptor_class(api, service, method, is_async=True) }}
9495

96+
{% if service.has_resumable_upload_methods %}
97+
@dataclasses.dataclass
98+
class _AsyncResumableUploadSessionAdapter:
99+
"""Adapts AsyncAuthorizedSession to the aiohttp-like request context manager interface expected by AsyncResumableUploadSession."""
100+
101+
_session: AsyncAuthorizedSession
102+
103+
@contextlib.asynccontextmanager
104+
async def request(
105+
self,
106+
method: str,
107+
url: str,
108+
*,
109+
data: Optional[bytes] = None,
110+
headers: Optional[Dict[str, str]] = None,
111+
timeout: Any = None,
112+
**kwargs,
113+
):
114+
response = await self._session.request(
115+
method,
116+
url,
117+
data=data,
118+
headers=headers,
119+
timeout=getattr(timeout, "total", timeout),
120+
**kwargs,
121+
)
122+
response.status = response.status_code # type: ignore[attr-defined]
123+
try:
124+
yield response
125+
finally:
126+
await response.close()
127+
{% endif %}
128+
95129
@dataclasses.dataclass
96130
class Async{{service.name}}RestStub:
131+
{% if service.has_resumable_upload_methods %}
132+
_session: Union[AsyncAuthorizedSession, _AsyncResumableUploadSessionAdapter]
133+
{% else %}
97134
_session: AsyncAuthorizedSession
135+
{% endif %}
98136
_host: str
99137
_interceptor: Async{{service.name}}RestInterceptor
100138

@@ -343,7 +381,7 @@ class Async{{service.name}}RestTransport(_Base{{ service.name }}RestTransport):
343381
def {{method.transport_safe_name|snake_case}}(self) -> Callable[
344382
[{{method.input.ident}}],
345383
{% if method.is_resumable_upload %}{{method.client_output_async.ident}}{% else %}{{method.output.ident}}{% endif %}]:
346-
return self._{{method.name}}(self._session, self._host, self._interceptor) # type: ignore
384+
return self._{{method.name}}({% if method.is_resumable_upload %}_AsyncResumableUploadSessionAdapter(self._session){% else %}self._session{% endif %}, self._host, self._interceptor) # type: ignore
347385

348386
{% endfor %}
349387
{% if rest_async_io_enabled %}

‎packages/gapic-generator/tests/integration/goldens/showcase/google/showcase_v1beta1/services/resumable_upload_service/transports/rest_asyncio.py‎

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
from google.api_core import exceptions as core_exceptions
2929
from google.api_core import gapic_v1
30+
import contextlib
3031
import functools
3132
import urllib.parse
3233
from google.api_core import resumable_transfer
@@ -117,8 +118,39 @@ async def pre_upload_media(self, request: resumable_upload.UploadMediaRequest, m
117118

118119

119120
@dataclasses.dataclass
120-
class AsyncResumableUploadServiceRestStub:
121+
class _AsyncResumableUploadSessionAdapter:
122+
"""Adapts AsyncAuthorizedSession to the aiohttp-like request context manager interface expected by AsyncResumableUploadSession."""
123+
121124
_session: AsyncAuthorizedSession
125+
126+
@contextlib.asynccontextmanager
127+
async def request(
128+
self,
129+
method: str,
130+
url: str,
131+
*,
132+
data: Optional[bytes] = None,
133+
headers: Optional[Dict[str, str]] = None,
134+
timeout: Any = None,
135+
**kwargs,
136+
):
137+
response = await self._session.request(
138+
method,
139+
url,
140+
data=data,
141+
headers=headers,
142+
timeout=getattr(timeout, "total", timeout),
143+
**kwargs,
144+
)
145+
response.status = response.status_code # type: ignore[attr-defined]
146+
try:
147+
yield response
148+
finally:
149+
await response.close()
150+
151+
@dataclasses.dataclass
152+
class AsyncResumableUploadServiceRestStub:
153+
_session: Union[AsyncAuthorizedSession, _AsyncResumableUploadSessionAdapter]
122154
_host: str
123155
_interceptor: AsyncResumableUploadServiceRestInterceptor
124156

@@ -267,7 +299,7 @@ async def __call__(self,
267299
def upload_media(self) -> Callable[
268300
[resumable_upload.UploadMediaRequest],
269301
resumable_transfer.AsyncResumableUploadSession]:
270-
return self._UploadMedia(self._session, self._host, self._interceptor) # type: ignore
302+
return self._UploadMedia(_AsyncResumableUploadSessionAdapter(self._session), self._host, self._interceptor) # type: ignore
271303

272304
@property
273305
def kind(self) -> str:

0 commit comments

Comments
 (0)