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

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

408 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# 

16import json # type: ignore 

17from google.api_core import path_template 

18from google.api_core import gapic_v1 

19 

20from google.protobuf import json_format 

21from google.cloud.location import locations_pb2 # type: ignore 

22from .base import FirestoreTransport, DEFAULT_CLIENT_INFO 

23 

24import re 

25from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union 

26 

27 

28from google.cloud.firestore_v1.types import document 

29from google.cloud.firestore_v1.types import document as gf_document 

30from google.cloud.firestore_v1.types import firestore 

31from google.protobuf import empty_pb2 # type: ignore 

32from google.longrunning import operations_pb2 # type: ignore 

33 

34 

35class _BaseFirestoreRestTransport(FirestoreTransport): 

36 """Base REST backend transport for Firestore. 

37 

38 Note: This class is not meant to be used directly. Use its sync and 

39 async sub-classes instead. 

40 

41 This class defines the same methods as the primary client, so the 

42 primary client can load the underlying transport implementation 

43 and call it. 

44 

45 It sends JSON representations of protocol buffers over HTTP/1.1 

46 """ 

47 

48 def __init__( 

49 self, 

50 *, 

51 host: str = "firestore.googleapis.com", 

52 credentials: Optional[Any] = None, 

53 client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, 

54 always_use_jwt_access: Optional[bool] = False, 

55 url_scheme: str = "https", 

56 api_audience: Optional[str] = None, 

57 ) -> None: 

58 """Instantiate the transport. 

59 Args: 

60 host (Optional[str]): 

61 The hostname to connect to (default: 'firestore.googleapis.com'). 

62 credentials (Optional[Any]): The 

63 authorization credentials to attach to requests. These 

64 credentials identify the application to the service; if none 

65 are specified, the client will attempt to ascertain the 

66 credentials from the environment. 

67 client_info (google.api_core.gapic_v1.client_info.ClientInfo): 

68 The client info used to send a user-agent string along with 

69 API requests. If ``None``, then default info will be used. 

70 Generally, you only need to set this if you are developing 

71 your own client library. 

72 always_use_jwt_access (Optional[bool]): Whether self signed JWT should 

73 be used for service account credentials. 

74 url_scheme: the protocol scheme for the API endpoint. Normally 

75 "https", but for testing or local servers, 

76 "http" can be specified. 

77 """ 

78 # Run the base constructor 

79 maybe_url_match = re.match("^(?P<scheme>http(?:s)?://)?(?P<host>.*)$", host) 

80 if maybe_url_match is None: 

81 raise ValueError( 

82 f"Unexpected hostname structure: {host}" 

83 ) # pragma: NO COVER 

84 

85 url_match_items = maybe_url_match.groupdict() 

86 

87 host = f"{url_scheme}://{host}" if not url_match_items["scheme"] else host 

88 

89 super().__init__( 

90 host=host, 

91 credentials=credentials, 

92 client_info=client_info, 

93 always_use_jwt_access=always_use_jwt_access, 

94 api_audience=api_audience, 

95 ) 

96 

97 class _BaseBatchGetDocuments: 

98 def __hash__(self): # pragma: NO COVER 

99 return NotImplementedError("__hash__ must be implemented.") 

100 

101 __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} 

102 

103 @classmethod 

104 def _get_unset_required_fields(cls, message_dict): 

105 return { 

106 k: v 

107 for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() 

108 if k not in message_dict 

109 } 

110 

111 @staticmethod 

112 def _get_http_options(): 

113 http_options: List[Dict[str, str]] = [ 

114 { 

115 "method": "post", 

116 "uri": "/v1/{database=projects/*/databases/*}/documents:batchGet", 

117 "body": "*", 

118 }, 

119 ] 

120 return http_options 

121 

122 @staticmethod 

123 def _get_transcoded_request(http_options, request): 

124 pb_request = firestore.BatchGetDocumentsRequest.pb(request) 

125 transcoded_request = path_template.transcode(http_options, pb_request) 

