Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/google/cloud/firestore_v1/services/firestore/pagers.py: 34%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

152 statements  

1# -*- coding: utf-8 -*- 

2# Copyright 2025 Google LLC 

3# 

4# Licensed under the Apache License, Version 2.0 (the "License"); 

5# you may not use this file except in compliance with the License. 

6# You may obtain a copy of the License at 

7# 

8# http://www.apache.org/licenses/LICENSE-2.0 

9# 

10# Unless required by applicable law or agreed to in writing, software 

11# distributed under the License is distributed on an "AS IS" BASIS, 

12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 

13# See the License for the specific language governing permissions and 

14# limitations under the License. 

15# 

16from google.api_core import gapic_v1 

17from google.api_core import retry as retries 

18from google.api_core import retry_async as retries_async 

19from typing import ( 

20 Any, 

21 AsyncIterator, 

22 Awaitable, 

23 Callable, 

24 Sequence, 

25 Tuple, 

26 Optional, 

27 Iterator, 

28 Union, 

29) 

30 

31try: 

32 OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None] 

33 OptionalAsyncRetry = Union[ 

34 retries_async.AsyncRetry, gapic_v1.method._MethodDefault, None 

35 ] 

36except AttributeError: # pragma: NO COVER 

37 OptionalRetry = Union[retries.Retry, object, None] # type: ignore 

38 OptionalAsyncRetry = Union[retries_async.AsyncRetry, object, None] # type: ignore 

39 

40from google.cloud.firestore_v1.types import document 

41from google.cloud.firestore_v1.types import firestore 

42from google.cloud.firestore_v1.types import query 

43 

44 

45class ListDocumentsPager: 

46 """A pager for iterating through ``list_documents`` requests. 

47 

48 This class thinly wraps an initial 

49 :class:`google.cloud.firestore_v1.types.ListDocumentsResponse` object, and 

50 provides an ``__iter__`` method to iterate through its 

51 ``documents`` field. 

52 

53 If there are more pages, the ``__iter__`` method will make additional 

54 ``ListDocuments`` requests and continue to iterate 

55 through the ``documents`` field on the 

56 corresponding responses. 

57 

58 All the usual :class:`google.cloud.firestore_v1.types.ListDocumentsResponse` 

59 attributes are available on the pager. If multiple requests are made, only 

60 the most recent response is retained, and thus used for attribute lookup. 

61 """ 

62 

63 def __init__( 

64 self, 

65 method: Callable[..., firestore.ListDocumentsResponse], 

66 request: firestore.ListDocumentsRequest, 

67 response: firestore.ListDocumentsResponse, 

68 *, 

69 retry: OptionalRetry = gapic_v1.method.DEFAULT, 

70 timeout: Union[float, object] = gapic_v1.method.DEFAULT, 

71 metadata: Sequence[Tuple[str, Union[str, bytes]]] = () 

72 ): 

73 """Instantiate the pager. 

74 

75 Args: 

76 method (Callable): The method that was originally called, and 

77 which instantiated this pager. 

78 request (google.cloud.firestore_v1.types.ListDocumentsRequest): 

79 The initial request object. 

80 response (google.cloud.firestore_v1.types.ListDocumentsResponse): 

81 The initial response object. 

82 retry (google.api_core.retry.Retry): Designation of what errors, 

83 if any, should be retried. 

84 timeout (float): The timeout for this request. 

85 metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be 

86 sent along with the request as metadata. Normally, each value must be of type `str`, 

87 but for metadata keys ending with the suffix `-bin`, the corresponding values must 

88 be of type `bytes`. 

89 """ 

90 self._method = method 

91 self._request = firestore.ListDocumentsRequest(request) 

92 self._response = response 

93 self._retry = retry 

94 self._timeout = timeout 

95 self._metadata = metadata 

96 

97 def __getattr__(self, name: str) -> Any: 

98 return getattr(self._response, name) 

99 

100 @property 

101 def pages(self) -> Iterator[firestore.ListDocumentsResponse]: 

