diff --git a/.librarian/generator-input/client-post-processing/remove-erroneous-client.yaml b/.librarian/generator-input/client-post-processing/remove-erroneous-client.yaml deleted file mode 100644 index f933b440ed28..000000000000 --- a/.librarian/generator-input/client-post-processing/remove-erroneous-client.yaml +++ /dev/null @@ -1,36 +0,0 @@ -# Copyright 2023 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. -description: google-cloud-monitoring-dashboards has an erroneous client google/monitoring/dashboard -url: https://github.com/googleapis/google-cloud-python/issues/11858 -replacements: - - paths: [ - packages/google-cloud-monitoring-dashboards/docs/index.rst - ] - before: | - API Reference - ------------- - .. toctree:: - :maxdepth: 2 - - dashboard_v1/services_ - dashboard_v1/types_ - after: | - API Reference - ------------- - .. toctree:: - :maxdepth: 2 - - monitoring_dashboard_v1/services_ - monitoring_dashboard_v1/types_ - count: 1 diff --git a/.librarian/state.yaml b/.librarian/state.yaml index f09121bb3401..8de8a1c704a8 100644 --- a/.librarian/state.yaml +++ b/.librarian/state.yaml @@ -112,7 +112,7 @@ libraries: last_generated_commit: a9ebc23947a515fab3de97ff326c86fc8f03fae1 apis: - path: google/apps/card/v1 - service_config: "" + service_config: '' source_roots: - packages/google-apps-card preserve_regex: @@ -271,7 +271,7 @@ libraries: - path: google/identity/accesscontextmanager/v1 service_config: accesscontextmanager_v1.yaml - path: google/identity/accesscontextmanager/type - service_config: "" + service_config: '' source_roots: - packages/google-cloud-access-context-manager preserve_regex: [] @@ -463,7 +463,7 @@ libraries: last_generated_commit: a9ebc23947a515fab3de97ff326c86fc8f03fae1 apis: - path: google/appengine/logging/v1 - service_config: "" + service_config: '' source_roots: - packages/google-cloud-appengine-logging preserve_regex: @@ -883,7 +883,7 @@ libraries: last_generated_commit: a9ebc23947a515fab3de97ff326c86fc8f03fae1 apis: - path: google/cloud/bigquery/logging/v1 - service_config: "" + service_config: '' source_roots: - packages/google-cloud-bigquery-logging preserve_regex: @@ -2013,7 +2013,7 @@ libraries: last_generated_commit: a9ebc23947a515fab3de97ff326c86fc8f03fae1 apis: - path: google/iam/v1/logging - service_config: "" + service_config: '' source_roots: - packages/google-cloud-iam-logging preserve_regex: @@ -3228,7 +3228,7 @@ libraries: last_generated_commit: a9ebc23947a515fab3de97ff326c86fc8f03fae1 apis: - path: google/devtools/source/v1 - service_config: "" + service_config: '' source_roots: - packages/google-cloud-source-context preserve_regex: @@ -4312,7 +4312,7 @@ libraries: last_generated_commit: a9ebc23947a515fab3de97ff326c86fc8f03fae1 apis: - path: google/shopping/type - service_config: "" + service_config: '' source_roots: - packages/google-shopping-type preserve_regex: @@ -4336,11 +4336,11 @@ libraries: - path: google/cloud/location service_config: cloud.yaml - path: google/logging/type - service_config: "" + service_config: '' - path: google/rpc service_config: rpc_publish.yaml - path: google/rpc/context - service_config: "" + service_config: '' - path: google/type service_config: type.yaml source_roots: @@ -4367,6 +4367,26 @@ libraries: remove_regex: - packages/google-cloud-biglake tag_format: '{id}-v{version}' + - id: google-cloud-monitoring-dashboards + version: 2.19.0 + last_generated_commit: d300b151a973ce0425ae4ad07b3de957ca31bec6 + apis: + - path: google/monitoring/dashboard/v1 + source_roots: + - packages/google-cloud-monitoring-dashboards + preserve_regex: + - packages/google-cloud-monitoring-dashboards/CHANGELOG.md + - docs/CHANGELOG.md + - docs/README.rst + - samples/README.txt + - scripts/client-post-processing + - samples/snippets/README.rst + - tests/system + - packages/google-cloud-monitoring-dashboards/google/monitoring + - tests/unit/gapic/dashboard_v1 + remove_regex: + - packages/google-cloud-monitoring-dashboards + tag_format: '{id}-v{version}' - id: google-cloud-gke-multicloud version: 0.6.22 last_generated_commit: d300b151a973ce0425ae4ad07b3de957ca31bec6 diff --git a/packages/google-cloud-monitoring-dashboards/.OwlBot.yaml b/packages/google-cloud-monitoring-dashboards/.OwlBot.yaml deleted file mode 100644 index a78610de62ac..000000000000 --- a/packages/google-cloud-monitoring-dashboards/.OwlBot.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2021 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. - - -deep-remove-regex: - - /owl-bot-staging - -deep-copy-regex: - - source: /google/monitoring/dashboard/(v.*)/.*-py - dest: /owl-bot-staging/google-cloud-monitoring-dashboards/$1 - -begin-after-commit-hash: b06c9034cfcbce180ba732d03be6526e5c8ea1bc - -api-name: google-cloud-monitoring-dashboards diff --git a/packages/google-cloud-monitoring-dashboards/scripts/fixup_dashboard_v1_keywords.py b/packages/google-cloud-monitoring-dashboards/scripts/fixup_dashboard_v1_keywords.py deleted file mode 100644 index b6e5ba3c32aa..000000000000 --- a/packages/google-cloud-monitoring-dashboards/scripts/fixup_dashboard_v1_keywords.py +++ /dev/null @@ -1,180 +0,0 @@ -#! /usr/bin/env python3 -# -*- coding: utf-8 -*- -# Copyright 2022 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. -# -import argparse -import os -import libcst as cst -import pathlib -import sys -from typing import (Any, Callable, Dict, List, Sequence, Tuple) - - -def partition( - predicate: Callable[[Any], bool], - iterator: Sequence[Any] -) -> Tuple[List[Any], List[Any]]: - """A stable, out-of-place partition.""" - results = ([], []) - - for i in iterator: - results[int(predicate(i))].append(i) - - # Returns trueList, falseList - return results[1], results[0] - - -class dashboardCallTransformer(cst.CSTTransformer): - CTRL_PARAMS: Tuple[str] = ('retry', 'timeout', 'metadata') - METHOD_TO_PARAMS: Dict[str, Tuple[str]] = { - 'create_dashboard': ('parent', 'dashboard', 'validate_only', ), - 'delete_dashboard': ('name', ), - 'get_dashboard': ('name', ), - 'list_dashboards': ('parent', 'page_size', 'page_token', ), - 'update_dashboard': ('dashboard', 'validate_only', ), - } - - def leave_Call(self, original: cst.Call, updated: cst.Call) -> cst.CSTNode: - try: - key = original.func.attr.value - kword_params = self.METHOD_TO_PARAMS[key] - except (AttributeError, KeyError): - # Either not a method from the API or too convoluted to be sure. - return updated - - # If the existing code is valid, keyword args come after positional args. - # Therefore, all positional args must map to the first parameters. - args, kwargs = partition(lambda a: not bool(a.keyword), updated.args) - if any(k.keyword.value == "request" for k in kwargs): - # We've already fixed this file, don't fix it again. - return updated - - kwargs, ctrl_kwargs = partition( - lambda a: a.keyword.value not in self.CTRL_PARAMS, - kwargs - ) - - args, ctrl_args = args[:len(kword_params)], args[len(kword_params):] - ctrl_kwargs.extend(cst.Arg(value=a.value, keyword=cst.Name(value=ctrl)) - for a, ctrl in zip(ctrl_args, self.CTRL_PARAMS)) - - request_arg = cst.Arg( - value=cst.Dict([ - cst.DictElement( - cst.SimpleString("'{}'".format(name)), -cst.Element(value=arg.value) - ) - # Note: the args + kwargs looks silly, but keep in mind that - # the control parameters had to be stripped out, and that - # those could have been passed positionally or by keyword. - for name, arg in zip(kword_params, args + kwargs)]), - keyword=cst.Name("request") - ) - - return updated.with_changes( - args=[request_arg] + ctrl_kwargs - ) - - -def fix_files( - in_dir: pathlib.Path, - out_dir: pathlib.Path, - *, - transformer=dashboardCallTransformer(), -): - """Duplicate the input dir to the output dir, fixing file method calls. - - Preconditions: - * in_dir is a real directory - * out_dir is a real, empty directory - """ - pyfile_gen = ( - pathlib.Path(os.path.join(root, f)) - for root, _, files in os.walk(in_dir) - for f in files if os.path.splitext(f)[1] == ".py" - ) - - for fpath in pyfile_gen: - with open(fpath, 'r') as f: - src = f.read() - - # Parse the code and insert method call fixes. - tree = cst.parse_module(src) - updated = tree.visit(transformer) - - # Create the path and directory structure for the new file. - updated_path = out_dir.joinpath(fpath.relative_to(in_dir)) - updated_path.parent.mkdir(parents=True, exist_ok=True) - - # Generate the updated source file at the corresponding path. - with open(updated_path, 'w') as f: - f.write(updated.code) - - -if __name__ == '__main__': - parser = argparse.ArgumentParser( - description="""Fix up source that uses the dashboard client library. - -The existing sources are NOT overwritten but are copied to output_dir with changes made. - -Note: This tool operates at a best-effort level at converting positional - parameters in client method calls to keyword based parameters. - Cases where it WILL FAIL include - A) * or ** expansion in a method call. - B) Calls via function or method alias (includes free function calls) - C) Indirect or dispatched calls (e.g. the method is looked up dynamically) - - These all constitute false negatives. The tool will also detect false - positives when an API method shares a name with another method. -""") - parser.add_argument( - '-d', - '--input-directory', - required=True, - dest='input_dir', - help='the input directory to walk for python files to fix up', - ) - parser.add_argument( - '-o', - '--output-directory', - required=True, - dest='output_dir', - help='the directory to output files fixed via un-flattening', - ) - args = parser.parse_args() - input_dir = pathlib.Path(args.input_dir) - output_dir = pathlib.Path(args.output_dir) - if not input_dir.is_dir(): - print( - f"input directory '{input_dir}' does not exist or is not a directory", - file=sys.stderr, - ) - sys.exit(-1) - - if not output_dir.is_dir(): - print( - f"output directory '{output_dir}' does not exist or is not a directory", - file=sys.stderr, - ) - sys.exit(-1) - - if os.listdir(output_dir): - print( - f"output directory '{output_dir}' is not empty", - file=sys.stderr, - ) - sys.exit(-1) - - fix_files(input_dir, output_dir) diff --git a/scripts/configure_state_yaml/packages_to_onboard.yaml b/scripts/configure_state_yaml/packages_to_onboard.yaml index e614eca95381..d9157ff5d6fe 100644 --- a/scripts/configure_state_yaml/packages_to_onboard.yaml +++ b/scripts/configure_state_yaml/packages_to_onboard.yaml @@ -138,6 +138,7 @@ packages_to_onboard: [ "google-cloud-migrationcenter", "google-cloud-modelarmor", "google-cloud-monitoring", + "google-cloud-monitoring-dashboards", "google-cloud-monitoring-metrics-scopes", "google-cloud-netapp", "google-cloud-network-connectivity",