126 return transcoded_request 

127 

128 @staticmethod 

129 def _get_request_body_json(transcoded_request): 

130 # Jsonify the request body 

131 

132 body = json_format.MessageToJson( 

133 transcoded_request["body"], use_integers_for_enums=True 

134 ) 

135 return body 

136 

137 @staticmethod 

138 def _get_query_params_json(transcoded_request): 

139 query_params = json.loads( 

140 json_format.MessageToJson( 

141 transcoded_request["query_params"], 

142 use_integers_for_enums=True, 

143 ) 

144 ) 

145 query_params.update( 

146 _BaseFirestoreRestTransport._BaseBatchGetDocuments._get_unset_required_fields( 

147 query_params 

148 ) 

149 ) 

150 

151 query_params["$alt"] = "json;enum-encoding=int" 

152 return query_params 

153 

154 class _BaseBatchWrite: 

155 def __hash__(self): # pragma: NO COVER 

156 return NotImplementedError("__hash__ must be implemented.") 

157 

158 __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} 

159 

160 @classmethod 

161 def _get_unset_required_fields(cls, message_dict): 

162 return { 

163 k: v 

164 for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() 

165 if k not in message_dict 

166 } 

167 

168 @staticmethod 

169 def _get_http_options(): 

170 http_options: List[Dict[str, str]] = [ 

171 { 

172 "method": "post", 

173 "uri": "/v1/{database=projects/*/databases/*}/documents:batchWrite", 

174 "body": "*", 

175 }, 

176 ] 

177 return http_options 

178 

179 @staticmethod 

180 def _get_transcoded_request(http_options, request): 

181 pb_request = firestore.BatchWriteRequest.pb(request) 

182 transcoded_request = path_template.transcode(http_options, pb_request) 

183 return transcoded_request 

184 

185 @staticmethod 

186 def _get_request_body_json(transcoded_request): 

187 # Jsonify the request body 

188 

189 body = json_format.MessageToJson( 

190 transcoded_request["body"], use_integers_for_enums=True 

191 ) 

192 return body 

193 

194 @staticmethod 

195 def _get_query_params_json(transcoded_request): 

196 query_params = json.loads( 

197 json_format.MessageToJson( 

198 transcoded_request["query_params"], 

199 use_integers_for_enums=True, 

200 ) 

201 ) 

202 query_params.update( 

203 _BaseFirestoreRestTransport._BaseBatchWrite._get_unset_required_fields( 

204 query_params 

205 ) 

206 ) 

207 

208 query_params["$alt"] = "json;enum-encoding=int" 

209 return query_params 

210 

211 class _BaseBeginTransaction: 

212 def __hash__(self): # pragma: NO COVER 

213 return NotImplementedError("__hash__ must be implemented.") 

214 

215 __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} 

216 

217 @classmethod 

218 def _get_unset_required_fields(cls, message_dict): 

219 return { 

220 k: v 

221 for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() 

222 if k not in message_dict 

223 } 

224 

225 @staticmethod 

226 def _get_http_options(): 

227 http_options: List[Dict[str, str]] = [ 

228 { 

229 "method": "post", 

230 "uri": "/v1/{database=projects/*/databases/*}/documents:beginTransaction", 

231 "body": "*", 

232 }, 

233 ] 

234 return http_options 

235 

236 @staticmethod 

237 def _get_transcoded_request(http_options, request): 

238 pb_request = firestore.BeginTransactionRequest.pb(request) 

239 transcoded_request = path_template.transcode(http_options, pb_request) 

240 return transcoded_request 

241 

242 @staticmethod 

243 def _get_request_body_json(transcoded_request): 

244 # Jsonify the request body 

245 

246 body = json_format.MessageToJson( 

247 transcoded_request["body"], use_integers_for_enums=True 

248 ) 

249 return body 

250 

251 @staticmethod 

252 def _get_query_params_json(transcoded_request): 