102 yield self._response 

103 while self._response.next_page_token: 

104 self._request.page_token = self._response.next_page_token 

105 self._response = self._method( 

106 self._request, 

107 retry=self._retry, 

108 timeout=self._timeout, 

109 metadata=self._metadata, 

110 ) 

111 yield self._response 

112 

113 def __iter__(self) -> Iterator[document.Document]: 

114 for page in self.pages: 

115 yield from page.documents 

116 

117 def __repr__(self) -> str: 

118 return "{0}<{1!r}>".format(self.__class__.__name__, self._response) 

119 

120 

121class ListDocumentsAsyncPager: 

122 """A pager for iterating through ``list_documents`` requests. 

123 

124 This class thinly wraps an initial 

125 :class:`google.cloud.firestore_v1.types.ListDocumentsResponse` object, and 

126 provides an ``__aiter__`` method to iterate through its 

127 ``documents`` field. 

128 

129 If there are more pages, the ``__aiter__`` method will make additional 

130 ``ListDocuments`` requests and continue to iterate 

131 through the ``documents`` field on the 

132 corresponding responses. 

133 

134 All the usual :class:`google.cloud.firestore_v1.types.ListDocumentsResponse` 

135 attributes are available on the pager. If multiple requests are made, only 

136 the most recent response is retained, and thus used for attribute lookup. 

137 """ 

138 

139 def __init__( 

140 self, 

141 method: Callable[..., Awaitable[firestore.ListDocumentsResponse]], 

142 request: firestore.ListDocumentsRequest, 

143 response: firestore.ListDocumentsResponse, 

144 *, 

145 retry: OptionalAsyncRetry = gapic_v1.method.DEFAULT, 

146 timeout: Union[float, object] = gapic_v1.method.DEFAULT, 

147 metadata: Sequence[Tuple[str, Union[str, bytes]]] = () 

148 ): 

149 """Instantiates the pager. 

150 

151 Args: 

152 method (Callable): The method that was originally called, and 

153 which instantiated this pager. 

154 request (google.cloud.firestore_v1.types.ListDocumentsRequest): 

155 The initial request object. 

156 response (google.cloud.firestore_v1.types.ListDocumentsResponse): 

157 The initial response object. 

158 retry (google.api_core.retry.AsyncRetry): Designation of what errors, 

159 if any, should be retried. 

160 timeout (float): The timeout for this request. 

161 metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be 

162 sent along with the request as metadata. Normally, each value must be of type `str`, 

163 but for metadata keys ending with the suffix `-bin`, the corresponding values must 

164 be of type `bytes`. 

165 """ 

166 self._method = method 

167 self._request = firestore.ListDocumentsRequest(request) 

168 self._response = response 

169 self._retry = retry 

170 self._timeout = timeout 

171 self._metadata = metadata 

172 

173 def __getattr__(self, name: str) -> Any: 

174 return getattr(self._response, name) 

175 

176 @property 

177 async def pages(self) -> AsyncIterator[firestore.ListDocumentsResponse]: 

178 yield self._response 

179 while self._response.next_page_token: 

180 self._request.page_token = self._response.next_page_token 

181 self._response = await self._method( 

182 self._request, 

183 retry=self._retry, 

184 timeout=self._timeout, 

185 metadata=self._metadata, 

186 ) 

187 yield self._response 

188 

189 def __aiter__(self) -> AsyncIterator[document.Document]: 

190 async def async_generator(): 

191 async for page in self.pages: 

192 for response in page.documents: 

193 yield response 

194 

195 return async_generator() 

196 

197 def __repr__(self) -> str: 

198 return "{0}<{1!r}>".format(self.__class__.__name__, self._response) 

199 

200 

201class PartitionQueryPager: 

