Skip to content

Commit 8fab653

Browse files
feat: Added resource type and display_name field to the FindingResult (#248)
...and supported them in the filter for ListFindings and GroupFindings. - [ ] Regenerate this pull request now. PiperOrigin-RevId: 408362247 Source-Link: googleapis/googleapis@4d71c45 Source-Link: googleapis/googleapis-gen@058c449 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiMDU4YzQ0OTg5ZGRiYTk1M2FhMWNjNjc0ODY2MjQyYTg2NzdmZTMzYSJ9 docs: list oneofs in docstring fix(deps): require google-api-core >= 1.28.0 fix(deps): drop packaging dependency feat: add display_name to the resource which is surfaced in NotificationMessage
1 parent 49bf50f commit 8fab653

File tree

26 files changed

+368
-624
lines changed

26 files changed

+368
-624
lines changed

packages/google-cloud-securitycenter/google/cloud/securitycenter_v1/services/security_center/async_client.py

Lines changed: 86 additions & 70 deletions
Large diffs are not rendered by default.

packages/google-cloud-securitycenter/google/cloud/securitycenter_v1/services/security_center/client.py

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
from google.auth.exceptions import MutualTLSChannelError # type: ignore
3131
from google.oauth2 import service_account # type: ignore
3232

33+
OptionalRetry = Union[retries.Retry, object]
34+
3335
from google.api_core import operation # type: ignore
3436
from google.api_core import operation_async # type: ignore
3537
from google.cloud.securitycenter_v1.services.security_center import pagers
@@ -465,7 +467,7 @@ def create_source(
465467
*,
466468
parent: str = None,
467469
source: gcs_source.Source = None,
468-
retry: retries.Retry = gapic_v1.method.DEFAULT,
470+
retry: OptionalRetry = gapic_v1.method.DEFAULT,
469471
timeout: float = None,
470472
metadata: Sequence[Tuple[str, str]] = (),
471473
) -> gcs_source.Source:
@@ -552,7 +554,7 @@ def create_finding(
552554
parent: str = None,
553555
finding_id: str = None,
554556
finding: gcs_finding.Finding = None,
555-
retry: retries.Retry = gapic_v1.method.DEFAULT,
557+
retry: OptionalRetry = gapic_v1.method.DEFAULT,
556558
timeout: float = None,
557559
metadata: Sequence[Tuple[str, str]] = (),
558560
) -> gcs_finding.Finding:
@@ -658,7 +660,7 @@ def create_notification_config(
658660
parent: str = None,
659661
config_id: str = None,
660662
notification_config: gcs_notification_config.NotificationConfig = None,
661-
retry: retries.Retry = gapic_v1.method.DEFAULT,
663+
retry: OptionalRetry = gapic_v1.method.DEFAULT,
662664
timeout: float = None,
663665
metadata: Sequence[Tuple[str, str]] = (),
664666
) -> gcs_notification_config.NotificationConfig:
@@ -763,7 +765,7 @@ def delete_notification_config(
763765
] = None,
764766
*,
765767
name: str = None,
766-
retry: retries.Retry = gapic_v1.method.DEFAULT,
768+
retry: OptionalRetry = gapic_v1.method.DEFAULT,
767769
timeout: float = None,
768770
metadata: Sequence[Tuple[str, str]] = (),
769771
) -> None:
@@ -832,7 +834,7 @@ def get_iam_policy(
832834
request: Union[iam_policy_pb2.GetIamPolicyRequest, dict] = None,
833835
*,
834836
resource: str = None,
835-
retry: retries.Retry = gapic_v1.method.DEFAULT,
837+
retry: OptionalRetry = gapic_v1.method.DEFAULT,
836838
timeout: float = None,
837839
metadata: Sequence[Tuple[str, str]] = (),
838840
) -> policy_pb2.Policy:
@@ -960,7 +962,7 @@ def get_notification_config(
960962
] = None,
961963
*,
962964
name: str = None,
963-
retry: retries.Retry = gapic_v1.method.DEFAULT,
965+
retry: OptionalRetry = gapic_v1.method.DEFAULT,
964966
timeout: float = None,
965967
metadata: Sequence[Tuple[str, str]] = (),
966968
) -> notification_config.NotificationConfig:
@@ -1038,7 +1040,7 @@ def get_organization_settings(
10381040
] = None,
10391041
*,
10401042
name: str = None,
1041-
retry: retries.Retry = gapic_v1.method.DEFAULT,
1043+
retry: OptionalRetry = gapic_v1.method.DEFAULT,
10421044
timeout: float = None,
10431045
metadata: Sequence[Tuple[str, str]] = (),
10441046
) -> organization_settings.OrganizationSettings:
@@ -1115,7 +1117,7 @@ def get_source(
11151117
request: Union[securitycenter_service.GetSourceRequest, dict] = None,
11161118
*,
11171119
name: str = None,
1118-
retry: retries.Retry = gapic_v1.method.DEFAULT,
1120+
retry: OptionalRetry = gapic_v1.method.DEFAULT,
11191121
timeout: float = None,
11201122
metadata: Sequence[Tuple[str, str]] = (),
11211123
) -> source.Source:
@@ -1190,7 +1192,7 @@ def group_assets(
11901192
self,
11911193
request: Union[securitycenter_service.GroupAssetsRequest, dict] = None,
11921194
*,
1193-
retry: retries.Retry = gapic_v1.method.DEFAULT,
1195+
retry: OptionalRetry = gapic_v1.method.DEFAULT,
11941196
timeout: float = None,
11951197
metadata: Sequence[Tuple[str, str]] = (),
11961198
) -> pagers.GroupAssetsPager:
@@ -1252,7 +1254,7 @@ def group_findings(
12521254
*,
12531255
parent: str = None,
12541256
group_by: str = None,
1255-
retry: retries.Retry = gapic_v1.method.DEFAULT,
1257+
retry: OptionalRetry = gapic_v1.method.DEFAULT,
12561258
timeout: float = None,
12571259
metadata: Sequence[Tuple[str, str]] = (),
12581260
) -> pagers.GroupFindingsPager:
@@ -1367,7 +1369,7 @@ def list_assets(
13671369
self,
13681370
request: Union[securitycenter_service.ListAssetsRequest, dict] = None,
13691371
*,
1370-
retry: retries.Retry = gapic_v1.method.DEFAULT,
1372+
retry: OptionalRetry = gapic_v1.method.DEFAULT,
13711373
timeout: float = None,
13721374
metadata: Sequence[Tuple[str, str]] = (),
13731375
) -> pagers.ListAssetsPager:
@@ -1424,7 +1426,7 @@ def list_findings(
14241426
self,
14251427
request: Union[securitycenter_service.ListFindingsRequest, dict] = None,
14261428
*,
1427-
retry: retries.Retry = gapic_v1.method.DEFAULT,
1429+
retry: OptionalRetry = gapic_v1.method.DEFAULT,
14281430
timeout: float = None,
14291431
metadata: Sequence[Tuple[str, str]] = (),
14301432
) -> pagers.ListFindingsPager:
@@ -1489,7 +1491,7 @@ def list_notification_configs(
14891491
] = None,
14901492
*,
14911493
parent: str = None,
1492-
retry: retries.Retry = gapic_v1.method.DEFAULT,
1494+
retry: OptionalRetry = gapic_v1.method.DEFAULT,
14931495
timeout: float = None,
14941496
metadata: Sequence[Tuple[str, str]] = (),
14951497
) -> pagers.ListNotificationConfigsPager:
@@ -1574,7 +1576,7 @@ def list_sources(
15741576
request: Union[securitycenter_service.ListSourcesRequest, dict] = None,
15751577
*,
15761578
parent: str = None,
1577-
retry: retries.Retry = gapic_v1.method.DEFAULT,
1579+
retry: OptionalRetry = gapic_v1.method.DEFAULT,
15781580
timeout: float = None,
15791581
metadata: Sequence[Tuple[str, str]] = (),
15801582
) -> pagers.ListSourcesPager:
@@ -1654,7 +1656,7 @@ def run_asset_discovery(
16541656
request: Union[securitycenter_service.RunAssetDiscoveryRequest, dict] = None,
16551657
*,
16561658
parent: str = None,
1657-
retry: retries.Retry = gapic_v1.method.DEFAULT,
1659+
retry: OptionalRetry = gapic_v1.method.DEFAULT,
16581660
timeout: float = None,
16591661
metadata: Sequence[Tuple[str, str]] = (),
16601662
) -> operation.Operation:
@@ -1744,7 +1746,7 @@ def set_finding_state(
17441746
name: str = None,
17451747
state: finding.Finding.State = None,
17461748
start_time: timestamp_pb2.Timestamp = None,
1747-
retry: retries.Retry = gapic_v1.method.DEFAULT,
1749+
retry: OptionalRetry = gapic_v1.method.DEFAULT,
17481750
timeout: float = None,
17491751
metadata: Sequence[Tuple[str, str]] = (),
17501752
) -> finding.Finding:
@@ -1843,7 +1845,7 @@ def set_iam_policy(
18431845
request: Union[iam_policy_pb2.SetIamPolicyRequest, dict] = None,
18441846
*,
18451847
resource: str = None,
1846-
retry: retries.Retry = gapic_v1.method.DEFAULT,
1848+
retry: OptionalRetry = gapic_v1.method.DEFAULT,
18471849
timeout: float = None,
18481850
metadata: Sequence[Tuple[str, str]] = (),
18491851
) -> policy_pb2.Policy:
@@ -1970,7 +1972,7 @@ def test_iam_permissions(
19701972
*,
19711973
resource: str = None,
19721974
permissions: Sequence[str] = None,
1973-
retry: retries.Retry = gapic_v1.method.DEFAULT,
1975+
retry: OptionalRetry = gapic_v1.method.DEFAULT,
19741976
timeout: float = None,
19751977
metadata: Sequence[Tuple[str, str]] = (),
19761978
) -> iam_policy_pb2.TestIamPermissionsResponse:
@@ -2052,7 +2054,7 @@ def update_finding(
20522054
request: Union[securitycenter_service.UpdateFindingRequest, dict] = None,
20532055
*,
20542056
finding: gcs_finding.Finding = None,
2055-
retry: retries.Retry = gapic_v1.method.DEFAULT,
2057+
retry: OptionalRetry = gapic_v1.method.DEFAULT,
20562058
timeout: float = None,
20572059
metadata: Sequence[Tuple[str, str]] = (),
20582060
) -> gcs_finding.Finding:
@@ -2141,7 +2143,7 @@ def update_notification_config(
21412143
*,
21422144
notification_config: gcs_notification_config.NotificationConfig = None,
21432145
update_mask: field_mask_pb2.FieldMask = None,
2144-
retry: retries.Retry = gapic_v1.method.DEFAULT,
2146+
retry: OptionalRetry = gapic_v1.method.DEFAULT,
21452147
timeout: float = None,
21462148
metadata: Sequence[Tuple[str, str]] = (),
21472149
) -> gcs_notification_config.NotificationConfig:
@@ -2236,7 +2238,7 @@ def update_organization_settings(
22362238
] = None,
22372239
*,
22382240
organization_settings: gcs_organization_settings.OrganizationSettings = None,
2239-
retry: retries.Retry = gapic_v1.method.DEFAULT,
2241+
retry: OptionalRetry = gapic_v1.method.DEFAULT,
22402242
timeout: float = None,
22412243
metadata: Sequence[Tuple[str, str]] = (),
22422244
) -> gcs_organization_settings.OrganizationSettings:
@@ -2314,7 +2316,7 @@ def update_source(
23142316
request: Union[securitycenter_service.UpdateSourceRequest, dict] = None,
23152317
*,
23162318
source: gcs_source.Source = None,
2317-
retry: retries.Retry = gapic_v1.method.DEFAULT,
2319+
retry: OptionalRetry = gapic_v1.method.DEFAULT,
23182320
timeout: float = None,
23192321
metadata: Sequence[Tuple[str, str]] = (),
23202322
) -> gcs_source.Source:
@@ -2391,7 +2393,7 @@ def update_security_marks(
23912393
request: Union[securitycenter_service.UpdateSecurityMarksRequest, dict] = None,
23922394
*,
23932395
security_marks: gcs_security_marks.SecurityMarks = None,
2394-
retry: retries.Retry = gapic_v1.method.DEFAULT,
2396+
retry: OptionalRetry = gapic_v1.method.DEFAULT,
23952397
timeout: float = None,
23962398
metadata: Sequence[Tuple[str, str]] = (),
23972399
) -> gcs_security_marks.SecurityMarks:

packages/google-cloud-securitycenter/google/cloud/securitycenter_v1/services/security_center/transports/base.py

Lines changed: 2 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
#
1616
import abc
1717
from typing import Awaitable, Callable, Dict, Optional, Sequence, Union
18-
import packaging.version
1918
import pkg_resources
2019

2120
import google.auth # type: ignore
@@ -55,15 +54,6 @@
5554
except pkg_resources.DistributionNotFound:
5655
DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo()
5756

58-
try:
59-
# google.auth.__version__ was added in 1.26.0
60-
_GOOGLE_AUTH_VERSION = google.auth.__version__
61-
except AttributeError:
62-
try: # try pkg_resources if it is available
63-
_GOOGLE_AUTH_VERSION = pkg_resources.get_distribution("google-auth").version
64-
except pkg_resources.DistributionNotFound: # pragma: NO COVER
65-
_GOOGLE_AUTH_VERSION = None
66-
6757

6858
class SecurityCenterTransport(abc.ABC):
6959
"""Abstract transport class for SecurityCenter."""
@@ -113,7 +103,7 @@ def __init__(
113103
host += ":443"
114104
self._host = host
115105

116-
scopes_kwargs = self._get_scopes_kwargs(self._host, scopes)
106+
scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES}
117107

118108
# Save the scopes.
119109
self._scopes = scopes
@@ -146,29 +136,6 @@ def __init__(
146136
# Save the credentials.
147137
self._credentials = credentials
148138

149-
# TODO(busunkim): This method is in the base transport
150-
# to avoid duplicating code across the transport classes. These functions
151-
# should be deleted once the minimum required versions of google-auth is increased.
152-
153-
# TODO: Remove this function once google-auth >= 1.25.0 is required
154-
@classmethod
155-
def _get_scopes_kwargs(
156-
cls, host: str, scopes: Optional[Sequence[str]]
157-
) -> Dict[str, Optional[Sequence[str]]]:
158-
"""Returns scopes kwargs to pass to google-auth methods depending on the google-auth version"""
159-
160-
scopes_kwargs = {}
161-
162-
if _GOOGLE_AUTH_VERSION and (
163-
packaging.version.parse(_GOOGLE_AUTH_VERSION)
164-
>= packaging.version.parse("1.25.0")
165-
):
166-
scopes_kwargs = {"scopes": scopes, "default_scopes": cls.AUTH_SCOPES}
167-
else:
168-
scopes_kwargs = {"scopes": scopes or cls.AUTH_SCOPES}
169-
170-
return scopes_kwargs
171-
172139
def _prep_wrapped_messages(self, client_info):
173140
# Precompute the wrapped methods.
174141
self._wrapped_methods = {
@@ -395,7 +362,7 @@ def close(self):
395362
raise NotImplementedError()
396363

397364
@property
398-
def operations_client(self) -> operations_v1.OperationsClient:
365+
def operations_client(self):
399366
"""Return the client designed to process long-running operations."""
400367
raise NotImplementedError()
401368

packages/google-cloud-securitycenter/google/cloud/securitycenter_v1/services/security_center/transports/grpc.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ def __init__(
128128
self._grpc_channel = None
129129
self._ssl_channel_credentials = ssl_channel_credentials
130130
self._stubs: Dict[str, Callable] = {}
131-
self._operations_client = None
131+
self._operations_client: Optional[operations_v1.OperationsClient] = None
132132

133133
if api_mtls_endpoint:
134134
warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning)

packages/google-cloud-securitycenter/google/cloud/securitycenter_v1/services/security_center/transports/grpc_asyncio.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
from google.api_core import operations_v1 # type: ignore
2222
from google.auth import credentials as ga_credentials # type: ignore
2323
from google.auth.transport.grpc import SslCredentials # type: ignore
24-
import packaging.version
2524

2625
import grpc # type: ignore
2726
from grpc.experimental import aio # type: ignore
@@ -175,7 +174,7 @@ def __init__(
175174
self._grpc_channel = None
176175
self._ssl_channel_credentials = ssl_channel_credentials
177176
self._stubs: Dict[str, Callable] = {}
178-
self._operations_client = None
177+
self._operations_client: Optional[operations_v1.OperationsAsyncClient] = None
179178

180179
if api_mtls_endpoint:
181180
warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning)

packages/google-cloud-securitycenter/google/cloud/securitycenter_v1/types/notification_config.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ class NotificationConfig(proto.Message):
2828
configuration to send notifications for create/update events of
2929
findings, assets and etc.
3030
31+
32+
.. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields
33+
3134
Attributes:
3235
name (str):
3336
The relative resource name of this notification config. See:
@@ -47,6 +50,7 @@ class NotificationConfig(proto.Message):
4750
streaming_config (google.cloud.securitycenter_v1.types.NotificationConfig.StreamingConfig):
4851
The config for triggering streaming-based
4952
notifications.
53+
This field is a member of `oneof`_ ``notify_config``.
5054
"""
5155

5256
class StreamingConfig(proto.Message):

packages/google-cloud-securitycenter/google/cloud/securitycenter_v1/types/notification_message.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,16 @@
2727
class NotificationMessage(proto.Message):
2828
r"""Cloud SCC's Notification
2929
30+
.. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields
31+
3032
Attributes:
3133
notification_config_name (str):
3234
Name of the notification config that
3335
generated current notification.
3436
finding (google.cloud.securitycenter_v1.types.Finding):
3537
If it's a Finding based notification config,
3638
this field will be populated.
39+
This field is a member of `oneof`_ ``event``.
3740
resource (google.cloud.securitycenter_v1.types.Resource):
3841
The Cloud resource tied to this
3942
notification's Finding.

packages/google-cloud-securitycenter/google/cloud/securitycenter_v1/types/resource.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ class Resource(proto.Message):
4848
folder is the deepest nested folder, and the
4949
last folder is the folder directly under the
5050
Organization.
51+
display_name (str):
52+
The human readable name of the resource.
5153
"""
5254

5355
name = proto.Field(proto.STRING, number=1,)
@@ -57,6 +59,7 @@ class Resource(proto.Message):
5759
parent_display_name = proto.Field(proto.STRING, number=5,)
5860
type_ = proto.Field(proto.STRING, number=6,)
5961
folders = proto.RepeatedField(proto.MESSAGE, number=7, message=folder.Folder,)
62+
display_name = proto.Field(proto.STRING, number=8,)
6063

6164

6265
__all__ = tuple(sorted(__protobuf__.manifest))

0 commit comments

Comments
 (0)