253 query_params = json.loads( 

254 json_format.MessageToJson( 

255 transcoded_request["query_params"], 

256 use_integers_for_enums=True, 

257 ) 

258 ) 

259 query_params.update( 

260 _BaseFirestoreRestTransport._BaseBeginTransaction._get_unset_required_fields( 

261 query_params 

262 ) 

263 ) 

264 

265 query_params["$alt"] = "json;enum-encoding=int" 

266 return query_params 

267 

268 class _BaseCommit: 

269 def __hash__(self): # pragma: NO COVER 

270 return NotImplementedError("__hash__ must be implemented.") 

271 

272 __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} 

273 

274 @classmethod 

275 def _get_unset_required_fields(cls, message_dict): 

276 return { 

277 k: v 

278 for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() 

279 if k not in message_dict 

280 } 

281 

282 @staticmethod 

283 def _get_http_options(): 

284 http_options: List[Dict[str, str]] = [ 

285 { 

286 "method": "post", 

287 "uri": "/v1/{database=projects/*/databases/*}/documents:commit", 

288 "body": "*", 

289 }, 

290 ] 

291 return http_options 

292 

293 @staticmethod 

294 def _get_transcoded_request(http_options, request): 

295 pb_request = firestore.CommitRequest.pb(request) 

296 transcoded_request = path_template.transcode(http_options, pb_request) 

297 return transcoded_request 

298 

299 @staticmethod 

300 def _get_request_body_json(transcoded_request): 

301 # Jsonify the request body 

302 

303 body = json_format.MessageToJson( 

304 transcoded_request["body"], use_integers_for_enums=True 

305 ) 

306 return body 

307 

308 @staticmethod 

309 def _get_query_params_json(transcoded_request): 

310 query_params = json.loads( 

311 json_format.MessageToJson( 

312 transcoded_request["query_params"], 

313 use_integers_for_enums=True, 

314 ) 

315 ) 

316 query_params.update( 

317 _BaseFirestoreRestTransport._BaseCommit._get_unset_required_fields( 

318 query_params 

319 ) 

320 ) 

321 

322 query_params["$alt"] = "json;enum-encoding=int" 

323 return query_params 

324 

325 class _BaseCreateDocument: 

326 def __hash__(self): # pragma: NO COVER 

327 return NotImplementedError("__hash__ must be implemented.") 

328 

329 __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} 

330 

331 @classmethod 

332 def _get_unset_required_fields(cls, message_dict): 

333 return { 

334 k: v 

335 for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() 

336 if k not in message_dict 

337 } 

338 

339 @staticmethod 

340 def _get_http_options(): 

341 http_options: List[Dict[str, str]] = [ 

342 { 

343 "method": "post", 

344 "uri": "/v1/{parent=projects/*/databases/*/documents/**}/{collection_id}", 

345 "body": "document", 

346 }, 

347 ] 

348 return http_options 

349 

350 @staticmethod 

351 def _get_transcoded_request(http_options, request): 

352 pb_request = firestore.CreateDocumentRequest.pb(request) 

353 transcoded_request = path_template.transcode(http_options, pb_request) 

354 return transcoded_request 

355 

356 @staticmethod 

357 def _get_request_body_json(transcoded_request): 

358 # Jsonify the request body 

359 

360 body = json_format.MessageToJson( 

361 transcoded_request["body"], use_integers_for_enums=True 

362 ) 

363 return body 

364 

365 @staticmethod 

366 def _get_query_params_json(transcoded_request): 

367 query_params = json.loads( 

368 json_format.MessageToJson( 

369 transcoded_request["query_params"], 

370 use_integers_for_enums=True, 

371 ) 

372 ) 

373 query_params.update( 

374 _BaseFirestoreRestTransport._BaseCreateDocument._get_unset_required_fields( 

375 query_params 

376 ) 

377 ) 

378 

379 query_params["$alt"] = "json;enum-encoding=int" 

380 return query_params 

381 

382 class _BaseDeleteDocument: 

383 def __hash__(self): # pragma: NO COVER 