202 """A pager for iterating through ``partition_query`` requests. 

203 

204 This class thinly wraps an initial 

205 :class:`google.cloud.firestore_v1.types.PartitionQueryResponse` object, and 

206 provides an ``__iter__`` method to iterate through its 

207 ``partitions`` field. 

208 

209 If there are more pages, the ``__iter__`` method will make additional 

210 ``PartitionQuery`` requests and continue to iterate 

211 through the ``partitions`` field on the 

212 corresponding responses. 

213 

214 All the usual :class:`google.cloud.firestore_v1.types.PartitionQueryResponse` 

215 attributes are available on the pager. If multiple requests are made, only 

216 the most recent response is retained, and thus used for attribute lookup. 

217 """ 

218 

219 def __init__( 

220 self, 

221 method: Callable[..., firestore.PartitionQueryResponse], 

222 request: firestore.PartitionQueryRequest, 

223 response: firestore.PartitionQueryResponse, 

224 *, 

225 retry: OptionalRetry = gapic_v1.method.DEFAULT, 

226 timeout: Union[float, object] = gapic_v1.method.DEFAULT, 

227 metadata: Sequence[Tuple[str, Union[str, bytes]]] = () 

228 ): 

229 """Instantiate the pager. 

230 

231 Args: 

232 method (Callable): The method that was originally called, and 

233 which instantiated this pager. 

234 request (google.cloud.firestore_v1.types.PartitionQueryRequest): 

235 The initial request object. 

236 response (google.cloud.firestore_v1.types.PartitionQueryResponse): 

237 The initial response object. 

238 retry (google.api_core.retry.Retry): Designation of what errors, 

239 if any, should be retried. 

240 timeout (float): The timeout for this request. 

241 metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be 

242 sent along with the request as metadata. Normally, each value must be of type `str`, 

243 but for metadata keys ending with the suffix `-bin`, the corresponding values must 

244 be of type `bytes`. 

245 """ 

246 self._method = method 

247 self._request = firestore.PartitionQueryRequest(request) 

248 self._response = response 

249 self._retry = retry 

250 self._timeout = timeout 

251 self._metadata = metadata 

252 

253 def __getattr__(self, name: str) -> Any: 

254 return getattr(self._response, name) 

255 

256 @property 

257 def pages(self) -> Iterator[firestore.PartitionQueryResponse]: 

258 yield self._response 

259 while self._response.next_page_token: 

260 self._request.page_token = self._response.next_page_token 

261 self._response = self._method( 

262 self._request, 

263 retry=self._retry, 

264 timeout=self._timeout, 

265 metadata=self._metadata, 

266 ) 

267 yield self._response 

268 

269 def __iter__(self) -> Iterator[query.Cursor]: 

270 for page in self.pages: 

271 yield from page.partitions 

272 

273 def __repr__(self) -> str: 

274 return "{0}<{1!r}>".format(self.__class__.__name__, self._response) 

275 

276 

277class PartitionQueryAsyncPager: 

278 """A pager for iterating through ``partition_query`` requests. 

279 

280 This class thinly wraps an initial 

281 :class:`google.cloud.firestore_v1.types.PartitionQueryResponse` object, and 

282 provides an ``__aiter__`` method to iterate through its 

283 ``partitions`` field. 

284 

285 If there are more pages, the ``__aiter__`` method will make additional 

286 ``PartitionQuery`` requests and continue to iterate 

287 through the ``partitions`` field on the 

288 corresponding responses. 

289 

290 All the usual :class:`google.cloud.firestore_v1.types.PartitionQueryResponse` 

291 attributes are available on the pager. If multiple requests are made, only 

292 the most recent response is retained, and thus used for attribute lookup. 

293 """ 

294 

295 def __init__( 

296 self, 

297 method: Callable[..., Awaitable[firestore.PartitionQueryResponse]], 

298 request: firestore.PartitionQueryRequest, 

299 response: firestore.PartitionQueryResponse, 

300 *, 

301 retry: OptionalAsyncRetry = gapic_v1.method.DEFAULT, 

302 timeout: Union[float, object] = gapic_v1.method.DEFAULT, 

303 metadata: Sequence[Tuple[str, Union[str, bytes]]] = () 

304 ): 

