# Copyright 2018 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """This script is used to synthesize generated parts of this library.""" import logging from pathlib import Path import subprocess import synthtool as s from synthtool.languages import php from synthtool import _tracked_paths logging.basicConfig(level=logging.DEBUG) src = Path(f"../{php.STAGING_DIR}/Firestore").resolve() dest = Path().resolve() # For preserving the copyright year, we use php._merge function preserve_copyright_year = php._merge # Added so that we can pass copy_excludes in the owlbot_main() call _tracked_paths.add(src) php.owlbot_main( src=src, dest=dest, copy_excludes=[ src / '*/src/V1/FirestoreClient.php', src / '*/src/Admin/V1/FirestoreAdminClient.php', ] ) # Firestore Admin also lives here admin_library = Path(f"../{php.STAGING_DIR}/Firestore/v1/Admin").resolve() # copy all src s.move( admin_library / f'src', 'src/Admin', merge=preserve_copyright_year, excludes=[ admin_library / 'src/V1/FirestoreAdminClient.php', ] ) # copy proto files to src also s.move(admin_library / f'proto/src/Google/Cloud/Firestore', f'src/', merge=preserve_copyright_year) s.move(admin_library / f'tests/Unit', 'tests/Unit/Admin', merge=preserve_copyright_year) # copy GPBMetadata file to metadata s.move(admin_library / f'proto/src/GPBMetadata/Google/Firestore', f'metadata/', merge=preserve_copyright_year) # document and utilize apiEndpoint instead of serviceAddress s.replace( "**/Gapic/*GapicClient.php", r"'serviceAddress' =>", r"'apiEndpoint' =>") s.replace( "**/Gapic/*GapicClient.php", r"@type string \$serviceAddress\n\s+\*\s+The address", r"""@type string $serviceAddress * **Deprecated**. This option will be removed in a future major release. Please * utilize the `$apiEndpoint` option instead. * @type string $apiEndpoint * The address""") s.replace( "**/Gapic/*GapicClient.php", r"\$transportConfig, and any \$serviceAddress", r"$transportConfig, and any `$apiEndpoint`") yearFixes = [ { "year": "2017", "files": [ "src/V1beta1/Gapic/*GapicClient.php", "src/V1beta1/*Client.php", "tests/**/V1beta1/*Test.php" ] }, { "year": "2019", "files": [ "src/V1/Gapic/*GapicClient.php", "src/V1/*Client.php", "tests/**/V1/*Test.php", "src/Admin/V1/*Client.php", 'src/Admin/V1/Gapic/*GapicClient.php', ] } ] for fix in yearFixes: year = fix.get("year") for path in fix.get("files"): s.replace( path, r'Copyright \d{4}', f'Copyright {year}' ) # fix test group s.replace( 'tests/**/Admin/V1/*Test.php', r'@group admin', '@group firestore-admin') ### [START] protoc backwards compatibility fixes # roll back to private properties. s.replace( "src/**/V*/**/*.php", r"Generated from protobuf field ([^\n]{0,})\n\s{5}\*/\n\s{4}protected \$", r"""Generated from protobuf field \1 */ private $""") # prevent proto messages from being marked final s.replace( "src/**/V*/**/*.php", r"final class", r"class") # Replace "Unwrapped" with "Value" for method names. s.replace( "src/**/V*/**/*.php", r"public function ([s|g]\w{3,})Unwrapped", r"public function \1Value" ) ### [END] protoc backwards compatibility fixes # fix relative cloud.google.com links s.replace( "src/**/V*/**/*.php", r"(.{0,})\]\((/.{0,})\)", r"\1](https://cloud.google.com\2)" ) # fix backwards-compatibility issues with LRO methods lro_methods = ['createIndex', 'exportDocuments', 'importDocuments', 'updateField'] for lro_method in lro_methods: s.replace( "src/Admin/V1/Gapic/FirestoreAdminGapicClient.php", rf'{lro_method}\(', rf'{lro_method}LRO(', ) s.replace( "tests/Unit/Admin/V1/FirestoreAdminClientTest.php", rf'{lro_method}\(', rf'{lro_method}LRO(', ) # fix backwards-compatibility issues with paginated methods paginated_method = 'partitionQuery' s.replace( "src/V1/Gapic/FirestoreGapicClient.php", rf'{paginated_method}\(', rf'{paginated_method}Paginated(', ) s.replace( "tests/Unit/V1/FirestoreClientTest.php", rf'{paginated_method}\(', rf'{paginated_method}Paginated(', )