384 return NotImplementedError("__hash__ must be implemented.") 

385 

386 __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} 

387 

388 @classmethod 

389 def _get_unset_required_fields(cls, message_dict): 

390 return { 

391 k: v 

392 for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() 

393 if k not in message_dict 

394 } 

395 

396 @staticmethod 

397 def _get_http_options(): 

398 http_options: List[Dict[str, str]] = [ 

399 { 

400 "method": "delete", 

401 "uri": "/v1/{name=projects/*/databases/*/documents/*/**}", 

402 }, 

403 ] 

404 return http_options 

405 

406 @staticmethod 

407 def _get_transcoded_request(http_options, request): 

408 pb_request = firestore.DeleteDocumentRequest.pb(request) 

409 transcoded_request = path_template.transcode(http_options, pb_request) 

410 return transcoded_request 

411 

412 @staticmethod 

413 def _get_query_params_json(transcoded_request): 

414 query_params = json.loads( 

415 json_format.MessageToJson( 

416 transcoded_request["query_params"], 

417 use_integers_for_enums=True, 

418 ) 

419 ) 

420 query_params.update( 

421 _BaseFirestoreRestTransport._BaseDeleteDocument._get_unset_required_fields( 

422 query_params 

423 ) 

424 ) 

425 

426 query_params["$alt"] = "json;enum-encoding=int" 

427 return query_params 

428 

429 class _BaseGetDocument: 

430 def __hash__(self): # pragma: NO COVER 

431 return NotImplementedError("__hash__ must be implemented.") 

432 

433 __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} 

434 

435 @classmethod 

436 def _get_unset_required_fields(cls, message_dict): 

437 return { 

438 k: v 

439 for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() 

440 if k not in message_dict 

441 } 

442 

443 @staticmethod 

444 def _get_http_options(): 

445 http_options: List[Dict[str, str]] = [ 

446 { 

447 "method": "get", 

448 "uri": "/v1/{name=projects/*/databases/*/documents/*/**}", 

449 }, 

450 ] 

451 return http_options 

452 

453 @staticmethod 

454 def _get_transcoded_request(http_options, request): 

455 pb_request = firestore.GetDocumentRequest.pb(request) 

456 transcoded_request = path_template.transcode(http_options, pb_request) 

457 return transcoded_request 

458 

459 @staticmethod 

460 def _get_query_params_json(transcoded_request): 

461 query_params = json.loads( 

462 json_format.MessageToJson( 

463 transcoded_request["query_params"], 

464 use_integers_for_enums=True, 

465 ) 

466 ) 

467 query_params.update( 

468 _BaseFirestoreRestTransport._BaseGetDocument._get_unset_required_fields( 

469 query_params 

470 ) 

471 ) 

472 

473 query_params["$alt"] = "json;enum-encoding=int" 

474 return query_params 

475 

476 class _BaseListCollectionIds: 

477 def __hash__(self): # pragma: NO COVER 

478 return NotImplementedError("__hash__ must be implemented.") 

479 

480 __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} 

481 

482 @classmethod 

483 def _get_unset_required_fields(cls, message_dict): 

484 return { 

485 k: v 

486 for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() 

487 if k not in message_dict 

488 } 

489 

490 @staticmethod 

491 def _get_http_options(): 

492 http_options: List[Dict[str, str]] = [ 

493 { 

494 "method": "post", 

495 "uri": "/v1/{parent=projects/*/databases/*/documents}:listCollectionIds", 

496 "body": "*", 

497 }, 

498 { 

499 "method": "post", 

500 "uri": "/v1/{parent=projects/*/databases/*/documents/*/**}:listCollectionIds", 

501 "body": "*", 

502 }, 

503 ] 

504 return http_options 

505 

506 @staticmethod 

507 def _get_transcoded_request(http_options, request): 

508 pb_request = firestore.ListCollectionIdsRequest.pb(request) 

509 transcoded_request = path_template.transcode(http_options, pb_request) 

510 return transcoded_request 

511 