305 """Instantiates the pager. 

306 

307 Args: 

308 method (Callable): The method that was originally called, and 

309 which instantiated this pager. 

310 request (google.cloud.firestore_v1.types.PartitionQueryRequest): 

311 The initial request object. 

312 response (google.cloud.firestore_v1.types.PartitionQueryResponse): 

313 The initial response object. 

314 retry (google.api_core.retry.AsyncRetry): Designation of what errors, 

315 if any, should be retried. 

316 timeout (float): The timeout for this request. 

317 metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be 

318 sent along with the request as metadata. Normally, each value must be of type `str`, 

319 but for metadata keys ending with the suffix `-bin`, the corresponding values must 

320 be of type `bytes`. 

321 """ 

322 self._method = method 

323 self._request = firestore.PartitionQueryRequest(request) 

324 self._response = response 

325 self._retry = retry 

326 self._timeout = timeout 

327 self._metadata = metadata 

328 

329 def __getattr__(self, name: str) -> Any: 

330 return getattr(self._response, name) 

331 

332 @property 

333 async def pages(self) -> AsyncIterator[firestore.PartitionQueryResponse]: 

334 yield self._response 

335 while self._response.next_page_token: 

336 self._request.page_token = self._response.next_page_token 

337 self._response = await self._method( 

338 self._request, 

339 retry=self._retry, 

340 timeout=self._timeout, 

341 metadata=self._metadata, 

342 ) 

343 yield self._response 

344 

345 def __aiter__(self) -> AsyncIterator[query.Cursor]: 

346 async def async_generator(): 

347 async for page in self.pages: 

348 for response in page.partitions: 

349 yield response 

350 

351 return async_generator() 

352 

353 def __repr__(self) -> str: 

354 return "{0}<{1!r}>".format(self.__class__.__name__, self._response) 

355 

356 

357class ListCollectionIdsPager: 

358 """A pager for iterating through ``list_collection_ids`` requests. 

359 

360 This class thinly wraps an initial 

361 :class:`google.cloud.firestore_v1.types.ListCollectionIdsResponse` object, and 

362 provides an ``__iter__`` method to iterate through its 

363 ``collection_ids`` field. 

364 

365 If there are more pages, the ``__iter__`` method will make additional 

366 ``ListCollectionIds`` requests and continue to iterate 

367 through the ``collection_ids`` field on the 

368 corresponding responses. 

369 

370 All the usual :class:`google.cloud.firestore_v1.types.ListCollectionIdsResponse` 

371 attributes are available on the pager. If multiple requests are made, only 

372 the most recent response is retained, and thus used for attribute lookup. 

373 """ 

374 

375 def __init__( 

376 self, 

377 method: Callable[..., firestore.ListCollectionIdsResponse], 

378 request: firestore.ListCollectionIdsRequest, 

379 response: firestore.ListCollectionIdsResponse, 

380 *, 

381 retry: OptionalRetry = gapic_v1.method.DEFAULT, 

382 timeout: Union[float, object] = gapic_v1.method.DEFAULT, 

383 metadata: Sequence[Tuple[str, Union[str, bytes]]] = () 

384 ): 

385 """Instantiate the pager. 

386 

387 Args: 

388 method (Callable): The method that was originally called, and 

389 which instantiated this pager. 

390 request (google.cloud.firestore_v1.types.ListCollectionIdsRequest): 

391 The initial request object. 

392 response (google.cloud.firestore_v1.types.ListCollectionIdsResponse): 

393 The initial response object. 

394 retry (google.api_core.retry.Retry): Designation of what errors, 

395 if any, should be retried. 

396 timeout (float): The timeout for this request. 

397 metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be 

398 sent along with the request as metadata. Normally, each value must be of type `str`, 

399 but for metadata keys ending with the suffix `-bin`, the corresponding values must 

400 be of type `bytes`. 

401 """ 

402 self._method = method 

403 self._request = firestore.ListCollectionIdsRequest(request) 

404 self._response = response 

405 self._retry = retry 

406 self._timeout = timeout 

407 self._metadata = metadata 

408 

409 def __getattr__(self, name: str) -> Any: 

410 return getattr(self._response, name) 

411 

412 @property 

413 def pages(self) -> Iterator[firestore.ListCollectionIdsResponse]: 

414 yield self._response 

415 while self._response.next_page_token: 

416 self._request.page_token = self._response.next_page_token 

417 self._response = self._method( 

418 self._request, 

419 retry=self._retry, 

420 timeout=self._timeout, 

421 metadata=self._metadata, 

422 ) 

423 yield self._response 

424 

425 def __iter__(self) -> Iterator[str]: 

426 for page in self.pages: 

427 yield from page.collection_ids 

428 

429 def __repr__(self) -> str: 

430 return "{0}<{1!r}>".format(self.__class__.__name__, self._response) 

431 

432 

433class ListCollectionIdsAsyncPager: 

434 """A pager for iterating through ``list_collection_ids`` requests. 

435 

436 This class thinly wraps an initial 

437 :class:`google.cloud.firestore_v1.types.ListCollectionIdsResponse` object, and 

438 provides an ``__aiter__`` method to iterate through its 

439 ``collection_ids`` field. 

440 

441 If there are more pages, the ``__aiter__`` method will make additional 

442 ``ListCollectionIds`` requests and continue to iterate 

443 through the ``collection_ids`` field on the 

444 corresponding responses. 

445 

446 All the usual :class:`google.cloud.firestore_v1.types.ListCollectionIdsResponse` 

447 attributes are available on the pager. If multiple requests are made, only 

448 the most recent response is retained, and thus used for attribute lookup. 

449 """ 

450 

451 def __init__( 

452 self, 

453 method: Callable[..., Awaitable[firestore.ListCollectionIdsResponse]], 

454 request: firestore.ListCollectionIdsRequest, 

455 response: firestore.ListCollectionIdsResponse, 

456 *, 

457 retry: OptionalAsyncRetry = gapic_v1.method.DEFAULT, 

458 timeout: Union[float, object] = gapic_v1.method.DEFAULT, 

459 metadata: Sequence[Tuple[str, Union[str, bytes]]] = () 

460 ): 

461 """Instantiates the pager. 

462 

463 Args: 

464 method (Callable): The method that was originally called, and 

465 which instantiated this pager. 

466 request (google.cloud.firestore_v1.types.ListCollectionIdsRequest): 

467 The initial request object. 

468 response (google.cloud.firestore_v1.types.ListCollectionIdsResponse): 

469 The initial response object. 

470 retry (google.api_core.retry.AsyncRetry): Designation of what errors, 

471 if any, should be retried. 

472 timeout (float): The timeout for this request. 

473 metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be 

474 sent along with the request as metadata. Normally, each value must be of type `str`, 

475 but for metadata keys ending with the suffix `-bin`, the corresponding values must 

476 be of type `bytes`. 

477 """ 

478 self._method = method 

479 self._request = firestore.ListCollectionIdsRequest(request) 

480 self._response = response 

481 self._retry = retry 

482 self._timeout = timeout 

483 self._metadata = metadata 

484 

485 def __getattr__(self, name: str) -> Any: 

486 return getattr(self._response, name) 

487 

488 @property 

489 async def pages(self) -> AsyncIterator[firestore.ListCollectionIdsResponse]: 

490 yield self._response 

491 while self._response.next_page_token: 

492 self._request.page_token = self._response.next_page_token 

493 self._response = await self._method( 

494 self._request, 

495 retry=self._retry, 

496 timeout=self._timeout, 

497 metadata=self._metadata, 

498 ) 

499 yield self._response 

500 

501 def __aiter__(self) -> AsyncIterator[str]: 

502 async def async_generator(): 

503 async for page in self.pages: 

504 for response in page.collection_ids: 

505 yield response 

506 

507 return async_generator() 

508 

509 def __repr__(self) -> str: 

510 return "{0}<{1!r}>".format(self.__class__.__name__, self._response)