512 @staticmethod 

513 def _get_request_body_json(transcoded_request): 

514 # Jsonify the request body 

515 

516 body = json_format.MessageToJson( 

517 transcoded_request["body"], use_integers_for_enums=True 

518 ) 

519 return body 

520 

521 @staticmethod 

522 def _get_query_params_json(transcoded_request): 

523 query_params = json.loads( 

524 json_format.MessageToJson( 

525 transcoded_request["query_params"], 

526 use_integers_for_enums=True, 

527 ) 

528 ) 

529 query_params.update( 

530 _BaseFirestoreRestTransport._BaseListCollectionIds._get_unset_required_fields( 

531 query_params 

532 ) 

533 ) 

534 

535 query_params["$alt"] = "json;enum-encoding=int" 

536 return query_params 

537 

538 class _BaseListDocuments: 

539 def __hash__(self): # pragma: NO COVER 

540 return NotImplementedError("__hash__ must be implemented.") 

541 

542 __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} 

543 

544 @classmethod 

545 def _get_unset_required_fields(cls, message_dict): 

546 return { 

547 k: v 

548 for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() 

549 if k not in message_dict 

550 } 

551 

552 @staticmethod 

553 def _get_http_options(): 

554 http_options: List[Dict[str, str]] = [ 

555 { 

556 "method": "get", 

557 "uri": "/v1/{parent=projects/*/databases/*/documents/*/**}/{collection_id}", 

558 }, 

559 { 

560 "method": "get", 

561 "uri": "/v1/{parent=projects/*/databases/*/documents}/{collection_id}", 

562 }, 

563 ] 

564 return http_options 

565 

566 @staticmethod 

567 def _get_transcoded_request(http_options, request): 

568 pb_request = firestore.ListDocumentsRequest.pb(request) 

569 transcoded_request = path_template.transcode(http_options, pb_request) 

570 return transcoded_request 

571 

572 @staticmethod 

573 def _get_query_params_json(transcoded_request): 

574 query_params = json.loads( 

575 json_format.MessageToJson( 

576 transcoded_request["query_params"], 

577 use_integers_for_enums=True, 

578 ) 

579 ) 

580 query_params.update( 

581 _BaseFirestoreRestTransport._BaseListDocuments._get_unset_required_fields( 

582 query_params 

583 ) 

584 ) 

585 

586 query_params["$alt"] = "json;enum-encoding=int" 

587 return query_params 

588 

589 class _BaseListen: 

590 def __hash__(self): # pragma: NO COVER 

591 return NotImplementedError("__hash__ must be implemented.") 

592 

593 class _BasePartitionQuery: 

594 def __hash__(self): # pragma: NO COVER 

595 return NotImplementedError("__hash__ must be implemented.") 

596 

597 __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} 

598 

599 @classmethod 

600 def _get_unset_required_fields(cls, message_dict): 

601 return { 

602 k: v 

603 for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() 

604 if k not in message_dict 

605 } 

606 

607 @staticmethod 

608 def _get_http_options(): 

609 http_options: List[Dict[str, str]] = [ 

610 { 

611 "method": "post", 

612 "uri": "/v1/{parent=projects/*/databases/*/documents}:partitionQuery", 

613 "body": "*", 

614 }, 

615 { 

616 "method": "post", 

617 "uri": "/v1/{parent=projects/*/databases/*/documents/*/**}:partitionQuery", 

618 "body": "*", 

619 }, 

620 ] 

621 return http_options 

622 

623 @staticmethod 

624 def _get_transcoded_request(http_options, request): 

625 pb_request = firestore.PartitionQueryRequest.pb(request) 

626 transcoded_request = path_template.transcode(http_options, pb_request) 

627 return transcoded_request 

628 

629 @staticmethod 

630 def _get_request_body_json(transcoded_request): 

631 # Jsonify the request body 

632 

633 body = json_format.MessageToJson( 

634 transcoded_request["body"], use_integers_for_enums=True 

635 ) 

636 return body 

637 

638 @staticmethod 

639 def _get_query_params_json(transcoded_request): 

640 query_params = json.loads( 

641 json_format.MessageToJson( 

642 transcoded_request["query_params"], 

643 use_integers_for_enums=True, 

644 ) 

645 ) 

646 query_params.update( 

647 _BaseFirestoreRestTransport._BasePartitionQuery._get_unset_required_fields( 

648 query_params 

649 ) 

650 ) 

651 

652 query_params["$alt"] = "json;enum-encoding=int" 

653 return query_params 

654 

655 class _BaseRollback: 

656 def __hash__(self): # pragma: NO COVER 

657 return NotImplementedError("__hash__ must be implemented.") 

658 

659 __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} 

660 

661 @classmethod 

662 def _get_unset_required_fields(cls, message_dict): 

663 return { 

664 k: v 

665 for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() 

666 if k not in message_dict 

667 } 

668 

669 @staticmethod 

670 def _get_http_options(): 

671 http_options: List[Dict[str, str]] = [ 

672 { 

673 "method": "post", 

674 "uri": "/v1/{database=projects/*/databases/*}/documents:rollback", 

675 "body": "*", 

676 }, 

677 ] 

678 return http_options 

679 

680 @staticmethod 

681 def _get_transcoded_request(http_options, request): 

682 pb_request = firestore.RollbackRequest.pb(request) 

683 transcoded_request = path_template.transcode(http_options, pb_request) 

684 return transcoded_request 

685 

686 @staticmethod 

687 def _get_request_body_json(transcoded_request): 

688 # Jsonify the request body 

689 

690 body = json_format.MessageToJson( 

691 transcoded_request["body"], use_integers_for_enums=True 

692 ) 

693 return body 

694 

695 @staticmethod 

696 def _get_query_params_json(transcoded_request): 

697 query_params = json.loads( 

698 json_format.MessageToJson( 

699 transcoded_request["query_params"], 

700 use_integers_for_enums=True, 

701 ) 

702 ) 

703 query_params.update( 

704 _BaseFirestoreRestTransport._BaseRollback._get_unset_required_fields( 

705 query_params 

706 ) 

707 ) 

708 

709 query_params["$alt"] = "json;enum-encoding=int" 

710 return query_params 

711 

712 class _BaseRunAggregationQuery: 

713 def __hash__(self): # pragma: NO COVER 

714 return NotImplementedError("__hash__ must be implemented.") 

715 

716 __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} 

717 

718 @classmethod 

719 def _get_unset_required_fields(cls, message_dict): 

720 return { 

721 k: v 

722 for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() 

723 if k not in message_dict 

724 } 

725 

726 @staticmethod 

727 def _get_http_options(): 

728 http_options: List[Dict[str, str]] = [ 

729 { 

730 "method": "post", 

731 "uri": "/v1/{parent=projects/*/databases/*/documents}:runAggregationQuery", 

732 "body": "*", 

733 }, 

734 { 

735 "method": "post", 

736 "uri": "/v1/{parent=projects/*/databases/*/documents/*/**}:runAggregationQuery", 

737 "body": "*", 

738 }, 

739 ] 

740 return http_options 

741 

742 @staticmethod 

743 def _get_transcoded_request(http_options, request): 

744 pb_request = firestore.RunAggregationQueryRequest.pb(request) 

745 transcoded_request = path_template.transcode(http_options, pb_request) 

746 return transcoded_request 

747 

748 @staticmethod 

749 def _get_request_body_json(transcoded_request): 

750 # Jsonify the request body 

751 

752 body = json_format.MessageToJson( 

753 transcoded_request["body"], use_integers_for_enums=True 

754 ) 

755 return body 

756 

757 @staticmethod 

758 def _get_query_params_json(transcoded_request): 

759 query_params = json.loads( 

760 json_format.MessageToJson( 

761 transcoded_request["query_params"], 

762 use_integers_for_enums=True, 

763 ) 

764 ) 

765 query_params.update( 

766 _BaseFirestoreRestTransport._BaseRunAggregationQuery._get_unset_required_fields( 

767 query_params 

768 ) 

769 ) 

770 

771 query_params["$alt"] = "json;enum-encoding=int" 

772 return query_params 

773 

774 class _BaseRunQuery: 

775 def __hash__(self): # pragma: NO COVER 

776 return NotImplementedError("__hash__ must be implemented.") 

777 

778 __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} 

779 

780 @classmethod 

781 def _get_unset_required_fields(cls, message_dict): 

782 return { 

783 k: v 

784 for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() 

785 if k not in message_dict 

786 } 

787 

788 @staticmethod 

789 def _get_http_options(): 

790 http_options: List[Dict[str, str]] = [ 

791 { 

792 "method": "post", 

793 "uri": "/v1/{parent=projects/*/databases/*/documents}:runQuery", 

794 "body": "*", 

795 }, 

796 { 

797 "method": "post", 

798 "uri": "/v1/{parent=projects/*/databases/*/documents/*/**}:runQuery", 

799 "body": "*", 

800 }, 

801 ] 

802 return http_options 

803 

804 @staticmethod 

805 def _get_transcoded_request(http_options, request): 

806 pb_request = firestore.RunQueryRequest.pb(request) 

807 transcoded_request = path_template.transcode(http_options, pb_request) 

808 return transcoded_request 

809 

810 @staticmethod 

811 def _get_request_body_json(transcoded_request): 

812 # Jsonify the request body 

813 

814 body = json_format.MessageToJson( 

815 transcoded_request["body"], use_integers_for_enums=True 

816 ) 

817 return body 

818 

819 @staticmethod 

820 def _get_query_params_json(transcoded_request): 

821 query_params = json.loads( 

822 json_format.MessageToJson( 

823 transcoded_request["query_params"], 

824 use_integers_for_enums=True, 

825 ) 

826 ) 

827 query_params.update( 

828 _BaseFirestoreRestTransport._BaseRunQuery._get_unset_required_fields( 

829 query_params 

830 ) 

831 ) 

832 

833 query_params["$alt"] = "json;enum-encoding=int" 

834 return query_params 

835 

836 class _BaseUpdateDocument: 

837 def __hash__(self): # pragma: NO COVER 

838 return NotImplementedError("__hash__ must be implemented.") 

839 

840 __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} 

841 

842 @classmethod 

843 def _get_unset_required_fields(cls, message_dict): 

844 return { 

845 k: v 

846 for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() 

847 if k not in message_dict 

848 } 

849 

850 @staticmethod 

851 def _get_http_options(): 

852 http_options: List[Dict[str, str]] = [ 

853 { 

854 "method": "patch", 

855 "uri": "/v1/{document.name=projects/*/databases/*/documents/*/**}", 

856 "body": "document", 

857 }, 

858 ] 

859 return http_options 

860 

861 @staticmethod 

862 def _get_transcoded_request(http_options, request): 

863 pb_request = firestore.UpdateDocumentRequest.pb(request) 

864 transcoded_request = path_template.transcode(http_options, pb_request) 

865 return transcoded_request 

866 

867 @staticmethod 

868 def _get_request_body_json(transcoded_request): 

869 # Jsonify the request body 

870 

871 body = json_format.MessageToJson( 

872 transcoded_request["body"], use_integers_for_enums=True 

873 ) 

874 return body 

875 

876 @staticmethod 

877 def _get_query_params_json(transcoded_request): 

878 query_params = json.loads( 

879 json_format.MessageToJson( 

880 transcoded_request["query_params"], 

881 use_integers_for_enums=True, 

882 ) 

883 ) 

884 query_params.update( 

885 _BaseFirestoreRestTransport._BaseUpdateDocument._get_unset_required_fields( 

886 query_params 

887 ) 

888 ) 

889 

890 query_params["$alt"] = "json;enum-encoding=int" 

891 return query_params 

892 

893 class _BaseWrite: 

894 def __hash__(self): # pragma: NO COVER 

895 return NotImplementedError("__hash__ must be implemented.") 

896 

897 class _BaseCancelOperation: 

898 def __hash__(self): # pragma: NO COVER 

899 return NotImplementedError("__hash__ must be implemented.") 

900 

901 @staticmethod 

902 def _get_http_options(): 

903 http_options: List[Dict[str, str]] = [ 

904 { 

905 "method": "post", 

906 "uri": "/v1/{name=projects/*/databases/*/operations/*}:cancel", 

907 "body": "*", 

908 }, 

909 ] 

910 return http_options 

911 

912 @staticmethod 

913 def _get_transcoded_request(http_options, request): 

914 request_kwargs = json_format.MessageToDict(request) 

915 transcoded_request = path_template.transcode(http_options, **request_kwargs) 

916 return transcoded_request 

917 

918 @staticmethod 

919 def _get_request_body_json(transcoded_request): 

920 body = json.dumps(transcoded_request["body"]) 

921 return body 

922 

923 @staticmethod 

924 def _get_query_params_json(transcoded_request): 

925 query_params = json.loads(json.dumps(transcoded_request["query_params"])) 

926 return query_params 

927 

928 class _BaseDeleteOperation: 

929 def __hash__(self): # pragma: NO COVER 

930 return NotImplementedError("__hash__ must be implemented.") 

931 

932 @staticmethod 

933 def _get_http_options(): 

934 http_options: List[Dict[str, str]] = [ 

935 { 

936 "method": "delete", 

937 "uri": "/v1/{name=projects/*/databases/*/operations/*}", 

938 }, 

939 ] 

940 return http_options 

941 

942 @staticmethod 

943 def _get_transcoded_request(http_options, request): 

944 request_kwargs = json_format.MessageToDict(request) 

945 transcoded_request = path_template.transcode(http_options, **request_kwargs) 

946 return transcoded_request 

947 

948 @staticmethod 

949 def _get_query_params_json(transcoded_request): 

950 query_params = json.loads(json.dumps(transcoded_request["query_params"])) 

951 return query_params 

952 

953 class _BaseGetOperation: 

954 def __hash__(self): # pragma: NO COVER 

955 return NotImplementedError("__hash__ must be implemented.") 

956 

957 @staticmethod 

958 def _get_http_options(): 

959 http_options: List[Dict[str, str]] = [ 

960 { 

961 "method": "get", 

962 "uri": "/v1/{name=projects/*/databases/*/operations/*}", 

963 }, 

964 ] 

965 return http_options 

966 

967 @staticmethod 

968 def _get_transcoded_request(http_options, request): 

969 request_kwargs = json_format.MessageToDict(request) 

970 transcoded_request = path_template.transcode(http_options, **request_kwargs) 

971 return transcoded_request 

972 

973 @staticmethod 

974 def _get_query_params_json(transcoded_request): 

975 query_params = json.loads(json.dumps(transcoded_request["query_params"])) 

976 return query_params 

977 

978 class _BaseListOperations: 

979 def __hash__(self): # pragma: NO COVER 

980 return NotImplementedError("__hash__ must be implemented.") 

981 

982 @staticmethod 

983 def _get_http_options(): 

984 http_options: List[Dict[str, str]] = [ 

985 { 

986 "method": "get", 

987 "uri": "/v1/{name=projects/*/databases/*}/operations", 

988 }, 

989 ] 

990 return http_options 

991 

992 @staticmethod 

993 def _get_transcoded_request(http_options, request): 

994 request_kwargs = json_format.MessageToDict(request) 

995 transcoded_request = path_template.transcode(http_options, **request_kwargs) 

996 return transcoded_request 

997 

998 @staticmethod 

999 def _get_query_params_json(transcoded_request): 

1000 query_params = json.loads(json.dumps(transcoded_request["query_params"])) 

1001 return query_params 

1002 

1003 

1004__all__ = ("_BaseFirestoreRestTransport",)